因为用了运行时权限后,国内厂商你只要拒绝了,你再运行一次代码也不会弹出运行时的权限窗口,这样你只能引导用户自己去权限界面授权了。
内容引用来自:https://blog.csdn.net/u014361280/article/details/107935313如果看了不详细可以来这里看看。
/***
* 使用 ResolveInfo 獲取 應用列表信息
* @return
*/
private List<AppInfo> loadAllApplication() {
PackageManager manager = getActivity().getPackageManager();
List<AppInfo> myAppInfos = new ArrayList<AppInfo>();
mLocalInstalledApps_Tmp = new ArrayList<AppInfo_Tmp>();
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> availableActivities = manager.queryIntentActivities(intent, 0);
int no=0;
for (ResolveInfo ri : availableActivities) {
ApplicationInfo applicationInfo = ri.activityInfo.applicationInfo;
if((applicationInfo.flags & (ApplicationInfo.FLAG_UPDATED_SYSTEM_APP | ApplicationInfo.FLAG_SYSTEM)) > 0) {
// It is a system app
} else {
Log.i(TAG, "loadAllApplication: applicationInfo.packageName " + applicationInfo.packageName);
Log.i(TAG, "loadAllApplication: applicationInfo.label " + applicationInfo.loadLabel(manager));
no ++;
AppInfo myAppInfo = new AppInfo();
AppInfo_Tmp myAppInfo_Tmp = new AppInfo_Tmp();
// app packageName
myAppInfo.setPackageName(applicationInfo.packageName);
myAppInfo_Tmp.setPackageName(applicationInfo.packageName);
// app appName
myAppInfo.setAppName(applicationInfo.loadLabel(manager).toString());
if (ri.loadIcon(manager) ==null){
Log.i(TAG, "loadAllApplication: ri.loadIcon(manager) ==null");
}else {
myAppInfo_Tmp.setAppIcon(ri.loadIcon(manager));
}
myAppInfos.add(myAppInfo);
mLocalInstalledApps_Tmp.add(myAppInfo_Tmp);
}
}
//Toast.makeText(getActivity(),"App no:"+no,Toast.LENGTH_SHORT).show();
Log.i(TAG, "loadAllApplication: App no:"+no);
return myAppInfos;
}
<queries>
<intent>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent>
</queries>