-
-
Notifications
You must be signed in to change notification settings - Fork 912
Open
Description
Is there already an issue requesting this feature?
- I have searched the existing issues.
Please select affected platform(s)
- Android
- iOS
- Windows
Use case
Currently Permission.values returns all permissions, if we had a getDefinedPermissions() that would return only the permissions i put on androidManifest.xml i coud loop the returned list to see if there is a permission that is not granted, and if there is i could just call list.request();
Proposal
i once made something like this on native android
if (PermissionCheck.needToAsk(this)) {
PermissionCheck.ask(this);
return;
}
public class PermissionCheck {
private PermissionCheck() {
}
public static boolean needToAsk(Context context) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return false;
}
try {
PackageInfo packageInfo;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.PackageInfoFlags.of(PackageManager.GET_PERMISSIONS));
} else {
packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_PERMISSIONS);
}
String[] permissions = packageInfo.requestedPermissions;
for (String permission : permissions) {
if (isNotGranted(context, permission)) {
return true;
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return false;
}
private static boolean isNotGranted(Context context, String permission) {
if (Build.VERSION.SDK_INT < 31 && (permission.contains("BLUETOOTH_SCAN") || permission.contains("BLUETOOTH_ADVERTISE") || permission.contains("BLUETOOTH_CONNECT"))) {
return false;
}
return ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED;
}
public static void ask(Activity context) {
try {
PackageInfo packageInfo;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.PackageInfoFlags.of(PackageManager.GET_PERMISSIONS));
} else {
packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_PERMISSIONS);
}
String[] permissions = packageInfo.requestedPermissions;
List<String> list = new ArrayList<>();
for (String permission : permissions) {
if (isNotGranted(context, permission)) {
list.add(permission);
}
}
if (list.isEmpty()) {
return;
}
String[] array = list.toArray(new String[0]);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
ActivityCompat.requestPermissions(context, array, 0);
}
} catch (PackageManager.NameNotFoundException e) {
MetodosEstaticos.toastException(e, context);
}
}
}
But i guess a getDefinedPermissions would be enough.
Specific requirements or considerations
No response
Additional information or context
No response
Metadata
Metadata
Assignees
Labels
No labels