android拍照文件没有读写权限,Android6.0之后的拍照+本地存储权限问题

该博客主要探讨了在Android 6.0及以上版本中,应用在拍照和使用本地存储时遇到的权限问题。当用户尝试点击头像时,程序会检查是否有读写外部存储的权限。如果没有,它会请求权限或显示提示对话框。用户可以选择拍照或从相册中选择图片,但需先确保已授予相机和存储权限。博客还提供了权限请求的响应处理和完全禁止权限时的处理策略。
摘要由CSDN通过智能技术生成

点击头像事件:

case R.id.myself_edit_rl_img:

//点击头像

if (popupwindow != null&&popupwindow.isShowing()) {

popupwindow.dismiss();

return;

} else {

//检查写入权限

if (ContextCompat.checkSelfPermission(activity,

Manifest.permission.WRITE_EXTERNAL_STORAGE)

== PackageManager.PERMISSION_GRANTED) {

//拥有读写文件权限

Log.i(TAG,"拥有读写文件权限");

initmPopupWindowView();

}else{

Log.i(TAG,"没有读写权限");

//没有读写权限

if (ActivityCompat.shouldShowRequestPermissionRationale(activity,

Manifest.permission.WRITE_EXTERNAL_STORAGE)){

ActivityCompat.requestPermissions(activity,

new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},

140);

}else{

showPermissionDialog();

}

}

}

break;

弹出来选择拍照还是在相册中选择:

public void initmPopupWindowView() {

// 利用layoutInflater获得View

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

// // 获取自定义布局文件pop.xml的视图

View view = inflater.inflate(R.layout.popview, null);

// 创建PopupWindow实例,200,150分别是宽度和高度

// popupwindow = new PopupWindow(customView, 200, 250);

// 下面是两种方法得到宽度和高度 getWindow().getDecorView().getWidth()

popupwindow = new PopupWindow(view,

WindowManager.LayoutParams.MATCH_PARENT,

WindowManager.LayoutParams.WRAP_CONTENT);

// 设置动画效果 [R.style.AnimationFade 是自己事先定义好的]

// 设置popWindow弹出窗体可点击,这句话必须添加,并且是true

popupwindow.setFocusable(true);

// 实例化一个ColorDrawable颜色为半透明

ColorDrawable dw = new ColorDrawable(0xb0000000);

popupwindow.setBackgroundDrawable(dw);

popupwindow.setOutsideTouchable(true);// 触摸popupwindow外部,popupwindow消失

backgroundAlpha(0.5f);//0.0-1.0

// 设置popWindow的显示和消失动画

popupwindow.setAnimationStyle(R.style.AnimationFade);

// 在底部显示

popupwindow.showAtLocation(activity.findViewById(R.id.activity_myself__edit),

Gravity.BOTTOM, 0, 0);

popupwindow.setOnDismissListener(new PopupWindow.OnDismissListener() {

@Override

public void onDismiss() {

//popupwindow消失的时候恢复成原来的透明度

backgroundAlpha(1f);

}

});

// 这里检验popWindow里的button是否可以点击

Button first = (Button) view.findViewById(R.id.first);

first.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Log.i(TAG,"第一个按钮被点击了");

try {

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {

// your code using Camera API here - is between 1-20

ForToast.showToast("请开启照相机权限后重试",activity);

Log.i(TAG,"our code using Camera API here - is between 1-20");

} else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

// your code using Camera

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值