简体   繁体   English

如何访问SYSTEM_ALERT_WINDOW权限运行时间?

[英]How to access SYSTEM_ALERT_WINDOW permission run time?

This is my code for reference. 这是我的代码供参考。 I have added the run time permission code and system granting the permission but again it gives an error: 我添加了运行时权限代码和授予该权限的系统,但再次出现错误:

Failed due to non declaration of following android.permission.SYSTEM_ALERT_WINDOW permission in Manifest file 由于未在清单文件中声明以下android.permission.SYSTEM_ALERT_WINDOW权限而失败

public boolean checkDrawOverlayPermission()
{
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
    {
        return true;
    }
    if (!Settings.canDrawOverlays(this))
    {
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                Uri.parse("package:" + getPackageName()));
        startActivityForResult(intent, REQUEST_CODE);
        return false;
    }
    else
    {
        return true;
    }
}

@Override
@TargetApi(Build.VERSION_CODES.M)
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if (requestCode == REQUEST_CODE)
    {
        if (Settings.canDrawOverlays(this))
        {
            //startService(new Intent(this, PowerButtonService.class));
            //Toast.makeText(this, "permission granted", Toast.LENGTH_SHORT).show();

            if(!checkPermission())
            {
                requestPermission();
            }
            else
            {
                //Toast.makeText(this, "Phone State Permission Already Granted", Toast.LENGTH_SHORT).show();
                //callBeacon();
            }
        }
    }
}

Manifest File : 清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.adsl.beaconapp">

    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
    <!-- Declaration that this app is usable on phones with Bluetooth Low Energy. -->
    <uses-feature
        android:name="android.hardware.bluetooth_le"
        android:required="true" />
    <!-- Declaration permission for using internet -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/app_id" />
        <!-- <activity android:name="com.facebook.LoginActivity" /> -->
        <activity
            android:name="com.beaconstreamsdk.com.MainActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Black.NoTitleBar" />

        <service
            android:name="com.beaconstreamsdk.com.service.BeaconService"
            android:enabled="true"
            android:exported="false" />
        <service
            android:name="com.beaconstreamsdk.com.service.FloatingHeadService"
            android:enabled="true"
            android:exported="false" />
        <service
            android:name="com.beaconstreamsdk.com.service.ConnectionService"
            android:enabled="true"
            android:exported="false" />

        <activity
            android:name="com.beaconstreamsdk.com.SignUpActivity"
            android:screenOrientation="portrait" />
        <activity android:name=".Main2Activity" />
        <activity android:name=".BeaconStreamActivity"></activity>
    </application>

</manifest>

onActivityResult : onActivityResult:

@Override
    @TargetApi(Build.VERSION_CODES.M)
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (requestCode == REQUEST_CODE)
        {
            if (Settings.canDrawOverlays(this))
            {
                //startService(new Intent(this, PowerButtonService.class));
                //Toast.makeText(this, "permission granted", Toast.LENGTH_SHORT).show();

                if(!checkPermission())
                {
                    requestPermission();
                }
                else
                {
                    Toast.makeText(this, "Phone State Permission Already Granted", Toast.LENGTH_SHORT).show();
                    //callBeacon();
                }
            }
        }
    }

Please try this way. 请尝试这种方式。 May be you are facing condition problem, 可能是您面临状况问题,

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M)
    {


    if (!Settings.canDrawOverlays(this))
    {
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                Uri.parse("package:" + getPackageName()));
        startActivityForResult(intent, REQUEST_CODE);
        return false;
    }
    else
    {
        return true;
    }
    }else{
        return true;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何检查权限在Android Lollipop上授予SYSTEM_ALERT_WINDOW? - How to check permission SYSTEM_ALERT_WINDOW is granted on Android Lollipop? 如何在本机反应中删除 SYSTEM_ALERT_WINDOW android 权限 - How remove SYSTEM_ALERT_WINDOW android permission in react native SYSTEM_ALERT_WINDOW 的运行时权限 - Runtime permission for SYSTEM_ALERT_WINDOW Android SYSTEM_ALERT_WINDOW权限 - Android SYSTEM_ALERT_WINDOW permission 请求 SYSTEM_ALERT_WINDOW 权限后返回应用程序 - Return to app after requesting SYSTEM_ALERT_WINDOW permission Android13,SYSTEM_ALERT_WINDOW权限未勾选BroadcastReceiver - Android13, SYSTEM_ALERT_WINDOW permission not checked in BroadcastReceiver Android:SYSTEM_ALERT_WINDOW权限保护级别 - Android: SYSTEM_ALERT_WINDOW permission Protection level 如何在我的 android 应用程序中根据请求自动授予 SYSTEM_ALERT_WINDOW 权限? - How do I grant SYSTEM_ALERT_WINDOW permission automatically on request, in my android App? 如何防止我的应用程序内容来自具有“SYSTEM_ALERT_WINDOW”权限的应用程序 - How prevent my app content from apps that has “SYSTEM_ALERT_WINDOW” permission 如何处理SYSTEM_ALERT_WINDOW权限未在某些Marshmallow设备上自动授予 - How to handle SYSTEM_ALERT_WINDOW permission not being auto-granted on some pre-Marshmallow devices
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM