天天看點

奇酷360 手機中怎麼跳轉安全中心中指定包名App的權限管理頁面

在處理SDK開發過程中遇到如下問題,在 MIUI 中,涉及浮窗的 APP  需要在對應的軟體設定頁面打開   浮窗權限   才能正常使用 APP , MIUI 的權限設定入口就在應用管理頁面,可以通過如下的代碼跳轉至該入口:
private IntentgetAppDetailSettingIntent(Context context) {
Intent localIntent = new Intent();
localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (Build.VERSION.SDK_INT >= 9) {
localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
localIntent.setData(Uri.fromParts("package", getPackageName(),null));
} else if (Build.VERSION.SDK_INT <= 8) {
localIntent.setAction(Intent.ACTION_VIEW);
localIntent.setClassName("com.android.settings","com.android.settings.InstalledAppDetails");
localIntent.putExtra("com.android.settings.ApplicationPkgName", getPackageName());
}
return localIntent;
}
           
但是在奇酷360手機中,這段代碼确實可以跳轉至“應用管理”頁面,但是應用管理頁面中的 權限管理的入口是 置灰的,無法點選。:
奇酷360 手機中怎麼跳轉安全中心中指定包名App的權限管理頁面
而且Android自帶的任何Action 都不發正确跳轉至“權限”的頁面。 研究了下,這款手機權限管理的正确進入方式為:(操作流程為:設定-->應用權限管理-->權限管理-->按軟體檢視) 我玩了下手機,發現手機中有一款内置的App ,名為“安全中心”, 這款App打開後,有個入口也叫權限管理,進去後,如圖所示:
奇酷360 手機中怎麼跳轉安全中心中指定包名App的權限管理頁面
操作流程為: 安全中心-->權限管理-->按軟體檢視 随意點選一個App後進入到真正的“權限管理”頁面:
奇酷360 手機中怎麼跳轉安全中心中指定包名App的權限管理頁面
并且我發現一個現象: 1.  從設定進去的權限管理頁面 在跳轉的時候有明顯的卡頓,在同款App内部進行跳轉的時候,除非在onCreate 、onPostCreate、onStar等生命周期涉及到的方法中進行耗時操作,才有可能導緻Activity 啟動卡頓 2.  但是從“安全中心” App進去權限管理的頁面,卻不會卡頓 是以我有理由相信這是在設定中進行對 “安全中心”這款App “權限管理" 頁面的跳轉,于是我周遊了下手機中所有的App的應用資訊,發現“安全中心”的包名為:“ com.qihoo360.mobilesafe”, 接着我用下面的方法找到這款App的入口Activity 的ClassName 為:“ com.qihoo360.mobilesafe.ui.index.AppEnterActivity”
Intent resolveIntent = new Intent();
resolveIntent.addCategory(Intent.CATEGORY_DEFAULT);
resolveIntent.setPackage(pi.packageName);

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

ResolveInfo ri = apps.iterator().next();

for (int i = 0; i < apps.size(); i++) {
ResolveInfo ri = apps.get(i);
System.out.println("packageName:" + ri.activityInfo.packageName +" className: " + ri.activityInfo.name);
}
/**
下面的代碼可以跳轉至這個APP的入口Activity
if (ri != null ) {
String packageName = ri.activityInfo.packageName;
String className = ri.activityInfo.name;

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

ComponentName cn = new ComponentName(packageName, className);

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

如果隻是想跳轉至這個APP的入口Activity,可以更簡單:
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent = getPackageManager().getLaunchIntentForPackage("com.qihoo360.mobilesafe");
startActivity(intent);

*/
           
但隻是找到入口遠遠不夠,我需要找到“權限管理”頁面,于是我通過下面的Adb指令找到了"權限管理"頁面所在的Activity的ClassName為: “ com.qihoo360.mobilesafe.loader.a.ActivityN1NR0” 1.logcat .清除logcat内容,使用指令adblogcat -c .啟動logcat,使用指令adblogcat ActivityManager:I *:s .啟動要檢視的程式,
奇酷360 手機中怎麼跳轉安全中心中指定包名App的權限管理頁面
2.dumpsys (1)啟動要檢視的程式; (2)指令行輸入:adb shell dumpsys windoww |findstr \/ |findstr name=
奇酷360 手機中怎麼跳轉安全中心中指定包名App的權限管理頁面

做完上述操作的第一步之後,點選“安全中心” ,進入到這個App,一步步點選到“權限管理”頁面。操作流程為: 安全中心App-->權限管理-->按軟體檢視.

做到這裡, 我希望跳轉至這個Activity: ActivityN1NR0,我想反編譯這個“安全中心”App的代碼看看跳轉的代碼,是以我想root後去 /system目錄下找這個app的 apk包。 我嘗試root :失敗。 使用root工具: 失敗。 我換了種方式,直接通過檔案流把這個APP的apk包複制出來也行啊,如下所示:

try {
ApplicationInfo appInfo =getPackageManager().getApplicationInfo("com.qihoo360.mobilesafe", 0);
String apkPath = appInfo.sourceDir;
if (TextUtils.isEmpty(apkPath)) {
return;
}
FileInputStream fileInputStream = new FileInputStream(apkPath);
File cacheFile = new File(Environment.getExternalStorageDirectory().toString()+ File.separator + "360safe.apk");
if(!cacheFile.exists()) {
cacheFile.createNewFile();
}

BufferedOutputStream bos = null;
bos = new BufferedOutputStream(new FileOutputStream(cacheFile));

byte[] buf = new byte[1024];
int len = 0;
while ((len = fileInputStream.read(buf)) > 0) {
bos.write(buf, 0, len);
}

fileInputStream.close();
bos.close();
} catch (Exception e) {
e.printStackTrace();
}
           
複制成功,但是悲劇了,我zip解壓後,發現沒有 classes.dex 檔案,都在assect中,如圖所示:
奇酷360 手機中怎麼跳轉安全中心中指定包名App的權限管理頁面
奇酷360 手機中怎麼跳轉安全中心中指定包名App的權限管理頁面
AndroidMnifest.xml中找到了Activity: ActivityN1NR0 。
奇酷360 手機中怎麼跳轉安全中心中指定包名App的權限管理頁面

至此,是我全部的過程, 還是沒有找到跳轉至 “ 權限管理 ” 頁面的   方法。

後續尋找方法中!!!

360論壇發帖位址:點選打開連結

奇酷社群發帖位址:點選打開連結

後續:

經後續檢測,360權限管理還是可以通過Activity跳轉完成,隻是還是不知道   需要傳遞的host等資料格式