mirror of
https://github.com/pppscn/SmsForwarder
synced 2025-08-04 01:47:40 +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"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
package="com.idormy.sms.forwarder">
|
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_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
@ -65,7 +65,6 @@ public class AppListActivity extends AppCompatActivity {
|
|||||||
protected void onStart() {
|
protected void onStart() {
|
||||||
super.onStart();
|
super.onStart();
|
||||||
Log.d(TAG, "onStart");
|
Log.d(TAG, "onStart");
|
||||||
Toast.makeText(AppListActivity.this, "加载应用列表中,请稍候...", Toast.LENGTH_LONG).show();
|
|
||||||
|
|
||||||
//是否关闭页面提示
|
//是否关闭页面提示
|
||||||
TextView help_tip = findViewById(R.id.help_tip);
|
TextView help_tip = findViewById(R.id.help_tip);
|
||||||
@ -110,27 +109,36 @@ public class AppListActivity extends AppCompatActivity {
|
|||||||
//获取应用列表
|
//获取应用列表
|
||||||
private void getAppList() {
|
private void getAppList() {
|
||||||
new Thread(() -> {
|
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<>();
|
appInfoList = new ArrayList<>();
|
||||||
PackageManager pm = getApplication().getPackageManager();
|
PackageManager pm = getApplication().getPackageManager();
|
||||||
@SuppressLint("QueryPermissionsNeeded") List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
|
try {
|
||||||
for (PackageInfo packageInfo : packages) {
|
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) && !isSystemApp(packageInfo)) continue;
|
||||||
|
|
||||||
|
String appName = packageInfo.applicationInfo.loadLabel(pm).toString();
|
||||||
|
String packageName = packageInfo.packageName;
|
||||||
|
Drawable drawable = packageInfo.applicationInfo.loadIcon(pm);
|
||||||
|
String verName = packageInfo.versionName;
|
||||||
|
int verCode = packageInfo.versionCode;
|
||||||
|
AppInfo appInfo = new AppInfo(appName, packageName, drawable, verName, verCode);
|
||||||
|
appInfoList.add(appInfo);
|
||||||
|
Log.d(TAG, appInfo.toString());
|
||||||
}
|
}
|
||||||
//只取系统应用
|
} catch (Throwable t) {
|
||||||
if ("sys".equals(currentType) && (packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 1) {
|
t.printStackTrace();
|
||||||
continue;
|
|
||||||
}
|
|
||||||
String appName = packageInfo.applicationInfo.loadLabel(pm).toString();
|
|
||||||
String packageName = packageInfo.packageName;
|
|
||||||
Drawable drawable = packageInfo.applicationInfo.loadIcon(pm);
|
|
||||||
String verName = packageInfo.versionName;
|
|
||||||
int verCode = packageInfo.versionCode;
|
|
||||||
AppInfo appInfo = new AppInfo(appName, packageName, drawable, verName, verCode);
|
|
||||||
appInfoList.add(appInfo);
|
|
||||||
Log.d(TAG, appInfo.toString());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Message message = new Message();
|
Message message = new Message();
|
||||||
message.what = APP_LIST;
|
message.what = APP_LIST;
|
||||||
message.obj = appInfoList;
|
message.obj = appInfoList;
|
||||||
@ -138,6 +146,13 @@ public class AppListActivity extends AppCompatActivity {
|
|||||||
}).start();
|
}).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
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
Log.d(TAG, "onDestroy");
|
Log.d(TAG, "onDestroy");
|
||||||
|
@ -49,7 +49,7 @@ public class CommonUtil {
|
|||||||
|
|
||||||
//获取当前版本名称
|
//获取当前版本名称
|
||||||
public static String getVersionName(Context context) throws Exception {
|
public static String getVersionName(Context context) throws Exception {
|
||||||
// 获取packagemanager的实例
|
// 获取PackageManager的实例
|
||||||
PackageManager packageManager = context.getPackageManager();
|
PackageManager packageManager = context.getPackageManager();
|
||||||
// getPackageName()是你当前类的包名,0代表是获取版本信息
|
// getPackageName()是你当前类的包名,0代表是获取版本信息
|
||||||
PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
|
PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
|
||||||
@ -58,7 +58,7 @@ public class CommonUtil {
|
|||||||
|
|
||||||
//获取当前版本号
|
//获取当前版本号
|
||||||
public static Integer getVersionCode(Context context) throws Exception {
|
public static Integer getVersionCode(Context context) throws Exception {
|
||||||
// 获取packagemanager的实例
|
// 获取PackageManager的实例
|
||||||
PackageManager packageManager = context.getPackageManager();
|
PackageManager packageManager = context.getPackageManager();
|
||||||
// getPackageName()是你当前类的包名,0代表是获取版本信息
|
// getPackageName()是你当前类的包名,0代表是获取版本信息
|
||||||
PackageInfo packInfo = packageManager.getPackageInfo(context.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_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_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_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 &&
|
if (!(permission_internet && permission_receive_boot && permission_foreground_service &&
|
||||||
permission_read_external_storage && permission_write_external_storage &&
|
permission_read_external_storage && permission_write_external_storage &&
|
||||||
permission_receive_sms && permission_read_sms && permission_send_sms &&
|
permission_receive_sms && permission_read_sms && permission_send_sms &&
|
||||||
permission_read_call_log && permission_read_contacts &&
|
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[]{
|
ActivityCompat.requestPermissions((Activity) that, new String[]{
|
||||||
Manifest.permission.INTERNET,
|
Manifest.permission.INTERNET,
|
||||||
Manifest.permission.RECEIVE_BOOT_COMPLETED,
|
Manifest.permission.RECEIVE_BOOT_COMPLETED,
|
||||||
@ -104,6 +106,7 @@ public class CommonUtil {
|
|||||||
Manifest.permission.FOREGROUND_SERVICE,
|
Manifest.permission.FOREGROUND_SERVICE,
|
||||||
Manifest.permission.BATTERY_STATS,
|
Manifest.permission.BATTERY_STATS,
|
||||||
Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE,
|
Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE,
|
||||||
|
Manifest.permission.QUERY_ALL_PACKAGES,
|
||||||
}, 0x01);
|
}, 0x01);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user