Android中的Intent(显示&隐式)
-
显示Intent
显示Intent是明确目标Activity的类名- 通过Intent(Context packageContext, Class<?> cls)构造方法
Intent intent = new Intent(this, SecondActivity.class) startActivity(intent);
- 通过Intent的setComponent()方法
ComponentName componentName = new ComponentName(this, SecondActivity.class); ComponentName componentName = new ComponentName(this, "com.example.SecondActivity"); ComponentName componentName = new ComponentName(getPackageName(), "com.example.SecondActivity");Intent intent = new Intent(); intent.setComponent(componentName); startActivity(intent);
- 通过Intent的setClass/setClassName方法
其实setClass/setClassName方法底层调用的还是setComponent方法,只是对setComponent方法进行封装了下。Intent intent = new Intent(); intent.setClass(this, SecondActivity.class); intent.setClassName(this, "com.example.SecondActivity"); intent.setClassName(getPackageName(), "com.example.SecondActivity"); startActivity(intent);
- 通过Intent(Context packageContext, Class<?> cls)构造方法
-
隐式Intent
隐式Intent通过设置Action、Data、Category,让系统来筛选出合适的Activity。筛选是根据所有的来筛选。<intent-filter><action android:name=“com.example.second”/><category andorid:name="android.intent.category.DEFAULT"/> </intent-filter>
Intent intent = new Intent("com.example.second");startActivity(intent);如果应用代码中action的android:name与系统的冲突了,比如都为<action android:name=“android.intent.action.DIAL”/>(即系统为打电话的应用),则启动该intent的时候会有出现一个弹框,包含系统打电话的应用和用户自定义的Activity同时出现,让用户自己去选择启动哪个Activity。
一般在开发过程中,如果是同项目的采用显示Intent;如果创建一个Activity是供外包使用的,则创建隐式Intent