您的位置:首页 > 移动开发 > Android开发

android 6.0 权限获取

2015-12-24 10:07 477 查看

前言

android 6.0 对权限管理,做了重新定义,导致项目的targetSdkVersion 是23 系统就会默认使用新的权限管理,也是6.0 的权限管理。

如果项目的 targetSdkVersion小于23 系统还是使用旧的权限管理。

6.0的权限管理与5.0之前的权限有什么不同呢?就是在6.0系统中的项目需要动态获取权限,让用户做出判断,是同意还是拒绝

工具类如下

import android.app.Activity;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.Manifest;

import com.qihoo.linker.logcollector.LogCollector;
import com.sytm.tmkq.common.Constant;

/**
* Created by aoc on 2015/12/23.
*
* 说明
* Android6.0系统默认为targetSdkVersion小于23的应用默认授予了所申请的所有权限,
* 所以如果你以前的APP设置的targetSdkVersion低于23,在运行时也不会崩溃,
* 但这也只是一个临时的救急策略,用户还是可以在设置中取消授予的权限。
*/
public class PermissionUtils {

private Activity activity;
private final int READ_PHONE_STATE_CODE = 1;

public PermissionUtils(Activity activity) {
this.activity = activity;
}

/**
* 请求 Manifest.permission.READ_PHONE_STATE 权限
*/
public void requestPermissionPhoneState() {
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_PHONE_STATE}, READ_PHONE_STATE_CODE);
}
}

/**
* 回调动作
* @param requestCode
* @param grantResults
*/
public void doNext(int requestCode, int[] grantResults) {
switch (requestCode) {
case READ_PHONE_STATE_CODE:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission Granted
}
else {
// Permission Denied
activity.finish();
}
break;

}
}

}


调用如下

import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;

import com.sytm.tmkq.util.PermissionUtils;

/**
* Created by hutao on 2015/9/1.
*/
public class BaseNoActionBarActivity extends AppCompatActivity {

private PermissionUtils permissionUtils;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
permissionUtils = new PermissionUtils(this);
}

@Override
protected void onResume() {
super.onResume();
permissionUtils.requestPermissionPhoneState();
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
permissionUtils.doNext(requestCode, grantResults);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息