Android开发过程踩坑记录-持续更新

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 must 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");

所以. 不知道原因时, 多看看注释是不错的哦.

你可能感兴趣的:(Android开发过程踩坑记录-持续更新)