2014-10-29 154 views
0

有人可以告訴我爲什麼這段代碼不再保存圖片到畫廊嗎?我曾經在某個時候開始工作,然後我在其他地方改變了一些東西,現在這不起作用。相機不保存圖像

private void openImageIntent() { 

    // Determine Uri of camera image to save. 
    final File storageDir = Environment 
      .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); 
    final String fname = ClassName.getUniqueImageFilename(); 
    final File sdImageMainDirectory = new File(storageDir, fname); 
    outputFileUri = Uri.fromFile(sdImageMainDirectory); 

    // Camera. 
    final List<Intent> cameraIntents = new ArrayList<Intent>(); 
    final Intent captureIntent = new Intent(
      android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    final PackageManager packageManager = getPackageManager(); 
    final List<ResolveInfo> listCam = packageManager.queryIntentActivities(
      captureIntent, 0); 
    for (ResolveInfo res : listCam) { 
     final String packageName = res.activityInfo.packageName; 
     final Intent intent = new Intent(captureIntent); 
     intent.setComponent(new ComponentName(res.activityInfo.packageName, 
       res.activityInfo.name)); 
     intent.setPackage(packageName); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
     cameraIntents.add(intent); 
    } 

    // Filesystem. 
    final Intent galleryIntent = new Intent(); 
    galleryIntent.setType("image/*"); 
    galleryIntent.setAction(Intent.ACTION_GET_CONTENT); 

    // Chooser of filesystem options. 
    final Intent chooserIntent = Intent.createChooser(galleryIntent, 
      "Chose a source"); 

    // Add the camera options. 
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, 
      cameraIntents.toArray(new Parcelable[] {})); 

    startActivityForResult(chooserIntent, REQUEST_IMAGE_CAPTURE); 
} 

private static String getUniqueImageFilename() { 
    // TODO Auto-generated method stub 
    String fileName = "img_" + System.currentTimeMillis() + ".jpg"; 
    return fileName; 
} 

這是錯誤我得到:

10-29 23:53:50.692: E/BitmapFactory(12547): Unable to decode stream: java.io.FileNotFoundException: /file:/storage/emulated/0/DCIM/img_1414623222659.jpg: open failed: ENOENT (No such file or directory) 
10-29 23:53:50.692: E/BitmapFactory(12547): Unable to decode stream: java.io.FileNotFoundException: /file:/storage/emulated/0/DCIM/img_1414623222659.jpg: open failed: ENOENT (No such file or directory) 

回答

2
final File storageDir = Environment 
      .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); 

你應該把權限在Android清單寫入到外部存儲

Android的存儲被打破了不同版本的Android SDK的。你的代碼可以在一些設備上工作,但不是全部。

由於缺乏權限,系統無法在系統上創建文件,因此它會給您提供錯誤。我發現的最好方法就是看看如果外部存儲器已安裝,然後在外部創建一個文件。

有以下兩個代碼片段,它們都可以工作。

Environment.getExternalStorageDirectory() + "/" + "myImages" + "/someimage.jpg"; 

之後,您可以啓動Media Store更新意圖更新Android圖庫。

或使用該代碼

final File dir = new File(context.getFilesDir() + "/nfs/guille/groce/users/nicholsk/workspace3/SQLTest"); 
dir.mkdirs(); //create folders where write files 
final File file = new File(dir, "BlockForTest.txt"); 
+0

你沒有指定的權限必須添加的體現... – Confuse 2014-10-30 03:01:17

+0

如果您使用的是Android 4.4.4,那麼你並不需要,因爲Android將允許您在未經許可的情況下進行訪問,但如果您在某些舊版本上運行相同的代碼,則必須定義權限。由於他沒有提及他正在開發的版本,所以最好建議添加權限。 – 2014-10-30 03:03:49

+0

這實際上是有效的,但是從我拍攝照片開始,需要30秒到2分鐘,直到它在畫廊中創建,你知道這是爲什麼嗎?因爲這比你應該等待的時間長一點嗎?順便說一句我正在使用Galaxy S5進行測試。所以我想它應該足夠快。 – 2014-10-30 06:49:10

相關問題