arthinking

Just do it

在App中启动另一个App的实现方式

1.场景

我们经常会看到在微信里面可以调用QQ客户端,在一个App里面通过点击事件打开手机里面已经安装的某个app,从而满足我们的各种需求

2.分析

一般都不知道应用程序的启动Activity的类名,而只知道包名,我们可以通过ResolveInfo类来取得启动Acitivty的类名,然后通过packageName和className来启动另一个app.
在退出被打开的app后如果想回到之前的app,记得不要finish掉之前的app.

3.代码实现

 /**
     * 打开指定包名的app,这里的包名指的是app的主包名
     *
     * @param packageName 包名
     */
    private void openApp(String packageName) {
        PackageInfo pi = null;
        try {
            pi = getPackageManager().getPackageInfo(packageName, 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }

        Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
        resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        resolveIntent.setPackage(pi.packageName);

        PackageManager pm = getPackageManager();
        List<ResolveInfo> apps = pm.queryIntentActivities(resolveIntent, 0);

        ResolveInfo ri = apps.iterator().next();
        if (ri != null) {
            String getPackageName = ri.activityInfo.packageName;
            String getClassName = ri.activityInfo.name;

            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_LAUNCHER);

            ComponentName cn = new ComponentName(getPackageName, getClassName);

            intent.setComponent(cn);
            startActivity(intent);
        }
    }


4.调用方式

 //包名
String testPackageName = "com.miui.gallery";
openApp(testPackageName);

5.参考文档

http://www.oschina.net/question/229726_36557
阅读更多

扫码向博主提问

去开通我的Chat快问

jdfkldjlkjdl

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • JAVA
  • Android
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jdfkldjlkjdl/article/details/77523481
文章标签: app launcher
个人分类: 工具类
想对作者说点什么? 我来说一句

android防微信分享功能

2016年08月19日 70KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭