应用市场打开已经安装的APP,直接进入到这个APP当前页面是怎么做的??
走同样的路,发现不同的人生
透過包名啟動
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
透過包名啟動
如果需要切換應用的話就需要使用getRunningTasks獲取正在運行的應用,判斷要打開的包名是否在這個列表裡,如果在的話就利用activityManager的moveTaskToFront方法把應用移到棧頂
題主 你這問題解決了嗎? ?好像樓上的方法測試有bug