unity+android权限--打开应用不弹权限,动态请求权限

Posted xianguoguo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity+android权限--打开应用不弹权限,动态请求权限相关的知识,希望对你有一定的参考价值。

因为笔者之前的游戏需要分享图片,会请求外部储存,第一次打开游戏就会出现弹窗:

技术图片

 

很多人对这个很敏感,怕你访问到他们的照片隐私,看到这个权限就拒绝,甚至卸载,实际上我们只是想截屏游戏内容分享给其他玩家,但是赖不住人家不信啊.

如果我们实在想要分享图片或者需要这个权限,那么我们可以不让它在启动的时候弹出,而是点击分享的时候弹出权限(动态请求权限)

首先,屏蔽权限弹窗,AndroidManifest.xml里面加入

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

接下来是请求权限,在你需要的位置请求

unity端

//AndroidJavaClass是在UnityEngine命名空间里面的
using UnityEngine;

#if
UNITY_ANDROID
AndroidJavaClass androidClass
= new AndroidJavaClass("com.xxx.xxx.UnityPlayerActivity");//获取class,填写正确的Activity
androidClass.CallStatic("requestExternalStorage");//调用静态方法,requestExternalStorage这个函数名你可以自己取,记住是静态函数
#endif

java端,写在你的Activity里面

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...)
        

这样就可以避免打开应用出现权限弹窗了,在对应的位置动态请求权限

但是,如果动态请求权限的时候,玩家拒绝了,咋办

//如果玩家拒绝授权,需要再次申请并说明申请理由
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) 
   super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  //给个弹窗告知玩家这个权限不会对他造成影响
  
  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,则再次请求
   ActivityCompat.requestPermissions(AdPlugIn.b, new String[]"android.permission.WRITE_EXTERNAL_STORAGE", 100);
   
      ).setNegativeButton("Cancel", new OnClickListener()
  public void onClick(DialogInterface var1, int var2)
  //点击cancel,todo
  
  ).create().show();
  super.onRequestPermissionsResult(requestCode, permissions, grantResults);

 

以上是关于unity+android权限--打开应用不弹权限,动态请求权限的主要内容,如果未能解决你的问题,请参考以下文章

Unity在Android 6.0及以上版本弹出权限申请窗口的问题

如何在 android Unity 应用程序中禁用 android 运行时位置权限提示

有没有办法在不弹出的情况下删除 react-native 中的默认权限?

ios 8 安装应用时不弹出通知权限

Unity 之 Mac在其他电脑安装不成功,弹出“XXX”安装不上时 和 没有权限打开应用程序

100个 Unity踩坑小知识点| Unity调用API ,动态获取Android权限,附带所有Android权限表格