android细节之android.intent.category.DEFAULT的使用

咱们知道,实现android的Activity之间相互跳转须要用到Intent,android

Intent又分为显式Intent和隐式Intent,微信

显式Intent很简单,好比我在FirstActivity中想跳转到SecondActivity,只须要直接声明就好了:this

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);

 

 

而在使用隐式Intent实现Activity之间跳转的时候,并无明确指定要打开哪一个activity,spa

而是经过指定3个参数:action,category,data,code

而后让系统去寻找可以匹配得上这三个参数的Acativity,若是有多个符合条件的Activity,就会让用户选择其中一个打开。xml

例如我选择手机相册中的一张照片,点击“发送”按钮:blog

而后就可让我选择是发送给QQ好友,微信好友仍是发送到朋友圈。这实际上就是一个隐式Intent启动Activity的实例。string

 

而决定一个Activity可以响应哪些Intent,就须要在AndroidManifest.xml的<activity>标签下配置<intent-filter>的内容,能够指定当前活动可以响应的action,category和data,好比说我在SecondActivity下设置以下代码:it

复制代码
<activity
android:name=".SecondActivity" android:label="@string/title_activity_second" android:theme="@style/AppTheme.NoActionBar" > <intent-filter> <action android:name="android.intent.action.MYACTION" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.MYCATEGORY" /> </intent-filter>
</activity>
复制代码

 

再在MainActivity中经过隐式Intent:io

Intent intent=new Intent("android.intent.action.MYACTION");
startActivity(intent);

 

而后就启动了SecondActivity。

 

在这里,看似咱们在Intent中只指定了要打开的活动只须要响应一个Action为“android.intent.action.MYACTION”就行,可是实际上,系统在使用隐式Intent的时候,会自动帮咱们添加上“android.intent.category.default”,因此——实际上全部须要被隐式Intent启动的activity,都要加上<category android:name="android.intent.category.DEFAULT" />这一段声明,不然就会启动不了并提示没法匹配该Intent的错误:

 

若是你要隐式启动的那个活动是程序最早启动的那个activity,

即声明了<category android:name="android.intent.category.LAUNCHER" />,

就能够不用写<category android:name="android.intent.category.DEFAULT" />的声明了,

(在这里LAUNCHER,就是你打开程序,最早启动的那一个Activity。)另外,LAUNCHER必定要配合action MAIN一块儿使用,不然不会启动,即:

<intent-filter>
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
相关文章
相关标签/搜索