Leer y escribir archivos después de Android7.0

1. Solicite permiso:
agregue a AndroidManifest.xml.

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

2. Leer el archivo

string filepath = "/**.mp4";

** Antes de 7.0:

Uri uri = Uri.fromFile(new File(filepath ))

Uri.fromFile (new File (filePath)); usado para obtener el uri del archivo local antes de que Android7.0 obtenga un file: //. De esta manera, las versiones del sistema 7.0 y posteriores no se pueden usar, y se informará una excepción:
android .os.FileUriExposedException ****** expuesto más allá de la aplicación a través de Intent.getData ()
** Después de 7.0:
Android7.0 y versiones superiores del sistema deben usar el
método nativo de Android FileProvider.getUriForFile () debido a la limitación de los permisos de archivos compartidos definición:

public static Uri getUriForFile(@NonNull Context context, @NonNull String authority, @NonNull File file) {
        FileProvider.PathStrategy strategy = getPathStrategy(context, authority);
        return strategy.getUriForFile(file);
    }
Uri uri = FileProvider.getUriForFile(MainActivity.this, getApplicationContext().getPackageName() + ".fileprovider", file);

Después de la versión 3.N, debe agregar el proveedor en AndroidManifest.xml

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.fileprovider"   //自定义的provider路径
            android:exported="false"   //是否独立
            android:grantUriPermissions="true"> //是否拥有文件的临时权限
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />   //自定义文件路径,此处需要手动在/res/新建xml文件夹/新建file_paths.xml
        </provider>

Especifique la ruta y las reglas de conversión file_paths.xml

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

Los siguientes nodos secundarios se pueden definir en
| nodos secundarios | rutas correspondientes |
| ruta-archivos | Context.getFilesDir () |
| ruta-caché | Context.getCacheDir () |
| ruta-externa | Environment.getExternalStorageDirectory () |
| externo -files -path | Context.getExternalFilesDir (null) |
| external-cache-path | Context.getExternalCacheDir () |
ex: /storage/emulated/0/external_storage/love.mp4 Para esta ruta, el
nodo secundario se escribe como:
—— / almacenamiento / emulado / 0
nombre atributo-
ruta personalizada atributo- / external_storage

Las reglas de escritura deben ser
consistentes con Uri uri = FileProvider.getUriForFile (MainActivity.this, getApplicationContext (). GetPackageName () + ".fileprovider", file);
La ruta en el código es consistente, de lo contrario se informará un error de puntero nulo

Supongo que te gusta

Origin blog.csdn.net/mozushixin_1/article/details/89332477
Recomendado
Clasificación