我想选择图片并将其保存在数据库中,当来自图库的选择图片给我例外时:
onSelectFromGalleryResult
方法中的错误:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case Utility.MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if(userChoosenTask.equals("Take Photo"))
cameraIntent();
else if(userChoosenTask.equals("Choose from Library"))
galleryIntent();
} else {
}
break;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == SELECT_FILE)
onSelectFromGalleryResult(data);
else if (requestCode == REQUEST_CAMERA)
onCaptureImageResult(data);
}
}
@SuppressWarnings("deprecation")
private void onSelectFromGalleryResult(Intent data) {
Bitmap bm=null;
if (data != null) {
try {
## bm = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), data.getData());##
} catch (IOException e) {
e.printStackTrace();
}
}
ivImage.setImageBitmap(bm);
}`
清单文件
答案 0 :(得分:0)
在应用程序标记
上方的清单文件中授予权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
答案 1 :(得分:0)
从Android 6.0(API级别23)开始,用户在应用运行时向应用授予权限,而不是在安装应用时授予权限。
下面介绍了检查和请求权限的方法。但是,使用支持库更简单,因为您的应用程序在调用方法之前无需检查其运行的Android版本。
有关详细信息,请查看此Official documentation
声明要检查的权限,
private static final int REQUEST_STORAGE_PERMISSIONS = 1;
private static final String[] STORAGE_PERMISSIONS = {
Manifest.permission.READ_EXTERNAL_STORAGE,
};
下面的功能将检查是否授予了权限,
private boolean hasPermissionsGranted(String[] permissions) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(getActivity(), permission)
!= PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
使用上面的函数来定位需要授予关键权限的代码,这是执行此操作的代码 -
if (!hasPermissionsGranted(STORAGE_PERMISSIONS)) {
requestPermissions();
return;
}
现在,这是触发权限对话框以授予用户权限的实际代码,
private void requestPermissions() {
if (shouldShowRequestPermissionRationale(STORAGE_PERMISSIONS)) {
showPermissionDialog(); // Dialog to describe user how permission is important
} else {
requestPermissions(STORAGE_PERMISSIONS, REQUEST_STORAGE_PERMISSIONS);
}
}
现在,处理权限请求响应
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode == REQUEST_STORAGE_PERMISSIONS) {
if (grantResults.length == STORAGE_PERMISSIONS.length) {
boolean isGranted = true;
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
isGranted = false; // You can tell user that critical permission denied
break;
}
}
if (isGranted) { // perform that critical operation here... }
} else {
// Tell user that critical permission denied
}
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}