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);