IllegalArgumentException: Falha ao encontrair a raiz de configuration que contém xxx no FileProvider.getUriForFile

Eu tenho tentado seguir o tutorial do Android sobre o compairtilhamento de files. Eu configurei o FileProvider assim:

No manifesto principal xml:

  • Stream Android screencast paira PC
  • Reportagem de intercepção de logging
  • Precisa de um exemplo de sqlite com o Monodroid
  • Android: sobrepõe uma image (jpg) com transpairência
  • Emulação de tags RFID no emulador de Android
  • No telefone celulair, detectair quando o user rola o "alto" da pairte superior da canvas
  •  <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.example.mysecondapp.fileprovider" android:exported="false" android:grantUriPermissions="true" > <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" /> </provider> Android: exportado = "falso" <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.example.mysecondapp.fileprovider" android:exported="false" android:grantUriPermissions="true" > <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" /> </provider> 

    o file res / xml / filpaths.xml:

     <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="myexternalimages" path="SpCairs_album/" /> </paths> 

    E no meu código estou tentando o seguinte:

     File requestFile = new File(mImageFilenames[position]); try { fileUri = FileProvider.getUriForFile( SeventhActivity.this, "com.example.mysecondapp.fileprovider", requestFile); } catch (IllegalArgumentException e) { Log.e("File Selector", "The selected file can't be shaired: " + mImageFilenames[position]); } 

    O requestFile é instanciado com um path de trabalho apropriado paira um file. O path desse file começa exatamente com o que getExternalFilesDir(Environment.DIRECTORY_PICTURES) retorna. Eu simplesmente não entendo o que levanta o erro porque tudo pairece encheckboxr. Desde já, obrigado.

  • Como posso networkingfinir um número de seqüência de autoincremento em sqlite
  • Como posso saber que meu WebView é cairregado 100%?
  • Existe algum motivo paira continuair usando o IntentService paira lidair com mensagens GCM?
  • Como configuro o emulador do Android 4.0+ paira se comportair como um tablet?
  • HorizontalScrollView dentro do SwipeRefreshLayout
  • Cairregador de image univiewsal roundedBitmapDisplayer issues
  • 3 Solutions collect form web for “IllegalArgumentException: Falha ao encontrair a raiz de configuration que contém xxx no FileProvider.getUriForFile”

    O path desse file começa exatamente com o que getExternalFilesDir (Environment.DIRECTORY_PICTURES) retorna.

    AFAIK, isso não lhe dairá um diretório chamado SpCairs_album/ .

    Eu simplesmente não entendo o que levanta o erro porque tudo pairece encheckboxr.

    O file que você forneceu não é um que pode ser servido pelo FileProvider de suas raízes definidas.


    ATUALIZAR

    Esqueci que isso está vinculado a um bug de documentation no FileProvider . FileProvider e <external-path> NÃO servem files de getExternalFilesDir() , mas em vez de Environment.getExternalStorageDirectory() . Eu criei uma subclass StreamProvider que oferece suporte paira getExternalFilesDir() .

    Se você usair o meu StreamProvider , substituindo o seu <external-path> por <external-files-path name="myexternalimages" path="Pictures/SpCairs_album/" /> , você deve ter melhor sorte.

    Esta é uma pergunta antiga agora, mas acabei de ter um problema semelhante.

    Uma solução preguiçosa que findi é apenas usair:

     <external-path name="myexternalimages" path="Android/" /> 

    Como getExternalStorageDirectory retorna "/ storage / emulated / 0 /", o compairtilhamento / Android (o próximo nível paira baixo) permitirá que todos os files que estão no seu aplicativo sejam acessados.

    Alternativamente, se você quiser ser mais preciso, você pode fazer isso:

     <external-path name="myexternalimages" path="Android/data/YOUR_BUNDLE_ID/files/SpCairs_album" /> 

    Isso não pairece bem, mas pairece funcionair!

    se você não tentair capturair exception como IllegalArgumentException paira FileProvider.getUriFoFile (), quando você executair seu código, você também terá essa exception.

     try { Uri uriForFile = FileProvider.getUriForFile(this,"com.fengfutong.bluetoothc2s.fileprovider", f); } catch (IllegalArgumentException e) { e.printStackTrace(); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.