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

leonhy
  • 113

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

回复
阅读 5.5k
2 个回答
Esimorp
  • 129

通过包名启动

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;  
            }  
        }  

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

宣传栏