跳转无非就是知道包名。貌似很简单,今天却搞了1小时才弄出来,问题出在两个程序不在同一个进程。
为此总结常见问题
常规跳转方法代码
ComponentName componetName = new ComponentName(
//这个是另外一个应用程序的包名
"cn.fotomen.camera",
//这个参数是要启动的Activity
"cn.fotomen.camera.activity.WelcomeActivity");
try {
Intent intent = new Intent();
Bundle bundle = new Bundle();
intent.putExtras(bundle);
intent.setComponent(componetName);
context.startActivity(intent);
} catch (Exception e) {
//如果没找到 可以给出提示 或者其他操作
}
问题一
java.lang.SecurityException: Permission Denial:
你的包名写对了,你的详细跳转activity也写对了,运行出现如图的权限问题。
这是什么问题,是由于两个程序不在同一个进程里导致的。
解决办法:修改两个程序的AndroidManifest.xml 将AB两个程序的<Application>标签加入如下代码
<application
android:label="@string/app_name"
android:icon="@drawable/icon"
android:process="cn.fotomen"
>
如代码所示,红色为新增,设置他们为同一个进程。两个程序的 都要改。测试应该就OK
问题二
[INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID]
有时候看贴子可能会提示你把他们设置同一个共享的userid,但是有的虚拟机不支持。所以就不要画蛇添足了
解决方法:去掉<mainfest>标签中的 android:sharedUserId="test"一行即可
目前就发现这两个问题,如果你有新问题,请你跟帖,谢谢!
更正一下 经过 singwhatiwanna的指点
我分析的有问题,真正阻止他的原因是因为跳转的activity的属性问题,应该设置为开放 这样其他程序就可以调用他了
android:exported="true"
特此更正 不用再改进程名称了,再次感谢 singwhatiwanna的提醒