2017-07-27 94 views
3

https://facebook.github.io/react-native/docs/integration-with-existing-apps.html如何關閉關於覆蓋權限的Android

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

會談覆蓋權限。

他們將權限檢查代碼添加到主機反應本機視圖的活動。

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

這似乎是必需的權限,因爲本地的反應需要顯示的疊加調試窗口。

如何在生產版本中關閉它?

回答

0

我在發佈時關閉了兩個更改,一個在清單中,另一個在代碼中。

第一:在你的主清單中(src /主/ AndroidManifest.xml中),刪除行:

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

添加新清單中的src /調試/ 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); 
    } 
}