activity启动方式:显式&隐式

来源:互联网 发布:php采集程序 编辑:程序博客网 时间:2024/04/28 21:48
1、显式启动activity
Intent intent = new Intent();
intent.setClass(this,C.class);
startActivity(intent);
直接以activity名称启动
2、隐式启动activity
    这种方式启动activity不需要指定activity的名称,要在intent-filter中配置action、category、data等属性值,
然后设置启动activity的intent的action、category、data等属性
    action:intent中的action和intent-filter中配置的其中一个action一致
    category:可有可无,如果有则必须全部和intent-filter中的一致
    data:可有可无,如果有则必须全部和intent-filter中的一致
启动:
Intent intent = new Intent();
intent.setAction("test");//自定义
intent.addCategory("android");//自定义
intent.setDataAndType(Uri.parse("http://www.baidu.com:8080/mpath"),"image/jpeg");
startActivity(intent);
过滤器:
<activity
android:configChanges="screenLayout"
android:taskAffinity="con.new.task"
android:name=".D"
android:launchMode="singleTask">
<intent-filter>
<action android:name="test"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android"/>
<data
android:scheme="http"
android:host="www.baidu.com"
android:port="8080"
android:path="/mpath"
android:mimeType="image/jpeg"
/>
</intent-filter>
</activity>
在隐式启动之前要做校验
PackageManager manager = getPackageManager();
ResolveInfo info = manager.resolveActivity(intent,PackageManager.MATCH_DEFAULT_ONLY);
如果info为空则启动的时候就会报错,resolveActivity方法用于查询符合intent和标记位的activity
PackageManager.MATCH_DEFAULT_ONLY就是activity中配置了
<category android:name="android.intent.category.DEFAULT"/>
下面这个方法如果list是空的启动的时候也会报错
List<ResolveInfo> list = manager.queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY);

1 0