花了我一天才解决 郁闷

如果是从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系统会自动寻找最符合你指定要求的应用程序,并执行该程序。

原文地址:https://www.cnblogs.com/tt_mc/p/1678731.html