1.先依赖库:
api ‘com.yanzhenjie:permission:2.0.0-rc11’
2.封装工具类:
package com.xiao.lib.utils;
import android.app.AlertDialog.Builder;
import android.os.Build;
import android.os.Build.VERSION_CODES;
import android.support.v4.app.FragmentActivity;
import com.xiao.lib.R;
import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.Setting;
public class PermissionUtils {
public static final String TAG="PermissionUtils";
public static void requestPermission(FragmentActivity activity, OnRequestPermissionListener listener, String... permissions) {
if (Build.VERSION.SDK_INT >= VERSION_CODES.M) {
if (AndPermission.hasPermissions(activity, permissions)) {
if (listener != null)
listener.onGranted();
return;
}
AndPermission.with(activity)
.runtime()
.permission(permissions)
.onGranted(data -> {
listener.onGranted();
})
.onDenied(data -> {
listener.onDenied(false);
//申请失败
if (AndPermission.hasAlwaysDeniedPermission(activity, permissions)) {
new Builder(activity,R.style.Theme_AppCompat_Light_Dialog_Alert)
.setTitle(R.string.tip_title)
.setMessage(R.string.tip_permission_again)
.setPositiveButton(R.string.btn_ok,(dialog,witch)->{
requestAgain(activity,listener,permissions);
})
.setNegativeButton(R.string.btn_cancel,(dialog,witch)->{
listener.onDenied(true);
})
.setCancelable(false)
.create()
.show();
}
})
.start();
} else {
listener.onGranted();
}
}
public interface OnRequestPermissionListener {
void onGranted();
void onDenied(boolean isAlways);
}
public static void requestAgain(FragmentActivity activity, OnRequestPermissionListener listener, String... permissions){
// 这些权限被用户总是拒绝。
AndPermission.with(activity)
.runtime()
.setting()
.onComeback(new Setting.Action() {
@Override
public void onAction() {
requestPermission(activity, listener, permissions);
// 用户从设置回来了。
}
})
.start();
}
}
3.调用:
private String permissions[]=new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION};
private void checkAppPermission() {
PermissionUtils.requestPermission(this, new OnRequestPermissionListener() {
@Override
public void onGranted() {
mBluetoothAdapter=BLEService.getInstance(getApplicationContext()).getBluetoothAdapter();
if (mBluetoothAdapter==null||!mBluetoothAdapter.isEnabled()){
Intent intent=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(intent,REQUEST_CODE_BLE);
}
ToastUtils.showShort("已经授权");
}
@Override
public void onDenied(boolean isAlways) {
ToastUtils.showShort("未授权");
if (isAlways){
finish();
}
}
},permissions);
}
版权声明:本文为sfhong2008原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。