版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/darling_R/article/details/61210636
转载请注明出处:http://blog.csdn.net/darling_R/article/details/61210636
在Android6.0引入了运行时权限,也就是不用在安装应用的时候把所有权限都声明,在用户需要出发某种危险权限的时候,及时的提醒用户是否授权权限,简单的使用方法会增加代码量,那么就来做一下封装吧,以便后面使用起来相对简单。
1。由于请求运行时权限需要在activity里面,为了方便起见,可以封装到BaseActivity里
package com.yh.permissiontest;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.List;
/**
* Created by YH on 2017/3/10.
*/
public class BaseActivity extends AppCompatActivity {
private final static int REQUESTCODE = 1;
private PermissionListener mListener;
public void requestRuntimePermission(String[] permissions, PermissionListener listener) {
mListener = listener;
List<String> permissionList = new ArrayList<>();
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(permission);
}
}
//判断存储权限的集合是否为空,为空的话,说明权限都允许了
if (!permissionList.isEmpty()) {
ActivityCompat.requestPermissions(this, permissionList.toArray(new String[permissionList.size()]), REQUESTCODE);
} else {
mListener.onGranted();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case REQUESTCODE:
if (grantResults.length > 0) {
List<String> deniedPernissions = new ArrayList<>();
for (int i = 0; i < grantResults.length; i++) {
int grantResult = grantResults[i];
String permission = permissions[i];
if (grantResult != PackageManager.PERMISSION_GRANTED) {
deniedPernissions.add(permission);
}
}
if (deniedPernissions.isEmpty()) {//所有权限都被允许
mListener.onGranted();
} else {//有被拒绝的权限
mListener.onDenied(deniedPernissions);
}
}
break;
default:
break;
}
}
}
然后写一个接口,将结果回调给调用的activity
package com.yh.permissiontest;
import java.util.List;
/**
* Created by YH on 2017/3/10.
*/
public interface PermissionListener {
/**
* 全部允许
*/
void onGranted();
/**
* 被拒绝时回调,
*
* @param deniedPermission 被拒绝的所有权限
*/
void onDenied(List<String> deniedPermission);
}
然后在需要的时候调用即可
MainActivity:
requestRuntimePermission(new String[]{Manifest.permission.CALL_PHONE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}, new PermissionListener() {
@Override
public void onGranted() {
Toast.makeText(MainActivity.this, "所有权限都允许了", Toast.LENGTH_SHORT).show();
}
@Override
public void onDenied(List<String> deniedPermissions) {
for (String deniedPermission : deniedPermissions) {
Toast.makeText(MainActivity.this, deniedPermission + "被拒绝", Toast.LENGTH_SHORT).show();
}
}
});
到此,封装就结束了