Android System overlay window

后端 未结 6 751
忘掉有多难
忘掉有多难 2020-11-30 01:14

I\'m trying to create a system overlay. But I keep getting \"permission denied\". I\'m using SDK version 23.

My manifest file:



        
相关标签:
6条回答
  • 2020-11-30 01:44

    As an alternative solution, you can try WindowManager.LayoutParams.TYPE_TOAST instead of WindowManager.LayoutParams.TYPE_SYSTEM_ALERT. This not requires any permission. I'm using it to show image, maybe button will work to

    0 讨论(0)
  • 2020-11-30 01:45

    In AndroidManifest (for version < 23)

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    
    
    public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE= 5469;
    //Random value
    
        public void testPermission() {
            if (!Settings.canDrawOverlays(this)) {
                Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                        Uri.parse("package:" + getPackageName()));
                startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
            }
        }
    

    Result :

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) {
            if (Settings.canDrawOverlays(this)) {
                // You have permission
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-30 01:45

    for users below and above android 8 use

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
       LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
    } else {
        LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_PHONE;
    }
    
    0 讨论(0)
  • 2020-11-30 01:52

    You can also lead the user over to the specific app's overlaying page. The documentation states:

    Input: Optionally, the Intent's data URI can specify the application package name to directly invoke the management GUI specific to the package name. For example "package:com.my.app".

    So something like:

    intent.setData(Uri.fromParts("package", getPackageName(), null));
    
    0 讨论(0)
  • 2020-11-30 01:56

    I handled all of the overlay permissions for every android version in my library. Please see the gist here.

    0 讨论(0)
  • 2020-11-30 01:58

    First, there is no permission named SYSTEM_OVERLAY_WINDOW. It is SYSTEM_ALERT_WINDOW.

    Second, if your targetSdkVersion is 23 or higher, and you are running on Android 6.0+ devices, your app will not get this permission at the outset. Call Settings.canDrawOverlays() to see if you have the permission, and use ACTION_MANAGE_OVERLAY_PERMISSION to lead the user over to Settings if you do not.

    0 讨论(0)
提交回复
热议问题