IntentFilter匹配规则

前不久,产品提出一个恶心的需求,微信或者QQ分享九张图片,但是一般的分享平台,只能分享一张,此时该如何解决呢?这也是今天的主讲内容,intent。

1. 显示intent,跳转Activity

1.1 本应用内,只需要设置指定Activity名,即可跳转

1.2 同一个手机内,设置ComponentName和包名类名

Intent intent = new Intent();
ComponentName componentName = new ComponentName("com.example.handler.myapplication"
            "MainActivity");
intent.setComponent(componentName);
startActivity(intent);
//当然,在这之前用pms判断一下,是否存在该包名。不然报错

2.隐式intent

通过intentFilter设置一些过滤信息,如果不匹配,则无法启动。
一个Activity可以有多个intentFilter,一个intent,只要能匹配任何一组intent-Filter,就可以成功启动Activity,当然其他的三大组件一样。

2.1 过滤信息主要分三种

2.1.1 action
2.1.2 category
2.1.3 data

2.2 唯一需要注意几点

1. action是必须要写的。data和category可以不写。
2. category不写时,系统会默认给Activity设置
   android.intent.category.DEFAULT
3.当前Activity如果想要被隐式调用
  那么必须要在intent-Filter中加上category
  并且设置DEFAULT属性

2.3 data主要分成两部分

2.3.1 mimeType(媒体类型,如图片,文本,视频 image/jpeg、audio、video/*)

2.3.2 URI(包含的比较多,略,具体看艺术探索)。

3.常见例子:

3.1 启动页

<intent-filter>
  //代表主入口
   <action android:name="android.intent.action.MAIN" />
   //代表APP是在LAUNCHER桌面,也就是系统应用列表
   <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

3.2 打电话

Intent intent = new Intent();
intent.setAction("android.intent.action.CALL");
//匹配系统自带的action和data规则
intent.setData(Uri.parse("tel:"+ mobile));
startActivity(intent);

总之,无论是哪种intent,只需要两边保持一致即可

具体的分享多张图,参考这篇文章即可

但是疑问点在于,我用adb查看微信和QQ的分享页的Activity类名,和这上面的不一致,具体原因也不明白为什么。

igding wechat
2018 依计行事 持续精进
坚持原创技术分享,您的支持将鼓励我继续创作!