Lohanry

宠辱不惊,绝不妄自菲薄

少年,你对力量一无所知


一个浪荡的程序猿

Unity适配Android6.0权限管理

1.需求:

Unity项目中适配Android6.0权限管理

2.实现原理:

在Unity中使用到相关权限时候调用Andorid层,让Android层去请求权限。

3.实现:

public int XXPERMISSIONCODE = 0;
	public boolean requstePermission(String permisson){
		if (ContextCompat.checkSelfPermission(this, permisson) != PackageManager.PERMISSION_GRANTED) {
			//无权限,开始请求权限
			ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS},XXPERMISSIONCODE);
			return false;
		}else{
			return true;
		}
	}
	@Override
	public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){
		switch (requestCode){
			case XXPERMISSIONCODE:
				if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
					//有权限了,回调Unity接口
				}else{
					if (ActivityCompat.shouldShowRequestPermissionRationale(this,permissions[0])) {
						//尝试告诉用户为什么要请求权限,可以再次发起请求或者返回Unity无权限
					}else {
						//无法再次请求权限,可以处理直接退出程序或者告诉Unity无权限
					}
				}
				break;
		}
		super.onRequestPermissionsResult(requestCode, permissions, grantResults);
	}

4.接口解释:

public static int checkSelfPermission(Context context, String permission)

查询是否有对应的权限:
返回值等于PackageManager.PERMISSION_GRANTED为有权限
返回值等于PackageManager.PERMISSION_DENIED 为无权限

public static void requestPermissions(final Activity activity,final String[] permissions, final int requestCode)

异步请求对应的权限,完成后会回调onRequestPermissionsResult。
注意:这个方法不必判断是否为Android6.0+,系统会自己办你出来,如果小于M的,会直接回调,并且为获得权限。

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)

系统回调

public static boolean shouldShowRequestPermissionRationale(Activity activity, String permission)

判断是否还能再发起请求,当用户勾选不再提示之后,返回false。可以对True和Fasle情况分别对用户进行说明和操作。

Android6.0权限管理

对于6.0以下的权限及在安装的时候,根据权限声明产生一个权限列表。
用户只有在同意之后才能完成app的安装,造成了我们想要使用某个app,就要默默忍受其一些不必要的权限(比如是个app都要访问通讯录、短信等)。
而在6.0以后,我们可以直接安装,当app需要我们授予不恰当的权限的时候,我们可以予以拒绝(比如:单机的象棋对战,请求访问任何权限,我都是不同意的)。
当然你也可以在设置界面对每个app的权限进行查看,以及对单个权限进行授权或者解除授权。
新的权限机制更好的保护了用户的隐私,Google将权限分为两类,一类是Normal Permissions。
Normal这类权限一般不涉及用户隐私,是不需要用户进行授权的,比如手机震动、访问网络等;
另一类是Dangerous Permission,一般是涉及到用户隐私的,需要用户进行授权,比如读取sdcard、访问通讯录等。

最近的文章

LuaFramework中GameManager

LuaFramework中GameManager 关于LuaFramework框架的分析,基于自己的理解。1.GameManager的启动:```flowinit=>start: Init()CheckExtractResource=>condition: CheckExtractResource()OnExtractResource=>operation: OnExtractResource()OnUpdateResource=>operation: OnUpd...…

继续阅读
更早的文章

Unity 射线碰撞检测

Unity 射线碰撞检测项目起因: 前段时间项目需要完成一个点击,拖动,缩放功能。并没有使用Ngui或者Ugui自带的手势识别的功能,是直接在Update中处理了这些事务。但是后来根据项目需求添加了一个按钮(其实为一个Sprite),发现点击事件与按钮的事件是相互冲突的。原因应该是Update是获取的屏幕的事件是和按钮同级别的,所以需要修改。最后使用的是射线碰撞检测。1.射线检测原理: 获取屏幕点击点的位置 从主摄像机作出射线到屏幕点击点 使用RayCast函数计算...…

继续阅读