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>