搜索

首页  >  问答  >  正文

android - 应用市场打开已经安装的APP,直接进入到这个APP当前页面是怎么做的??

应用市场打开已经安装的APP,直接进入到这个APP当前页面是怎么做的??

怪我咯怪我咯2772 天前494

全部回复(2)我来回复

  • 大家讲道理

    大家讲道理2017-04-17 17:41:14

    通过包名启动

    private void doStartApplicationWithPackageName(String packagename) {  
      
        // 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等  
        PackageInfo packageinfo = null;  
        try {  
            packageinfo = getPackageManager().getPackageInfo(packagename, 0);  
        } catch (NameNotFoundException e) {  
            e.printStackTrace();  
        }  
        if (packageinfo == null) {  
            return;  
        }  
      
        // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent  
        Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);  
        resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);  
        resolveIntent.setPackage(packageinfo.packageName);  
      
        // 通过getPackageManager()的queryIntentActivities方法遍历  
        List<ResolveInfo> resolveinfoList = getPackageManager()  
                .queryIntentActivities(resolveIntent, 0);  
      
        ResolveInfo resolveinfo = resolveinfoList.iterator().next();  
        if (resolveinfo != null) {  
            // packagename = 参数packname  
            String packageName = resolveinfo.activityInfo.packageName;  
            // 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packagename.mainActivityname]  
            String className = resolveinfo.activityInfo.name;  
            // LAUNCHER Intent  
            Intent intent = new Intent(Intent.ACTION_MAIN);  
            intent.addCategory(Intent.CATEGORY_LAUNCHER);  
      
            // 设置ComponentName参数1:packagename参数2:MainActivity路径  
            ComponentName cn = new ComponentName(packageName, className);  
      
            intent.setComponent(cn);  
            startActivity(intent);  
        }  
    }  

    如果需要切换应用的话就需要使用getRunningTasks获取正在运行的应用,判断要打开的包名是否在这个列表里,如果在的话就利用activityManager的moveTaskToFront方法把应用移到栈顶

         ActivityManager mAm = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE);  
            List<ActivityManager.RunningTaskInfo> taskList = mAm.getRunningTasks(100);  
            for (ActivityManager.RunningTaskInfo rti : taskList) {  
                //找到当前应用的task,并启动task的栈顶activity,达到程序切换到前台  
                if(rti.topActivity.getPackageName().equals(context.getPackageName())) {  
                    mAm.moveTaskToFront(rti.id,0);  
                    return;  
                }  
            }  

    回复
    0
  • PHPz

    PHPz2017-04-17 17:41:14

    题主 你这问题解决了吗??好像楼上的方法测试有bug啊

    回复
    0
  • 取消回复