• 安卓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。

  • 相关阅读:
    swift 中 Self 与self
    Swift 中的泛型
    mac 报文件已损坏 怎么办
    winxp秘钥
    字符串拷贝函数strcpy, strcat, sprintf, strncpy, strncat和snprintf的区别
    【原创】Linux应用程序完整调用自己写的字符设备驱动过程
    idea中新建git分支,并提交到远程github
    (JS-PHP)使用RSA算法进行加密通讯
    Linux日志相关的命令
    hibernate中关于is null的查询
  • 原文地址:https://www.cnblogs.com/wynet/p/5482325.html
Copyright © 2020-2023  润新知