如何在安卓手机上关闭覆盖层权限

6

https://facebook.github.io/react-native/docs/integration-with-existing-apps.html

https://medium.com/react-native-development/fixing-problems-in-react-native-caused-by-new-permission-model-on-android-1e547f754b8

这些链接中讨论了遮罩权限。

他们将权限检查代码添加到托管React Native视图的活动中。

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

看起来需要权限是因为React Native需要在叠加层中显示调试窗口。

如何在生产构建中关闭它?

1个回答

3
我在发布版中进行了两处更改,一处在清单文件中,另一处在代码中。
首先,在主清单文件 (src/main/AndroidManifest.xml) 中删除以下行:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

在src/debug/AndroidManifest.xml中添加一个新的清单,内容如下。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.mycompany.myapp">

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
</manifest>

这将仅在调试变体上合并权限。
其次,针对您提到的代码,我添加了一个BuildConfig.DEBUG的检查:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (!Settings.canDrawOverlays(this) && BuildConfig.DEBUG) {
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                Uri.parse("package:" + getPackageName()));
        startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE);
    }
}

使用 BuildConfig.DEBUG 很好用。我不需要将 SYSTEM_ALERT_WINDOW 添加到我的 AndroidManifest.xml 文件中,调试菜单仍然能够正常显示。 - Joshua Pinter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接