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

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

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

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

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

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

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

unity端

//AndroidJavaClass是在UnityEngine命名空间里面的using UnityEngine;#if UNITY_ANDROIDAndroidJavaClass 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); 
}


原文地址:https://www.cnblogs.com/xianguoguo/p/11105819.html

时间: 2024-10-09 13:59:31

unity+android权限--打开应用不弹权限,动态请求权限的相关文章

Android 6.0开始动态请求权限

转载请注明来源: http://blog.csdn.net/kjunchen/article/details/51366845 动态请求权限 从Android 6.0(API 23)开始,允许用户在应用运行时决定是否允许权限,而不是在应用安装的时候.这种方法简化了应用的安装过程,因为用户在安装或更新应用的时候不需要允许权限.他也让用户对应用的功能有更多的控制:例如,用户可以选择给予相机应用相机的权限但是不允许使用设备位置的权限.用户可进入应用设置随时撤销权限. 系统权限被分为两种类型,正常的(n

Android拍照,相册选择图片以及Android6.0权限管理

概述 在android开发过程中,拍照或者从相册中选择图片是很常见的功能.下面要说得这个案例比较简单,用户点击按钮选择拍照或者打开相册选择图片,然后将选中的图片显示在手机上.android6.0后,推出了动态权限管理.以往我们将涉及到的权限全部写在清单文件中,只要用户安装了该程序,程序在运行过程中都会获得相应权限.android6.0后,对于一些特别敏感的权限,开发者必须在程序中进行声明.拍照和从相册选择图片都是涉及到用户隐私的敏感权限,必须在程序中进行声明. 大概的流程 创建布局文件,这里不多

Android 6.0及以上版本号的执行时权限介绍

执行时权限(Runtime Permission)是Android 6.0( 代号为 Marshmallow,API版本号为 23)及以上版本号新增的功能.相比于以往版本号,这是一个较大变化. 本文将介绍怎样在代码中加入并配置执行时权限功能. 如需阅读英文原文,请您点击这个链接:<Everything every Android Developer must know about new Android's Runtime Permission>. 如需阅读官方执行时权限的相关介绍,请您点击这

Android 6.0以上 需要运行时申请的权限

转载:http://www.cnblogs.com/tangs/articles/6377347.html 自从Android6.0发布以来,在权限上做出了很大的变动,不再是之前的只要在manifest设置就可以任意获取权限,而是更加的注重用户的隐私和体验,不会再强迫用户因拒绝不该拥有的权限而导致的无法安装的事情,也不会再不征求用户授权的情况下,就可以任意的访问用户隐私,而且即使在授权之后也可以及时的更改权限.这就是6.0版本做出的更拥护和注重用户的一大体现. 一.认知 今天我们就来学习下And

android 6.0之后动态获取权限

Android 6.0 动态权限申请 1. 概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限进行了分类,对某些涉及到用户隐私的权限可在运行时根据用户的需要动态授予.这样就不需要在安装时被强迫同意某些权限. 2. 正常权限 和 危险权限 Android系统权限分为几个保护级别.需要了解的两个最重要保护级别是 正常权限 和 危险权限: (1)正常权限: 涵盖应用需要访问其沙盒外部数据或资源,但对用

Android之动态申请权限(API23以上需求)

API 23之前的版本都是自动获取权限,而从 Android 6.0 开始添加了权限申请的需求,更加安全. 这里以单个存储权限为例: · 在 Manifest 中添加访问权限:(只需设置可写,因为可写必定可读) <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> · 动态申请权限的过程: 1 package com.dragon.android.permissionreque

app在android 6.0或以上平台版本运行过程中请求权限

原文作者:Google 原文地址:http://developer.android.com/intl/zh-cn/training/permissions/requesting.html 原文版权:Creative Commons 2.5 Attribution License 译文作者:Jianan - [email protected] 版本信息:本文基于2016-04-27版本翻译 译文版权:CC BY-NC-ND 4.0,允许复制转载,但必须保留译文作者署名及译文链接,不得演绎和用于商业

Android 上实现非root的 Traceroute -- 非Root权限下移植可执行二进制文件 脚本文件

作者 : 万境绝尘 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/36438365 示例代码下载 : -- CSDN : http://download.csdn.net/detail/han1202012/7639253; -- GitHub : https://github.com/han1202012/TracerouteAndBusybox ; 1. 原理思路 文件权限修改无法实现 : 如果 没有 root 权限,

在Android 6.0 设备上动态获取权限

众所周知,Android 6.0 相比之前的Android版本有一个很大的不同点,就是动态获取权限.最近要修改原来的程序适配安卓6.0+.以记录下在Android 6.0 上如何动态获取权限. 下面从自己一开始的问题入手 实现拨号功能 说到拨号,一个 Intent 就搞定,代码如下, 1 2 3 4 5 6 private void callDirectly(String mobile){ Intent intent = new Intent(); intent.setAction("andro