![](/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.