android 如何检查,检测或识别设置组件屏幕覆盖或任何功能可用与否

wbrvyc0a  于 2023-05-05  发布在  Android
关注(0)|答案(1)|浏览(98)

我的Android应用程序需要显示在其他应用程序的权限,这是屏幕覆盖权限。

  • 设置.ACTION_MANAGE_OVERLAY_PERMISSION
  • 系统警报窗口

在正常的android操作系统设备中,我可以使用此代码轻松地给予权限。

if (!Settings.canDrawOverlays(this) && !Constant.IsOverlayPermissionGiven) {

                Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                        Uri.parse("package:" + getPackageName()));
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                startActivityForResult(intent, REQUEST_CODE);
                handler.postDelayed(checkSettingOn, 200);
                return false;
            } else {
                return true;
            }

但在Android Go版设备权限屏幕上显示“此功能不可用”的消息,并警告“此功能已关闭,因为它会减慢您的手机”
如何以编程方式获取有关功能可用或不可用的信息?如何绕过没有屏幕覆盖功能的设备的权限屏幕?

ljsrvy3e

ljsrvy3e1#

如果你阅读Android 11源代码,你可以看到它只使用ActivityManager.isLowRamDevice()来检查SYSTEM_ALERT_WINDOW功能是否可用

packages\apps\Settings\src\com\android\settings\Utils.java

/**
 * Returns true if SYSTEM_ALERT_WINDOW permission is available.
 * Starting from Q, SYSTEM_ALERT_WINDOW is disabled on low ram phones.
 */
public static boolean isSystemAlertWindowEnabled(Context context) {
    // SYSTEM_ALERT_WINDOW is disabled on on low ram devices starting from Q
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    return !(am.isLowRamDevice() && (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q));
}

相关问题