android7.0以上调用系统播放器及播放本地视频

1.AndroidManifest.xml 配置:

	1.权限
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

	2.   <application 下添加
		<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="包名.FileProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

2.res下新建 xml 文件夹并添加文件 file_paths.xml 内容如下:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path
        name="包名.filepath"
        path="." />
</paths>

3.文件播放

			  if (Build.VERSION.SDK_INT >= 23) {
                    int REQUEST_CODE_CONTACT = 101;
                    String[] permissions = {
                            Manifest.permission.WRITE_EXTERNAL_STORAGE};
                    //验证是否许可权限
                    for (String str : permissions) {
                        if (mActivity.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
                            //申请权限
                            mActivity.requestPermissions(permissions, REQUEST_CODE_CONTACT);
                            return;
                        } else {
                            //***************************************************************************************
                            // 这里就是权限打开之后自己要操作的逻辑

                            String sdcard = Environment.getExternalStorageDirectory().toString();

                            File file1 = new File(sdcard + "/Cache");
                            if (!file1.exists()) {
                                file1.mkdirs();
                            }
                            File file = new File(file1.getAbsolutePath(), "1.mp4");

                            if (!file.exists()) {
                                InputStream initialStream = null;
                                try {
//                                    initialStream = mActivity.getResources().openRawResource(R.raw.video);
                                    initialStream = App.getInstance().getResources().getAssets().open("1.mp4");
                                    byte[] buffer = new byte[initialStream.available()];
                                    initialStream.read(buffer);
                                    OutputStream outStream = new FileOutputStream(file);
                                    outStream.write(buffer);
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                            }

                            Uri uri = null;
                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                                uri = FileProvider.getUriForFile(mActivity, "com.ingcare.vbmapp.FileProvider", file);
                            } else {
                                uri = Uri.fromFile(file);
                            }
                            Intent intent = new Intent(Intent.ACTION_VIEW);
                            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                            intent.setDataAndType(uri, "video/*");
                            mActivity.startActivity(intent);
                        }
                    }
                }

4.将mp4文件储存到apk

两种方式:

1.assets

在这里插入图片描述
调用:

App.getInstance().getResources().getAssets().open("1.mp4");
2.res-raw

在这里插入图片描述
调用:

mActivity.getResources().openRawResource(R.raw.video);

猜你喜欢

转载自blog.csdn.net/qq_36333289/article/details/102934224