android - 如何以编程方式在 MIUI 设备中打开应用程序权限设置?

标签 android permissions settings

我想这样打开屏幕:设置 -> 应用程序 -> 选择一个应用程序 -> 打开应用程序权限屏幕

目前我使用的是这段代码。它可以让我打开 AppInfo 屏幕。但是我不知道如何选择应用程序权限屏幕。

                Intent intent = new Intent();
                intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                Uri uri = Uri.fromParts("package", APP_PACKAGE_NAME, null);
                intent.setData(uri);
                startActivity(intent);

一些运行 MIUI 的设备有应用权限屏幕。

最佳答案

只需添加这段代码并调用 applyMiuiPermission() 方法

private static final String TAG = "MiuiUtils";

public static void applyMiuiPermission(Context context) {
    int versionCode = getMiuiVersion();
    if (versionCode == 5) {
        goToMiuiPermissionActivity_V5(context);
    } else if (versionCode == 6) {
        goToMiuiPermissionActivity_V6(context);
    } else if (versionCode == 7) {
        goToMiuiPermissionActivity_V7(context);
    } else {
        Log.e(TAG, "this is a special MIUI rom version, its version code " + versionCode);
    }
}


public static int getMiuiVersion() {
    String version = RomUtils.getSystemProperty("ro.miui.ui.version.name");
    if (version != null) {
        try {
            return Integer.parseInt(version.substring(1));
        } catch (Exception e) {
            Log.e(TAG, "get miui version code error, version : " + version);
        }
    }
    return -1;
}

public static void goToMiuiPermissionActivity_V5(Context context) {
    Intent intent = null;
    String packageName = context.getPackageName();
    intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
    Uri uri = Uri.fromParts("package" , packageName, null);
    intent.setData(uri);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    if (isIntentAvailable(intent, context)) {
        context.startActivity(intent);
    } else {
        Log.e(TAG, "intent is not available!");
    }
}


public static void goToMiuiPermissionActivity_V6(Context context) {
    Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
    intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
    intent.putExtra("extra_pkgname", context.getPackageName());
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    if (isIntentAvailable(intent, context)) {
        context.startActivity(intent);
    } else {
        Log.e(TAG, "Intent is not available!");
    }
}


public static void goToMiuiPermissionActivity_V7(Context context) {
    Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
    intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
    intent.putExtra("extra_pkgname", context.getPackageName());
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    if (isIntentAvailable(intent, context)) {
        context.startActivity(intent);
    } else {
        Log.e(TAG, "Intent is not available!");
    }
}

RomUtils.Java

import android.os.Build;
import android.text.TextUtils;
import android.util.Log;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class RomUtils {
    private static final String TAG = "RomUtils";

    public static boolean checkIsMiuiRom() {
        return !TextUtils.isEmpty(getSystemProperty("ro.miui.ui.version.name"));
    }
    public static String getSystemProperty(String propName) {
        String line;
        BufferedReader input = null;
        try {
            Process p = Runtime.getRuntime().exec("getprop " + propName);
            input = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024);
            line = input.readLine();
            input.close();
        } catch (IOException ex) {
            Log.e(TAG, "Unable to read sysprop " + propName, ex);
            return null;
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    Log.e(TAG, "Exception while closing InputStream", e);
                }
            }
        }
        return line;
    }

    public static boolean checkIsMeizuRom() {
        return Build.MANUFACTURER.contains("Meizu");
    }
}

关于android - 如何以编程方式在 MIUI 设备中打开应用程序权限设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33818970/

相关文章:

java - 在android中进行回调的简单方法 - AndroidX

database - PostgreSQL 9.6数据库上的关联权限被拒绝

database - PGError : ERROR: permission denied for relation (when using Heroku)

Android:以编程方式更改 NFC 设置(开/关)

android - 从 Android 手机添加/删除 "Settings"-> "Select Locale"中的语言条目

java - Jenkins:删除旧构建

android - 来自 Html 粗体标记的 Textview 未正确显示

android - 如何在应用程序级别获得 android 全屏?

ubuntu中wordpress自动更新的apache和sftp权限

java - 从数据库加载用户数据并将其传递到 Intent 附加中的正确方法是什么