美文网首页项目Android知识Android开发
Android通过App启动另一个APP

Android通过App启动另一个APP

作者: 吾若成疯 | 来源:发表于2016-10-28 17:49 被阅读8344次

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

相关文章

网友评论

  • 微笑中的你:没有5.0以下的机器唉。我用的4.0模拟器都可以跳转到指定Activity,没有做作者说的第2步唉。。。作者写的简单明了。不错!
  • 320c02fbc2a8:我在自己写的app中跳转到酷我音乐 已经安装了 为什么还是提示 没有安装 我的包名是没有错的啊 求解决 一下午都没解决这个问题我就纳闷了
    wxy1107:@leesai 真厉害哦,
  • dongbingliu:项目中借鉴了第一部分源码,可以做成一个通用类的方法
  • 泠泠轻语:作者写的很有心,支持!加油!:beers:
    起个名字真难999:中间会有一个过度动画到主界面来了,有没有办法阻止呢?
    吾若成疯:@沉默以待 一起加油
  • 鱼雷:不错

本文标题:Android通过App启动另一个APP

本文链接:https://www.haomeiwen.com/subject/utdeuttx.html