You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Android Studio中检测及启用/禁用小米手机其他权限的方法

小米手机「其他权限」的检测、启用与禁用实现方案(Android Studio)

你当前的代码仅能跳转至MIUI权限编辑总页,无法实现权限检测、精准跳转至目标权限项的需求,以下是针对性解决方案:

现有代码回顾

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mButton = findViewById(R.id.btncheck);
    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
            intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.PermissionsEditorActivity");
            intent.putExtra("extra_pkgname", getPackageName());
            startActivity(intent);
        }
    });
}

一、检测「其他权限」状态

MIUI的「其他权限」大多基于系统AppOpsManager实现,可通过以下工具类检测常见权限状态:

import android.app.AppOpsManager;
import android.content.Context;
import android.os.Build;

public class MiuiPermissionChecker {
    // 检测「后台弹出界面」权限
    public static boolean isBackgroundPopupAllowed(Context context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            AppOpsManager appOps = context.getSystemService(AppOpsManager.class);
            int mode = appOps.checkOpNoThrow("android:allow_background_activity_starts",
                    android.os.Process.myUid(), context.getPackageName());
            return mode == AppOpsManager.MODE_ALLOWED;
        }
        // 低版本MIUI可尝试反射获取,或返回默认状态
        return false;
    }

    // 检测「显示悬浮窗」权限(其他权限常见项)
    public static boolean isOverlayAllowed(Context context) {
        return android.provider.Settings.canDrawOverlays(context);
    }

    // 检测「修改系统设置」权限
    public static boolean isWriteSettingsAllowed(Context context) {
        return android.provider.Settings.System.canWrite(context);
    }
}

二、精准跳转至目标权限页

若想直接跳转到某一项权限的设置界面,可在Intent中添加权限参数(注:MIUI私有参数无公开文档,不同版本可能有差异,需多版本验证):

mButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
        intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.PermissionsEditorActivity");
        intent.putExtra("extra_pkgname", getPackageName());
        // 示例:跳转至「显示悬浮窗」权限设置页,参数需根据MIUI版本调整
        intent.putExtra("extra_perm_name", "android.permission.SYSTEM_ALERT_WINDOW");
        
        // 跳转前判断Intent是否可解析,避免崩溃
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(intent);
        } else {
            // 兼容方案:跳转到应用详情页
            Intent fallbackIntent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            fallbackIntent.setData(android.net.Uri.fromParts("package", getPackageName(), null));
            startActivity(fallbackIntent);
        }
    }
});

三、关于权限的启用/禁用

系统安全限制:Android系统(包括MIUI)不允许APP直接修改自身权限状态,只能引导用户手动操作。因此无法通过代码直接启用或禁用权限,只能通过跳转至设置页,引导用户完成操作。

注意事项

  • 不同MIUI版本的安全中心包名可能变化,比如部分旧版本使用com.miui.security,需做兼容性判断
  • 部分MIUI独有权限的AppOps操作项需自行测试确认,可通过反编译MIUI安全中心获取对应参数
  • 跳转前必须判断Intent是否可解析,避免出现ActivityNotFoundException

内容的提问来源于stack exchange,提问作者Darshan Makhecha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 23:30:53