前不久,产品提出一个恶心的需求,微信或者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类名,和这上面的不一致,具体原因也不明白为什么。