【问题标题】:How to access SYSTEM_ALERT_WINDOW permission run time?如何访问SYSTEM_ALERT_WINDOW权限运行时间?
【发布时间】:2017-07-12 10:55:04
【问题描述】:

这是我的参考代码。我添加了运行时权限代码和授予权限的系统,但它再次给出错误:

由于未在 Manifest 文件中声明以下 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();
            }
        }
    }
}

清单文件:

<?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 :

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

【问题讨论】:

  • 那么为什么不将此权限添加到清单中?
  • 已经添加....但是还是一样的错误....
  • 请发布您的清单。而startActivityForResult 这个意图不会返回任何东西
  • 已修改帖子...请参阅...
  • 确切的错误是什么?

标签: android runtime-permissions


【解决方案1】:

请尝试这种方式。可能是你面临条件问题,

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-05
    • 2016-02-15
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    相关资源
    最近更新 更多