mirror of
https://github.com/pppscn/SmsForwarder
synced 2025-08-04 09:57:41 +08:00
修复:Android 11 获取用户应用权限问题(申请权限QUERY_ALL_PACKAGES)
This commit is contained in:
parent
21d45d717b
commit
1882443280
@ -3,6 +3,9 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.idormy.sms.forwarder">
|
||||
|
||||
<uses-permission
|
||||
android:name="android.permission.QUERY_ALL_PACKAGES"
|
||||
tools:ignore="QueryAllPackagesPermission" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
|
@ -65,7 +65,6 @@ public class AppListActivity extends AppCompatActivity {
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
Log.d(TAG, "onStart");
|
||||
Toast.makeText(AppListActivity.this, "加载应用列表中,请稍候...", Toast.LENGTH_LONG).show();
|
||||
|
||||
//是否关闭页面提示
|
||||
TextView help_tip = findViewById(R.id.help_tip);
|
||||
@ -110,18 +109,23 @@ public class AppListActivity extends AppCompatActivity {
|
||||
//获取应用列表
|
||||
private void getAppList() {
|
||||
new Thread(() -> {
|
||||
Message msg = new Message();
|
||||
msg.what = NOTIFY;
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("DATA", "user".equals(currentType) ? "正在加载用户应用,请稍候..." : "正在加载系统应用,请稍候...");
|
||||
msg.setData(bundle);
|
||||
handler.sendMessage(msg);
|
||||
|
||||
appInfoList = new ArrayList<>();
|
||||
PackageManager pm = getApplication().getPackageManager();
|
||||
@SuppressLint("QueryPermissionsNeeded") List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
|
||||
try {
|
||||
List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_ACTIVITIES | PackageManager.GET_SERVICES);
|
||||
for (PackageInfo packageInfo : packages) {
|
||||
//只取用户应用
|
||||
if ("user".equals(currentType) && (packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) {
|
||||
continue;
|
||||
}
|
||||
if ("user".equals(currentType) && isSystemApp(packageInfo)) continue;
|
||||
//只取系统应用
|
||||
if ("sys".equals(currentType) && (packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 1) {
|
||||
continue;
|
||||
}
|
||||
if ("sys".equals(currentType) && !isSystemApp(packageInfo)) continue;
|
||||
|
||||
String appName = packageInfo.applicationInfo.loadLabel(pm).toString();
|
||||
String packageName = packageInfo.packageName;
|
||||
Drawable drawable = packageInfo.applicationInfo.loadIcon(pm);
|
||||
@ -131,6 +135,10 @@ public class AppListActivity extends AppCompatActivity {
|
||||
appInfoList.add(appInfo);
|
||||
Log.d(TAG, appInfo.toString());
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
}
|
||||
|
||||
Message message = new Message();
|
||||
message.what = APP_LIST;
|
||||
message.obj = appInfoList;
|
||||
@ -138,6 +146,13 @@ public class AppListActivity extends AppCompatActivity {
|
||||
}).start();
|
||||
}
|
||||
|
||||
// 通过packName得到PackageInfo,作为参数传入即可
|
||||
private boolean isSystemApp(PackageInfo pi) {
|
||||
boolean isSysApp = (pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1;
|
||||
boolean isSysUpd = (pi.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 1;
|
||||
return isSysApp || isSysUpd;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
Log.d(TAG, "onDestroy");
|
||||
|
@ -49,7 +49,7 @@ public class CommonUtil {
|
||||
|
||||
//获取当前版本名称
|
||||
public static String getVersionName(Context context) throws Exception {
|
||||
// 获取packagemanager的实例
|
||||
// 获取PackageManager的实例
|
||||
PackageManager packageManager = context.getPackageManager();
|
||||
// getPackageName()是你当前类的包名,0代表是获取版本信息
|
||||
PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
|
||||
@ -58,7 +58,7 @@ public class CommonUtil {
|
||||
|
||||
//获取当前版本号
|
||||
public static Integer getVersionCode(Context context) throws Exception {
|
||||
// 获取packagemanager的实例
|
||||
// 获取PackageManager的实例
|
||||
PackageManager packageManager = context.getPackageManager();
|
||||
// getPackageName()是你当前类的包名,0代表是获取版本信息
|
||||
PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
|
||||
@ -83,12 +83,14 @@ public class CommonUtil {
|
||||
boolean permission_read_contacts = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.READ_CONTACTS", that.getPackageName()));
|
||||
boolean permission_battery_stats = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.BATTERY_STATS", that.getPackageName()));
|
||||
boolean permission_bind_notification_listener_service = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.BIND_NOTIFICATION_LISTENER_SERVICE", that.getPackageName()));
|
||||
boolean permission_query_all_packages = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.QUERY_ALL_PACKAGES", that.getPackageName()));
|
||||
|
||||
if (!(permission_internet && permission_receive_boot && permission_foreground_service &&
|
||||
permission_read_external_storage && permission_write_external_storage &&
|
||||
permission_receive_sms && permission_read_sms && permission_send_sms &&
|
||||
permission_read_call_log && permission_read_contacts &&
|
||||
permission_read_phone_state && permission_read_phone_numbers && permission_battery_stats && permission_bind_notification_listener_service)) {
|
||||
permission_read_phone_state && permission_read_phone_numbers && permission_battery_stats &&
|
||||
permission_bind_notification_listener_service && permission_query_all_packages)) {
|
||||
ActivityCompat.requestPermissions((Activity) that, new String[]{
|
||||
Manifest.permission.INTERNET,
|
||||
Manifest.permission.RECEIVE_BOOT_COMPLETED,
|
||||
@ -104,6 +106,7 @@ public class CommonUtil {
|
||||
Manifest.permission.FOREGROUND_SERVICE,
|
||||
Manifest.permission.BATTERY_STATS,
|
||||
Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE,
|
||||
Manifest.permission.QUERY_ALL_PACKAGES,
|
||||
}, 0x01);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user