跳到主要内容

Android 动态申请权限弹框

动态获取系统权限

完整的权限列表请访问官网。下图中 READ_PHONE_STATE 的权限就是 android.permission.READ_PHONE_STATE

图片:AndroidPermission

说明

不同渠道所需的 Android 权限列表, 请参见 Android 渠道权限描述。 :

定制对话框以及对话框提示语言

  1. AndroidManifest中配置启动界面。其中 {YOUR_START_ACTIVITY} 是游戏配置的完成权限申请后的跳转页面。
<activity android:name="com.intlgame.tools.permission.PermissionGrantActivity">    
<meta-data android:name="INTLSDK_GAME_ACTIVITY_CLASSNAME" android:value="{YOUR_START_ACTIVITY}"/>
<meta-data android:name="INTLSDK_DENY_SETTINGS_TYPE" android:value="setting" />
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
  1. res/strings.xml 中添加以下配置,完成权限提示。
警告

如果不配置以下内容,会直接进行授权动作。直接授权有不符合 Google Play 的规范风险,可能会导致审核不通过。

<string name="intl_permission_confirm">确定</string>
<string name="intl_permission_cancel">取消</string>
<string name="intl_permission_settings">设置</string>
<string name="intl_always_denied_warning">请到设置界面打开权限,否则无法正常进入游戏</string>
<string name="intl_permission_grant_warning"> 申请权限 xxx 的理由:1、游戏中存在保存视频等,需要您授予相机权限;2、游戏中存在文件的读写操作需要您授予读写权限</string>

<string name="intl_permission_title">INTL</string>
<!-- 配置想要申请的权限(可选项) -->
<string-array name="intl_permission_granted_list">
<item>android.permission.CAMERA</item>
<item>android.permission.INTERNET</item>
<item>android.permission.WRITE_EXTERNAL_STORAGE</item>
<item>android.permission.READ_EXTERNAL_STORAGE</item>
</string-array>
  1. (可选)在 res/styles.xml 中添加以下内容,进行对话框样式配置。更多的对话框样式,请参见 https://developer.android.com/reference/android/R.styleable.html#Theme.
 <?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="INTLPermissionTheme" parent="@android:style/Theme.DeviceDefault.Light.Dialog">
<!-- 这里设置背景 -->
<item name="android:windowBackground">@android:color/white</item>
<item name="android:windowNoTitle">false</item>
<!-- 这里是修改顶部标题背景颜色,具体颜色自己定,可以是图片 -->
<item name="android:topDark">@android:color/holo_purple</item>
<!-- 这里是修改内容区域背景颜色 -->
<item name="android:centerDark">@android:color/background_light</item>
<item name="android:windowIsTranslucent">false</item>
</style>
</resources>