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