最近在做视频会议的项目,项目中遇到一个问题,部分手机的照相和录音权限在运行时无法调起,参考了一些类似的项目,发现他们都是在运行时主动申请所需权限,于是照此实施,[主要参考](适用于android6.0)(http://www.2cto.com/kf/201604/503758.html)在这里记录方便日后查看。
我选择的是Dexter开源项目,
实现很简单如下:
在项目中添加依赖compile 'com.karumi:dexter:2.2.2'
在application中 进行初始化Dexter.initialize(this);
因为我要申请录音和照相两个权限,所以我实现了MultiplePermissionsListener接口
public class SampleMultiplePermissionListener implements MultiplePermissionsListener {
private final LoginActivity activity;
public SampleMultiplePermissionListener(LoginActivity activity) {
this.activity = activity;
}
@Override public void onPermissionsChecked(MultiplePermissionsReport report) {
}
@Override public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions,
PermissionToken token) {
activity.showPermissionRationale(token);
}
}
Acitivity中showPermissionRationale(token)如下,
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public void showPermissionRationale(final PermissionToken token) {
new AlertDialog.Builder(this).setTitle(R.string.permission_rationale_title)
.setMessage(R.string.permission_rationale_message)
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
token.cancelPermissionRequest();
}
})
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
token.continuePermissionRequest();
}
})
.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override public void onDismiss(DialogInterface dialog) {
token.cancelPermissionRequest();
}
})
.show();
}
最后在想要申请权限的activity的onCreate()中添加:
Dexter.initialize(this);
createPermissionListeners();
Dexter.checkPermissions(allPermissionListenter, android.Manifest.permission.CAMERA,android.Manifest.permission.RECORD_AUDIO);
private void createPermissionListeners(){
MultiplePermissionsListener feedbackViewMultiplePermissionListener =
new SampleMultiplePermissionListener(this);
allPermissionListenter =
new CompositeMultiplePermissionsListener(feedbackViewMultiplePermissionListener);
}
运行项目, 跳转到对应Activity权限申请对话框弹出, 完成!