2018-6-14 关于Intent
当我们隐式启动一个service时
Intent it = new Intent("xxx.RemoteService");
bindService(it, mRemoteConnectioin, BIND_AUTO_CREATE);
如果参数 action里边的 xxx是随意写的, 会报错.
Process: com.example.android.test01, PID: 27678
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cccc/com.ccc.aaaServiceActivity}:
java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { >act=xxxx.remoteservice }
at android.app.Activi
这时我一百度, 大部分都说是 要显示Intent: 如:
" 通过Action的隐式Intent启动Service在安卓5.0以前的版本是可以实现跨应用启动Service的,安卓5.0以后的版本若想实现
跨应用启动Service的功能必须使用显示Intent"。
这显示是不行的.
解决 ; 查看ap注释
/**
* Create an intent with a given action. All other fields (data, type,
* class) are null. Note that the action <em>must</em> be in a
* namespace because Intents are used globally in the system -- for
* example the system VIEW action is android.intent.action.VIEW; an
* application's custom action would be something like
* com.google.app.myapp.CUSTOM_ACTION.
即上边的 action必须在一个 namespace里边, 因为intent被系统全局应用.
*
* @param action The Intent action, such as ACTION_VIEW.
*/
public Intent(String action) {
setAction(action);
}
翻译注释得知:即上边的 action必须在一个 namespace里边, 因为intent被系统全局应用.
那么怎么才能在一个 namespace里边呢.显示 我们setPackage就可以了.增加代码
it.setPackage("com.aaa.bbb");
所以. 不知道原因时, 多看看注释是不错的哦.