最近在参考《Android开发艺术探索》学习跨进程通信,在写一个使用Messenger跨APP通信的小实例时,在调起另一个APP的组件时遇到几个值得注意的点,记录一下。
一、调起其他App的Activity组件
1、隐式Intent调起方式,当使用action匹配规则,目标组件不要忘记添加默认的category规则。
错误实例:
正确实例:
点评:如果是隐式Intent,系统会默认加上一个android.intent.category.DEFAULT,因此如果目标组件中没有,隐式Intent就会匹配失败。
2、关于android:exported属性是否需要设置
android:exported 是Android中的四大组件 Activity,Service,Provider,Receiver 四大组件中都会有的一个属性。总体来说它的主要作用是:是否支持其它应用调用当前组件。
点评:如果包含有intent-filter 默认值为true; 没有intent-filter默认值为false。由于我们已经设置intent-filter,可以不用再设置android:exported="true".
二、调起其他App的Service组件
1、隐式Intent调起方式:在Android5.0以前可以通过隐式Intent方式启动其他App的Service,就跟Activity启动隐式Intent一样的。但是在5.0以后,只能使用显示的Intent方式启动了。
错误实例:
正确实例: