5.3Intent (隐式意图和显示意图)

1.Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,
Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递 Intent 来执行动作和产生事件。
使用 Intent 可以激活 Android 应用的三个核心组件:活动(Activity)、服务(Service)和广播接收器(BroadcastReceiver)。

2.Intent可以划分成显式意图和隐式意图。
显式意图:调用Intent.setComponent() 或 Intent.setClassName() 或 Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。
如: 在 MainActicity 中打开一个新的 Acticity – OtherActivity
1. Intent intent = new Intent();
2. intent.setComponent(new ComponentName(MainActivity.this, OtherActivity.class));
3. 第二行代码可以更换为:intent.setClass(MainActivity.this, OtherActivity.class);
4. 也可以使用构造器来指定组件: Intent intent = new Intent(MainActivity.this, OtherActivity.class)

隐式意图:没有明确指定组件名的Intent为隐式意图。
Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(data: URI和数据类型)找到最合适的组件来处理这个意图
例如拨打电话的意图:
Uri uri = Uri.parse(“tel:” + phoneCode);
Intent intent = new Intent(Intent.ACTION_CALL, uri);

对于隐式意图,,指定了一个intent-filter,Intent Filter(意图过滤器)其实就是用来匹配隐式Intent的,当一个意图对象被一个意图过滤器进行匹配测试时,只有三个方面会被参考到:动作、数据(URI以及数据类型)和类别。
如一个点击方法(内含隐式意图):

//显式意图  :必须指定要激活的组件的完整包名和类名 (应用程序之间耦合在一起),一般激活自己应用的组件的时候 采用显示意图
//隐式意图: 只需要指定要动作和数据就可以 ( 好处应用程序之间没有耦合),激活别人写的应用  隐式意图, 不需要关心对方的包名和类名
public void click(View view) {
        // 打 action
        // 人 数据
        // 附件的数据 Category 类别
        Intent intent = new Intent();
        //action要与清单文件中一致
        intent.setAction("com.intent2.open2");
        //要加参数Category类别
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        // URL:统一资源定位符 http https ftp rtsp: URI:统一资源标识符 url是uri的一个子集
        // intent.setData(Uri.parse("jianren:张三"));
        // intent.setType("application/person");
        intent.setDataAndType(Uri.parse("jianren:张三"), "application/person");
        startActivity(intent);
    }

清单文件中为:

<activity android:name="com.intent2.SecondActivity" >
            <intent-filter>
                <action android:name="com.intent2.open2" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="application/person" />
                <data android:scheme="jianren" />
            </intent-filter>
        </activity>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值