![](/img/trans.png)
[英]java.io.FileNotFoundException: /storage/emulated/0/user_image_name.jpg open failed: ENOENT (No such file or directory) Crash Application
[英]File not found exception:java.io.FileNotFoundException: /storage/emulated/0/image.jpg: open failed: ENOENT (No such file or directory)
找不到文件异常:java.io.FileNotFoundException:/storage/emulated/0/FolderName/subFolderName/my_image.jpg:打开失败:ENOENT(没有此类文件或目录)
我仅在某些手机中获得例外
保存从相机捕获的图像时,出现文件未找到异常。 这是我的代码
我正在捕获图像:
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
startActivityForResult(takePictureIntent, 0);
}
在onActivityResult中:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0)
{
if(data!=null)
{
Bundle extras = data.getExtras();
if (extras != null)
if (img1) {
imgAdd1.setVisibility(View.GONE);
Bitmap thumbnail_1 = (Bitmap) extras.get("data");
Bitmap resized = scaleBitmap(thumbnail_1) ;
selectedImage1 = data.getData() ;
//Bitmap thumbnail_1 = (Bitmap) data.getExtras().get("data");
image1.setVisibility(View.VISIBLE);
image1.setImageBitmap(thumbnail_1);
imageTag = 1 ;
saveImage(resized, (int) System.currentTimeMillis());
img1 = false ;
imgDelete1.setVisibility(View.VISIBLE);
}
}}
我保存图像的功能是:
public void saveImage(Bitmap bitmap, int i){
try {
String stored = null;
File sdCard = Environment.getExternalStorageDirectory();
File file = new File(sdCard, "/GMC/Images"
+ File.separator + user_id + "_" + imageTag + ".jpg");
if (file.exists()) {
file.delete();
}
if (isWriteStorageAllowed()) {
if ( isReadStorageAllowed())
//file.createNewFile();
try {
FileOutputStream out = new FileOutputStream(file);//getting exception at this line
bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
out.flush();
out.close();
stored = "success";
} catch (Exception e) {
e.printStackTrace();
}
if (imageTag == 1) {
selectedImagePath1 = Environment.getExternalStorageDirectory() + "/GMC/Images"
+ File.separator + user_id + "_" + imageTag + ".jpg";
}
}
else {
requestWriteStoragePermission();
requestStoragePermission();
}
}
catch (Exception e)
{
e.printStackTrace();
}
已经在清单中添加了权限,例如
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA">
还检查了运行时权限:
//We are calling this method to check the permission status
private boolean isReadStorageAllowed() {
//Getting the permission status
int result = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE);
//If permission is granted returning true
if (result == PackageManager.PERMISSION_GRANTED)
return true;
else {
//If permission is not granted returning false
return false;}
}
private boolean isWriteStorageAllowed() {
//Getting the permission status
int result = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE);
//If permission is granted returning true
if (result == PackageManager.PERMISSION_GRANTED)
return true;
else {
//If permission is not granted returning false
return false;}
}
//Requesting permission
private void requestStoragePermission(){
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),Manifest.permission.READ_EXTERNAL_STORAGE)){
//If the user has denied the permission previously your code will come to this block
//Here you can explain why you need this permission
//Explain here why you need this permission
}
//And finally ask for the permission
ActivityCompat.requestPermissions(getActivity(),new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},PERMISSION_READ_EXTERNAL_STORAGE);
}
//Requesting permission
private void requestWriteStoragePermission(){
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),Manifest.permission.WRITE_EXTERNAL_STORAGE)){
//If the user has denied the permission previously your code will come to this block
//Here you can explain why you need this permission
//Explain here why you need this permission
}
//And finally ask for the permission
ActivityCompat.requestPermissions(getActivity(),new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},PERMISSION_WRITE_EXTERNAL_STORAGE);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
{
switch (requestCode){
case PERMISSION_READ_EXTERNAL_STORAGE :
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
Toast.makeText(context , "Read Permission granted",Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(context , "Read Permission Denied" ,Toast.LENGTH_SHORT).show();
}
return;
case PERMISSION_WRITE_EXTERNAL_STORAGE :
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
Toast.makeText(context , "Write Permission granted" ,Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(context , "write Permission Denied",Toast.LENGTH_SHORT).show();
}
return;
}
}
}
检查链接java.io.FileNotFoundException:/storage/emulated/0/saved_images/grub.jpg:打开失败:ENOENT(没有这样的文件或目录)
我在两个不同的电话上测试了代码,一个是lenovo(棉花糖),另一个是samsung(棉花糖),但是它给三星带来了错误,而在lenovo上可以正常使用。
会有什么问题? 请帮忙
尝试在清单文件中添加largeheap=true
。联想手机无法获取大图像,而三星手机可以从图库相机等获取大图像。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.