zoukankan      html  css  js  c++  java
  • 花了我一天才解决 郁闷

    如果是从BroadcastReceiver启动一个新的Activity, 不要忘记i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     

     

    private Context mContext;
      
    /** Called when the activity is first created. */
        @Override
        
    public void onCreate(Bundle savedInstanceState) {
            
    super.onCreate(savedInstanceState);
            mContext 
    = this;
    。。。。。。。。。。。。。。。。
    Context字面意思上下文,位于framework package的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄,很多方法需要通过 Context才能识别调用者的实例,比如说Toast的第一个参数就是Context,一般在Activity中我们直接用this代替,代表调用者的实例为Activity,而到了一个button的onClick(View view)等方法时,我们用this时就会报错,所以我们可能使用ActivityName.this来解决,主要原因是因为实现Context的类主要有Android特有的几个模型,Activity、Service以及BroadcastReceiver。

    常规需要Context实例的方法主要有各种Service实现的类,比如说SensorManager在实例化时需要 getSystemService(String)方法就必须由Context的实例执行,还有一些私有的文件系统I/O比如说 openFileInput以及常用的Toast的makeText方法。。。。。
     

    public class MyReceiver extends BroadcastReceiver{

    public static final String action="acc";
     public void onReceive(Context context, Intent intent) {
      Intent i=new Intent(context,Receivered.class);
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      context.startActivity(i);
     }

     
    }

     

     

    1. 指定action 和type
    // SIM import
            Intent importIntent = new Intent(Intent.ACTION_VIEW);
            importIntent.setType("vnd.android.cursor.item/sim-contact");
            importIntent.setClassName("com.android.phone", "com.android.phone.SimContacts");
            menu.add(0, 0, 0, R.string.importFromSim)
                    .setIcon(R.drawable.ic_menu_import_contact)
                    .setIntent(importIntent);
                    
    2. 指定action, data和type
    (1)隐式查找type
    示例代码:
    uri: content://simcontacts/simPeople/(id)
    intent = new Intent("android.intent.action.SIMEDIT",uri);
                startActivity(intent);

    程序会很据data中的uri去查找匹配的type(必须的)            
    provider中的getType()            
    case SIM_PEOPLE_ID:
                return "vnd.android.cursor.item/sim-contact";  

    配置文件中的filter设定           
    AndroidManifest.xml
        <intent-filter>
                    <action android:name="android.intent.action.SIMEDIT" />
                    <category android:name="android.intent.category.DEFAULT" />          
                    <data android:mimeType="vnd.android.cursor.item/sim-contact" />
          </intent-filter>

    也可以自己设定type,但只能使用 setDataAndType()     
          
    3. 其他设定intent的属性方式
       Intent setComponent(ComponentName component)
       Intent setClassName(Context packageContext, String className)
       Intent setClassName(String packageName, String className)
       Intent setClass(Context packageContext, Class<?> cls)
       

    Intent应该算是Android中特有的东西。你可以在Intent中指定程序要执行的动作(比如:view,edit,dial),以及程序执行到该动作时所需要的资料。都指定好后,只要调用startActivity(),Android系统会自动寻找最符合你指定要求的应用程序,并执行该程序。

  • 相关阅读:
    AX 2012 Security Framework
    The new concept 'Model' in AX 2012
    How to debug the SSRS report in AX 2012
    Using The 'Report Data Provider' As The Data Source For AX 2012 SSRS Report
    Deploy SSRS Report In AX 2012
    AX 2012 SSRS Report Data Source Type
    《Taurus Database: How to be Fast, Available, and Frugal in the Cloud》阅读笔记
    图分析理论 大纲小结
    一文快速了解Posix IO 缓冲
    #转载备忘# Linux程序调试工具
  • 原文地址:https://www.cnblogs.com/tt_mc/p/1678731.html
Copyright © 2011-2022 走看看