您的位置:首页 > 移动开发

Android通过App启动另一个APP

2017-07-22 14:53 405 查看
(转载)http://www.jianshu.com/p/42ae7066f8f3

在开发项目中会遇到这样的需求,通过一个应用启动另外一个应用或者打开另一个应用的某个Activity。虽然说我还没遇到过,但突然想到这个问题,就自己写了个Demo测试了一下,在这里做一下简单总结。

1、通过APP启动另一个APP

直接上代码,

PackageManager packageManager = getPackageManager();
if (checkPackInfo(packname)) {
Intent intent = packageManager.getLaunchIntentForPackage(packname);
startActivity(intent);
} else {
Toast.makeText(MainActivity.this, "没有安装" + packname, 1).show();
}

/**
* 检查包是否存在
*
* @param packname
* @return
*/
private boolean checkPackInfo(String packname) {
PackageInfo packageInfo = null;
try {
packageInfo = getPackageManager().getPackageInfo(packname, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return packageInfo != null;
}

如果手机上已经安装了另一个APP直接就能够打开了。

2、打开另一个APP指定的Activity

Intent intent = new Intent();
//第一种方式
ComponentName cn = new ComponentName("com.example.fm", "com.example.fm.MainFragmentActivity");
try {
intent.setComponent(cn);
//第二种方式
//intent.setClassName("com.example.fm", "com.example.fm.MainFragmentActivity");
intent.putExtra("test", "intent1");
startActivity(intent);
} catch (Exception e) {
//TODO  可以在这里提示用户没有安装应用或找不到指定Activity,或者是做其他的操作
}

这里有两点需要注意

1、需要将目标Activity的android:exported="true"属性在所属应用AndroidMainfest里设置为true,意思是当前Activity可以被外部应用访问,否则会报下面的错误

Caused by: java.lang.SecurityException: Permission Denial: starting  Intent
{ cmp=com.example.fm/.MainFragmentActivity (has extras) } from ProcessRecord
{39282a97 11545:com.xing.toolbardemo1/u0a71}  (pid=11545,     uid=10071) not exported from uid 10067

2、需要在当前应用的AndroidMainfest里也声明目标Activity,否则会报下面的错误

(5.0以后好像不会有这个错,我用的了两个5.0一下的测试机都报错了)

Caused by: android.content.ActivityNotFoundException: Unable to find
explicit activity class {com.example.fm/com.example.fm.MainFragmentActivity};
have you declared this activity in your AndroidManifest.xml?

在清单文件里声明目标Activity就OK了

<activity android:name="com.example.fm.MainFragmentActivity"></activity>

这样我们就实现了通过一个APP打开另一个APP的功能啦。

作者:吾若成疯

链接:http://www.jianshu.com/p/42ae7066f8f3

來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: