1.新建一个类并继承FileProvider类,不做其他事情

public class AppFileProvider extends FileProvider {
}

2.AndroidManifest.xml中配置

<provider
            android:name=".ui.file.view.AppFileProvider"
            android:authorities="你的包名.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

3.res文件夹下新增xml文件夹,然后添加file_paths.xml文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    tools:ignore="MissingDefaultResource">
    <files-path
        name="int_root"
        path="/" />
    <external-path
        name="ext_root"
        path="/"/>
    <external-files-path
        name="ext_file"
        path="/"/>
    />
    <external-cache-path
        name="ext_path"
        path="/"/>

    />
</paths>

4.调用系统播放器播放视频代码

private void playVideo(String filePath, Context context){
        Intent intent = new Intent(Intent.ACTION_VIEW);
        File file = new File(filePath);
        Uri uri=null;
        if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N){
            uri = FileProvider.getUriForFile(context,"你的包名.fileprovider", file);
        }else {
            uri = Uri.fromFile(file);
        }
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.setDataAndType(uri, "video/*");
        context.startActivity(intent);
    }

5.调用系统图库展示图片代码

private void playImage(String filePath, Context context){
        Intent intent = new Intent(Intent.ACTION_VIEW);
        File file = new File(filePath);
        Uri uri=null;
        if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N){
            uri = FileProvider.getUriForFile(context,"你的包名.fileprovider", file);
        }else {
            uri = Uri.fromFile(file);
        }
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.setDataAndType(uri, "image/*");
        context.startActivity(intent);
    }

在Android8上测试了,没有问题

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐