在开发中需要实现选择本地照片,然后上传到服务器功能,本来写好的代码用自己的vivo手机和魅族手机测试都能实现上传照片功能,但是测试姐姐拿oppo手机一测试,就出现bug,图片无法上传,本来以为是网络原因,拿了个小米手机测试,结果也是无法上传,好吧,最后考虑到是不是权限的问题(单纯的在manifest中设置不行),发现需要动态设置读取SD卡权限,否则上传照片的时候无法找到照片路径,好吧,其实就是一点代码的事情
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
//权限还没有授予,需要在这里写申请权限的代码
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_CALL_PHONE2);
} else {
//权限已经被授予,在这里直接写要执行的相应方法即可
intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");
startActivityForResult(intent, GET_IMAGE);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE2) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Intent intent2 = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent2, GET_IMAGE);
} else {
// Permission Denied
Toast.makeText(AliPayTransferActivity.this, "请前往设置允许读写SD卡权限", Toast.LENGTH_SHORT).show();
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
加上这么点代码就ok了