https://github.com/yanzhenjie/AndPermission
compile 'com.yanzhenjie.alertdialog:alertdialog:1.0.1'
implementation 'com.yanzhenjie:permission:2.0.0-rc3'
1,DefaultRationale
/*
* Copyright © Yan Zhenjie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.vily.imagescandemo2;
import android.content.Context;
import android.content.DialogInterface;
import android.text.TextUtils;
import com.yanzhenjie.alertdialog.AlertDialog;
import com.yanzhenjie.permission.Permission;
import com.yanzhenjie.permission.Rationale;
import com.yanzhenjie.permission.RequestExecutor;
import java.util.List;
/**
* Created by YanZhenjie on 2018/1/1.
*/
public final class DefaultRationale implements Rationale {
@Override
public void showRationale(Context context, List<String> permissions, final RequestExecutor executor) {
List<String> permissionNames = Permission.transformText(context, permissions);
String message = context.getString(R.string.message_permission_rationale, TextUtils.join("\n", permissionNames));
AlertDialog.newBuilder(context)
.setCancelable(false)
.setTitle(R.string.title_dialog)
.setMessage(message)
.setPositiveButton(R.string.resume, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
executor.execute();
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
executor.cancel();
}
})
.show();
}
}
2,PermissionSetting
/*
* Copyright © Yan Zhenjie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.vily.imagescandemo2;
import android.content.Context;
import android.content.DialogInterface;
import android.text.TextUtils;
import com.yanzhenjie.alertdialog.AlertDialog;
import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.Permission;
import com.yanzhenjie.permission.SettingService;
import java.util.List;
/**
* Created by YanZhenjie on 2018/1/1.
*/
public final class PermissionSetting {
private final Context mContext;
public PermissionSetting(Context context) {
this.mContext = context;
}
public void showSetting(final List<String> permissions) {
List<String> permissionNames = Permission.transformText(mContext, permissions);
String message = mContext.getString(R.string.message_permission_always_failed, TextUtils.join("\n", permissionNames));
final SettingService settingService = AndPermission.permissionSetting(mContext);
AlertDialog.newBuilder(mContext)
.setCancelable(false)
.setTitle(R.string.title_dialog)
.setMessage(message)
.setPositiveButton(R.string.setting, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
settingService.execute();
}
})
.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
settingService.cancel();
}
})
.show();
}
}
3,使用
// 6.0之上申请牌照和写入存储权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
AndPermission.with(Select_or_Picture_Activity.this).permission(Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.rationale(new DefaultRationale() )
.onGranted(new Action() {
@Override
public void onAction(List<String> permissions) {
System.out.println("---------有权限了");
Toast.makeText(Select_or_Picture_Activity.this,R.string.successfully,Toast.LENGTH_SHORT).show();
}
})
.onDenied(new Action() {
@Override
public void onAction(List<String> permissions) {
System.out.println("---------没有权限");
Toast.makeText(Select_or_Picture_Activity.this,R.string.failure,Toast.LENGTH_SHORT).show();
if (AndPermission.hasAlwaysDeniedPermission(Select_or_Picture_Activity.this, permissions)) {
mSetting.showSetting(permissions);
}
}
}).start();
}else {
// new getPic().execute(); // 获取图片
}