Android中Intent的匹配规则和注意事项
没有设置数据的情况下,只要Intent中的action和category都出现在Intent-filter中,就能与之匹配,否则匹配失败。
注意事项:
①创建Intent对象,系统会默认给当前的对象添加一个category,即:<category android:name="android.intent.category.DEFAULT"/>所以,intent-filter中需要配置。
②Intent的setType()方法会自动的清除掉Intent中先前设置的数据,所以,既需要设置的Data,又需要设置Type时,使用setDataAndType()即可。
测试代码如下:
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
public class IntentActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void click(View view){
Intent intent = new Intent("cn.itcast.zhangxx");
intent.addCategory("cn.itcast.category.java");
intent.setDataAndType(Uri.parse("itcast://www.itcast.cn/liming"), "iamge/jpeg");
startActivity(intent);
}
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.itcast.intent"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity android:name="cn.itcast.intent.IntentActivity">
<intent-filter >
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name="cn.itcast.intent.OtherActivity">
<intent-filter >
<action android:name="cn.itcast.zhangxx"/>
<category android:name="cn.itcast.category.java"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="iamge/*" android:scheme="itcast" android:host="www.itcast.cn"/>
</intent-filter>
</activity>
</application>
</manifest>