2016-11-28 69 views
0

我正在使用FileProvider與設備的相機拍照,但圖像未保存在目錄或任何其他目錄中。如何解決這個問題,以便我可以將捕獲的圖像保存在目錄中?無法使用FileProvider從目錄保存圖像

MainActivity.java

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 

File storageDir = new File(Environment.getExternalStorageDirectory(), "Test-Folder"); 

     if (!storageDir.exists()) { 
      storageDir.mkdirs(); 
     } 

File image = new File(storageDir, "QR_" + timeStamp + ".png"); 
Uri photoUri = FileProvider.getUriForFile(MainActivity.this, "com.test", image); 
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); 

List<ResolveInfo> resInfoList = 
       getPackageManager() 
         .queryIntentActivities(cameraIntent, PackageManager.MATCH_DEFAULT_ONLY); 

     for (ResolveInfo resolveInfo : resInfoList) { 
      String packageName = resolveInfo.activityInfo.packageName; 
      grantUriPermission(packageName, photoUri, 
        Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 

     } 
     startActivityForResult(cameraIntent, 1); 

provider_paths.xml

<paths xmlns:android="http://schemas.android.com/apk/res/android"> 

<external-path name="external_files" path="Test-Folder/"/> 

</paths> 
+1

也許在這個特定設備上的相機應用程序不支持'內容''Uri'值。例如,谷歌自己的相機應用直到今年夏天才支持視頻的「內容」方案。 – CommonsWare

+1

'storageDir.mkdirs();'。你應該檢查返回值,因爲mkdirs可能會失敗,然後返回false。如果它是假的,則向用戶顯示敬酒並返回。不要繼續執行其他代碼。我敢打賭,該目錄並沒有創建開始。 – greenapps

+0

@greenapps hey bud,mkdirs返回false,因爲我沒有在清單文件中放入寫入外部存儲權限。謝謝你! – zbryan

回答

0

這裏是溶液。

storageDir.mkdirs(); 

上面的代碼返回,這是因爲我沒有把在外部存儲寫權限。我在我的android清單文件中添加了以下代碼。

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.test"> 

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

<!-- other code here--> 

</manifest> 

由於greenapp您指出的storageDir.mkdirs。

+0

'我敢打賭,該目錄並沒有創建開始.'。那麼我的獎勵在哪裏? ;-)。 – greenapps