我们正在开发一个需要授予自动启动权限的应用程序。我正在使用以下代码将用户重定向到权限页面,但无法检查是否已授予权限。
if (Build.BRAND.equalsIgnoreCase("xiaomi")) {
Intent intent = new Intent();
intent.setComponent(newComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
startActivity(intent);
}
答案 0 :(得分:0)
您可以使用它来检查所需的任何权限,单个或多个或什至所有权限。
public class PermissionsUtils {
public static final int REQUEST_PERMISSION_MULTIPLE = 0;
public static final int REQUEST_PERMISSION_CAMERA = 1;
public static final int REQUEST_PERMISSION_LOCATION = 2;
public static final int REQUEST_WRITE_EXTERNAL = 3;
public static boolean checkAndRequestPermissions(Activity activity) {
System.out.println("PermissionsUtils checkAndRequestPermissions()");
int permissionCamera = ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA);
int permissionLocation = ContextCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION);
int permissionWriteExternal = ContextCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
// Permission List
List<String> listPermissionsNeeded = new ArrayList<>();
// Camera Permission
if (permissionCamera != PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.CAMERA)) {
Toast.makeText(activity, "Camera Permission is required for this app to run", Toast.LENGTH_SHORT)
.show();
}
listPermissionsNeeded.add(Manifest.permission.CAMERA);
}
// Read/Write Permission
if (permissionWriteExternal != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
// Location Permission
if (permissionLocation != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions(activity,
listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]),
REQUEST_PERMISSION_MULTIPLE);
return false;
}
return true;
}
/**
* Requests the Camera permission. If the permission has been denied
* previously, a SnackBar will prompt the user to grant the permission,
* otherwise it is requested directly.
*/
public static void requestCameraPermission(Activity activity) {
// Here, thisActivity is the current activity
// System.out.println("requestCameraPermission() INITIAL");
// Toast.makeText(this, "requestCameraPermission() INITIAL",
// Toast.LENGTH_LONG).show();
if (ContextCompat.checkSelfPermission(activity,
Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.CAMERA)) {
// Toast.makeText(activity, "Camera permission is
// needed for this app to run ",
// Toast.LENGTH_SHORT).show();
// System.out.println("requestCameraPermission() SHOW INFO");
// Show an explanation to the user *asynchronously* -- don't
// block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
ActivityCompat.requestPermissions(activity, new String[] { Manifest.permission.CAMERA },
REQUEST_PERMISSION_CAMERA);
} else {
// No explanation needed, we can request the permission.
// System.out.println("requestCameraPermission() ASK
// PERMISSION");
ActivityCompat.requestPermissions(activity, new String[] { Manifest.permission.CAMERA },
REQUEST_PERMISSION_CAMERA);
}
// Permission is granted
} else {
System.out.println("requestCameraPermission() PERMISSION ALREADY GRANTED");
}
}
public static void requestLocationPermission(Activity activity) {
if (ContextCompat.checkSelfPermission(activity,
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(activity,
Manifest.permission.ACCESS_FINE_LOCATION)) {
Toast.makeText(activity, "LOCATION permission is needed to display location info ", Toast.LENGTH_SHORT)
.show();
// Show an explanation to the user *asynchronously* -- don't
// block this thread waiting for the user's response! After the
// user sees the explanation, try again to request the
// permission.
ActivityCompat.requestPermissions(activity, new String[] { Manifest.permission.ACCESS_FINE_LOCATION },
REQUEST_PERMISSION_LOCATION);
Toast.makeText(activity, "REQUEST LOCATION PERMISSION", Toast.LENGTH_LONG).show();
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(activity, new String[] { Manifest.permission.ACCESS_FINE_LOCATION },
REQUEST_PERMISSION_LOCATION);
Toast.makeText(activity, "REQUEST LOCATION PERMISSION", Toast.LENGTH_LONG).show();
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
// Permission is granted
} else {
}
}
public static void requestWriteExternalPermission(Activity activity) {
if (ContextCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
Toast.makeText(activity, "Write permission is needed to create Excel file ", Toast.LENGTH_SHORT).show();
// Show an explanation to the user *asynchronously* -- don't
// block this thread waiting for the user's response! After the
// user sees the explanation, try again to request the
// permission.
ActivityCompat.requestPermissions(activity, new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE },
REQUEST_WRITE_EXTERNAL);
Toast.makeText(activity, "REQUEST LOCATION PERMISSION", Toast.LENGTH_LONG).show();
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(activity, new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE },
REQUEST_WRITE_EXTERNAL);
}
}
}
public static boolean hasPermissions(Context context, String... permissions) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}
return true;
}