2016-10-11 4 views
0

Я работаю над созданием базового приложения для проводника файлов на Android, и я зациклился на том, как заставить FileProvider работать, чтобы я мог разрешить моему приложению доступ к другим файловым зонам, чем только базовые выделения Android-грантов вы по умолчанию.Рабочий пример FileProvider для Android

Я попытался следовать инструкциям, которые я читал (https://developer.android.com/training/secure-file-sharing/setup-sharing.html и еще нескольким другим), но я в недоумении, в частности проблема заключается в том, что мои @ xml/filepaths не регистрируются в моей Я обнаружил ошибку: «Элемент верхнего уровня не завершен».

Вот мой манифест:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="org.hacktivity.datatemple"> 

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

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 

    <provider 
     android:name="android.support.v4.content.FileProvider" 
     android:authorities="org.hacktivity.datatemple.fileprovider" 
     android:grantUriPermissions="true" 
     android:exported="false"> 
     <meta-data 
      android:name="android.support.FILE_PROVIDER_PATHS" 
      android:resource="@xml/filepaths" /> 
    </provider> 


    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

</manifest> 

И в моем файле Рез/XML/filepaths.xml, я следующее:

<paths> 
    <external-path path="/" name="root" /> 
</paths> 

ответ

1

I get the error: "Top level element is not completed."

Тактически, проблема в том, что вы отсутствуют <:

paths> 
    <external-path path="/" name="root" /> 
</paths> 

Стратегически FileProvider не имеет отношения к «разрешить моему приложению доступ к другим файловым зонам, чем только базовое выделение Android по умолчанию». FileProvider позволяет предоставлять сторонним приложениям доступ к контенту, хранящемуся в виде файлов, из нескольких стандартных местоположений.

+0

Ошибка с «<» была здесь, а не в коде моего проекта. –

+0

Если нет FileProvider, то что позволяет мне получить доступ к остальной файловой системе в Android, как и другие приложения, которые я использовал? –

+1

@GraffitiPlum: Я не знаю, что вы считаете «остальной файловой системой в Android». Вы не можете получить доступ к произвольным расположениям файловой системы, за исключением случаев, когда вы работаете на корневом устройстве. Вы можете изучить [внешнее хранилище] (https://commonsware.com/blog/2014/04/08/storage-situation-external-storage.html), выполнив разрешения READ_EXTERNAL_STORAGE или WRITE_EXTERNAL_STORAGE (включая запрос их во время выполнения). – CommonsWare

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