2017-06-07 5 views
0

Ich erhalte diesen Fehler: failed to find configured root that contains /storage/emulated/0/android/data/ Es gibt einige ähnliche Fragen, aber sie verwenden andere Speicherort zum Speichern von Dateien. Ich verwende: Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) Methode und das ist der Code, den ich mit der Kamera öffnen:Konnte nicht gefunden werden konfigurierten Fehler in Android 7.0

private void TakePicture() { 
    photoFile = FileManager.generateFileStampedPhotoFile(); 
    PicturesHelper.TryTakePictureWithAnIntent(this, photoFile, REQUEST_IMAGE_CAPTURE); 
} 


public static File generateFileStampedPhotoFile() 
{ 
    Uri photoFileUri=null; 
    File photoFile=null; 
    File outputDir=getPhotoDirectory(); 
    if(outputDir!=null) 
    { 
     String timeStamp=new SimpleDateFormat("yyyyMMDD_HHmmss").format(new Date()); 
     String photoFileName="IMG_"+timeStamp+".jpg"; 
     photoFile=new File(outputDir,photoFileName); 
     // photoFileUri=Uri.fromFile(photoFile); 

    } 
    return photoFile; 
} 


public static void TryTakePictureWithAnIntent(Activity context,File 
    photoFile,int requestCode) 
    { 
    Intent takePictureIntent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    if(takePictureIntent.resolveActivity(context.getPackageManager())!=null) //if user has camera? 
    { 

     if (photoFile != null) { 
      Uri photoURI = FileProvider.getUriForFile(context, 
        "com.myapp.fileprovider", 
        photoFile); 
      takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
      takePictureIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 

      context.startActivityForResult(takePictureIntent, requestCode); 
     } 

    } 
} 


public static File getPhotoDirectory() 
{ 
    File outputDir=null; 
    String externalStorageState=Environment.getExternalStorageState(); 
    if(externalStorageState.equals(Environment.MEDIA_MOUNTED)) { 
     File pictureDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
     outputDir=new File(new File(pictureDir,"Adriagate"),"Online"); 
     if(!outputDir.exists())//V.P. if directory/ies not exist/s it will be created. mksdrs method follows file structure and creates directory by direcory if needed 
     { 
      if(!outputDir.mkdirs()) 
      { 
       return null; 
      } 
     } 
    } 
    return outputDir; 
} 

Ich habe innerhalb AndroidManifest setzen Anbieter:

<provider 
     android:name="android.support.v4.content.FileProvider" 
     android:authorities="com.myapp.fileprovider" 
     android:exported="false" 
     android:grantUriPermissions="true"> 
     <meta-data 
      android:name="android.support.FILE_PROVIDER_PATHS" 
      android:resource="@xml/file_paths"></meta-data> 
    </provider> 

Und das ist file_paths.xml Datei:

<?xml version="1.0" encoding="utf-8"?> 
<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
<external-files name="Whatever_Nothing_Works"/> 

+0

können Sie zeigen, bitte die Android Menifest –

+0

Datei Es wird nun gezeigt ... –

Antwort

0

Sie speichern Ihre Bilder in . Das ist keine der unterstützten Wurzeln für FileProvider. Plus, Ihr XML hat <external-files>, und das ist kein unterstütztes Element für FileProvider (gültige alle enden in -path).

Optionen sind:

  • Ändern der Ort, an dem Sie die Bilder zu einem der Orte durch FileProvider und Anpassung Ihrer XML unterstützt Speicherung

  • Umschalten auf my StreamProvider und mit <external-public-path dir="Pictures">

    übereinstimmen
  • Ändern Sie Ihre XML zu <external-path name="whatever" path="Pictures"> und hoffen auf die beste

+0

FileProvider funktioniert. Es scheint, ich musste das Projekt säubern. Dann bekam ich einen weiteren Fehler (bezogen auf Berechtigungen). Nachdem ich das jetzt gelöst habe kann ich Bilder machen. Das ist XML, das funktioniert: < external-path name = "external_files" path = "." /> –

+0

@Vlado: Beachten Sie, dass Ihre XML-Konfiguration alle Daten im externen Speicher bereitstellt, die möglicherweise nicht Ihren Vorstellungen entsprechen. – CommonsWare

+0

Ich möchte, dass das Hochladen von Bildern wie zuvor funktioniert :) Ich hoffe, es wird auch auf allen früheren Versionen von Android funktionieren. Ich muss das jetzt überprüfen. –

-1

A dd dies in Menifest

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

Ersetzen in file_paths.xml mit

<?xml version="1.0" encoding="utf-8"?> 
<paths> 
     <external-files-path name="my_images" path="Android/data/com.example.package.name/files/Pictures" /> 
</paths> 

Ihre Datei unter getExternalFilesDir gespeichert ist(). Das entspricht <external-files-path>, nicht <files-path>

+0

Ich habe ............ –

+0

die file_paths.xml wie erwähnt oben überprüfen .. –

+0

ich sah, das vorher. Funktioniert nicht. –

Verwandte Themen