安卓Intent(隐式)

      相对于显式Intent(明确指出了目标组件名称的Intent),隐式Intent,没有明确指出目标组件名称。显式Intent直接用组件的名称定义目标组件,这种方式很直接。但是由于开发人员往往并不清楚别的应用程序的组件名称,因此,显式Intent更多用于在应用程序内部传递消息。比如在某应用程序内,一个Activity启动一个Service。而隐式Intent恰恰相反,它不会用组件名称定义需要激活的目标组件,它更广泛地用于在不同应用程序之间传递消息。在显式Intent消息中,决定目标组件的唯一要素就是组件名称,因此,如果Intent中已经明确定义了目标组件的名称,那么就完全不用再定义其他Intent内容。而对于隐式Intent则不同,由于没有明确的目标组件名称,所以必须由Android系统帮助应用程序寻找与Intent请求意图最匹配的组件。

    隐式Intent指定一系列更为抽象的action和category等信息,然后交由系统去分析。通过<activity>标签下配置<intent-filter>的内容,可以制定当前活动能够相应的action和category。接上一篇文章,在AndroidManifest.xml中添加:

 <activity android:name=".secondActivity">
            
            <intent-filter>
                <action android:name="com.example.myintent.ACTION_START"/>
                <category android:name="android.intent.category.MY_CATEGORY"/>
            </intent-filter>
        
        </activity>
activity

 

同时修改MainActivity中的代码:

 1 public class MainActivity extends Activity {
 2     
 3     private Button btn1;
 4 
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.activity_main);
 9         
10         btn1=(Button)findViewById(R.id.button1);
11         btn1.setOnClickListener(new OnClickListener() {
12             
13             @Override
14             public void onClick(View arg0) {
15                 // TODO Auto-generated method stub
16                 //显式
17 //            Intent intent=new Intent(MainActivity.this,secondActivity.class);
18 //            startActivity(intent);
19                 
20                 //隐式
21                 Intent intent=new Intent("com.example.myintent.ACTION_START");
22                 intent.addCategory("android.intent.category.MY_CATEGORY");
23                 startActivity(intent);
24             }
25         });
26     }
27 
28     
29 }
onClick

 

只有action和category同时匹配才能相应,一个Intent只能有一个action,但却可以有多个category。当在<intet-filter>中没有添加category时,系统不会报错,将会使用默认的一个category。

 

posted @ 2016-05-11 16:20  zwy_net  阅读(295)  评论(0编辑  收藏  举报