android启动别的app吗,Android通过App启动另一个APP

在开发项目中会遇到这样的需求,通过一个应用启动另外一个应用或者打开另一个应用的某个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了

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值