最近在上架GooglePlay,奈何Google8月份剛釋出的稽核警告
Google也說了能适用的APP類型如下:
其實 QUERY_ALL_PACKAGES 這個權限是針對 Android11以及以上系統擷取不全目前手機已安裝app清單添加的權限。 Android11以下不添加這個權限,是正常拿到清單的。 但我們做程式怎麼可能不考慮适配呢。于是乎,解決思路根據Google文檔的方案。
在AndroidManifest.xml 中添加
<queries package="${applicationId}">
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE"/>
</intent>
<intent>
<action android:name="android.media.action.ACTION_VIDEO_CAPTURE"/>
</intent>
<intent>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent>
</queries>
@NonNull
public static List<String> getAllApps(@NonNull Context context) {
List<String> apps = new ArrayList<>();
PackageManager pManager = context.getPackageManager();
// 擷取手機内所有應用
@SuppressLint("QueryPermissionsNeeded") List<ApplicationInfo> packlist = pManager.getInstalledApplications(0);
for (int i = 0, len = packlist.size(); i<len; i++) {
ApplicationInfo pak = (ApplicationInfo) packlist.get(i);
// if()裡的值如果<=0則為自己裝的程式,否則為系統工程自帶
if ((pak.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {
// 添加自己已經安裝的應用程式
apps.add(pak.packageName);
}
// apps.add(pak);
}
return apps;
}
其實利用了過濾器原則,在清單檔案中篩選包含 MAIN 的應用。 正常應用來說都會有一個MAIN程式主入口。利用這個機制,完美拿到所有Android系統的已安裝應用清單。
喜歡的話點個小心心再走~
如果不在海外上架的小夥伴,該添權重限的添權重限,友善省事。