Android中Intent的Action、Category属性与intent-filter配置

时间:2022-07-25 16:26:59

Intent的Action、Category属性都是一个普通的字符串,其中Action代表该Intent所要完成的一个抽象“动作”,而Category则用于为Action增加额外的附加信息。通常Action属性会与Category属性结合使用。

Action要完成的只是一个抽象的动作,这个动作具体由哪个组件(或是Activity或是BroadcastReceiver)来完成,Action这个字符串本身并不管,哪个Activity的<intent-filter>配置中包含了该字符串,该Activity就有可能被启动。一个Intent对象中最多只能包括一个Action属性,但可以包含多个Category属性。

第一个Activity:
package com.lovo.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.activity_main_btn);
btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent intent = new Intent();
// 设置Action属性
intent.setAction("com.lovo.intent.action.hello");
// 添加Category属性
intent.addCategory("com.lovo.intent.category.hello");
intent.addCategory("com.lovo.intent.category.welcome");
startActivity(intent);
}
});
}
}


第二个Activity:

package com.lovo.activity;

import java.util.Set;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;

public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
EditText show = (EditText) findViewById(R.id.second_et1);
EditText cate = (EditText) findViewById(R.id.second_et2);
// 获取该Activity对应的Intent的Action属性
String action = getIntent().getAction();
// 显示Action属性
show.setText("Action为:" + action);

// 获取该Activity对应的Intent的Category属性
Set<String> cates = getIntent().getCategories();
// 显示Category属性
cate.setText("Category属性为:" + cates);
}
}

目标Action对应的配置代码:

 <activity
android:name=".SecondActivity"
android:label="@string/app_name" >
<intent-filter>
<!-- 指定该Activity能响应action为指定字符串的Intent -->
<action android:name="com.lovo.intent.action.hello" />
<!-- 指定该Activity能响应category为指定字符串的Intent -->
<category android:name="com.lovo.intent.category.hello" />
<category android:name="com.lovo.intent.category.welcome" />
<!-- 指定该Activity能响应category为android.intent.category.DEFAULT的Intent -->
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>