Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何检查、检测或识别设置组件屏幕覆盖或任何可用或不可用的功能_Android_Permissions_Settings_Overlay_Programmatically - Fatal编程技术网

Android 如何检查、检测或识别设置组件屏幕覆盖或任何可用或不可用的功能

Android 如何检查、检测或识别设置组件屏幕覆盖或任何可用或不可用的功能,android,permissions,settings,overlay,programmatically,Android,Permissions,Settings,Overlay,Programmatically,我的android应用程序需要显示在其他应用程序权限之上,即屏幕覆盖权限 Settings.ACTION\u MANAGE\u OVERLAY\u权限 系统警报窗口 在普通的安卓操作系统设备中,我可以使用此代码轻松地授予权限 if (!Settings.canDrawOverlays(this) && !Constant.IsOverlayPermissionGiven) { Intent intent = new Intent(Settin

我的android应用程序需要显示在其他应用程序权限之上,即屏幕覆盖权限

  • Settings.ACTION\u MANAGE\u OVERLAY\u权限
  • 系统警报窗口
在普通的安卓操作系统设备中,我可以使用此代码轻松地授予权限

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 edition设备许可屏幕中,会显示“此功能不可用”的消息,并警告“此功能已关闭,因为它会降低您的手机速度”

如何以编程方式获取有关功能可用或不可用的信息?
如何绕过权限屏幕哪个设备没有屏幕覆盖功能?

如果您阅读Android 11源代码,您可以看到它只使用
ActivityManager.isLowRamDevice()
来检查
系统警报窗口
功能是否可用

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));
}