2016-11-28 1 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

Возможно, приложение камеры на этом конкретном устройстве не поддерживает значения 'content'' Uri'. Например, собственное приложение камеры Google не поддерживало схему контента для видео до этого лета, например. – 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

Смежные вопросы