unity+android權限--打開應用不彈權限,動態請求權限

由於筆者以前的遊戲須要分享圖片,會請求外部儲存,第一次打開遊戲就會出現彈窗:
java

 

不少人對這個很敏感,怕你訪問到他們的照片隱私,看到這個權限就拒絕,甚至卸載,實際上咱們只是想截屏遊戲內容分享給其餘玩家,可是賴不住人家不信啊.android

若是咱們實在想要分享圖片或者須要這個權限,那麼咱們能夠不讓它在啓動的時候彈出,而是點擊分享的時候彈出權限(動態請求權限)app

首先,屏蔽權限彈窗,AndroidManifest.xml裏面加入ide

<!-- Unity打包屏蔽android權限彈窗-->
<meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="true" />

接下來是請求權限,在你須要的位置請求函數

unity端ui

//AndroidJavaClass是在UnityEngine命名空間裏面的
using UnityEngine;

#if
UNITY_ANDROID
AndroidJavaClass androidClass
= new AndroidJavaClass("com.xxx.xxx.UnityPlayerActivity");//獲取class,填寫正確的Activity
androidClass.CallStatic("requestExternalStorage");//調用靜態方法,requestExternalStorage這個函數名你能夠本身取,記住是靜態函數
#endif

java端,寫在你的Activity裏面this

import android.support.v4.content.PermissionChecker;
import android.support.v4.app.ActivityCompat;
//前面說過了靜態方法,android.permission.WRITE_EXTERNAL_STORAGE是外部存儲權限,同理其餘權限也能夠動態請求
public static void requestExternalStorage() {
     //檢查權限避免重複請求相同權限,參數:activity,權限名
        if (PermissionChecker.checkSelfPermission(this, "android.permission.WRITE_EXTERNAL_STORAGE") != 0) {
            ActivityCompat.requestPermissions(this, new String[]{"android.permission.WRITE_EXTERNAL_STORAGE"}, 100);//請求權限,參數:activity,權限名,請求碼(不一樣的權限要求不一樣的請求碼,能夠本身定,好比我這個權限是100,另外的能夠填102,103...)
        }
}

這樣就能夠避免打開應用出現權限彈窗了,在對應的位置動態請求權限spa

可是,若是動態請求權限的時候,玩家拒絕了,咋辦code

//若是玩家拒絕受權,須要再次申請並說明申請理由
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
   super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  if(100 !=
requestCode)return;//咱們剛纔定義的請求碼是100
  //給個彈窗告知玩家這個權限不會對他形成影響  
  if (ActivityCompat.shouldShowRequestPermissionRationale("這個權限不會訪問隱私,求求你開一下嘛", "android.permission.WRITE_EXTERNAL_STORAGE")) {
      (new Builder(b)).setMessage(string.storage_permissions_remind)
      .setPositiveButton("OK", new OnClickListener() {
   public void onClick(DialogInterface var1, int var2) {
          //點擊ok,則再次請求
         requestExternalStorage();
   }
      }).setNegativeButton("Cancel", new OnClickListener() {
  public void onClick(DialogInterface var1, int var2) {
  //點擊cancel,todo
  }
  }).create().show();
  super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
相關文章
相關標籤/搜索