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和标记位的activityPackageManager.MATCH_DEFAULT_ONLY就是activity中配置了
<category android:name="android.intent.category.DEFAULT"/>下面这个方法如果list是空的启动的时候也会报错List<ResolveInfo> list = manager.queryIntentActivities(intent
,PackageManager.
MATCH_DEFAULT_ONLY)
;
转载请注明原文地址: https://ju.6miu.com/read-1311432.html