Để WebView Android phát video MP4 từ file cục bộ (assets), cần cấu hình Content Provider để WebView truy cập file qua scheme content:// thay vì file:// (bị hạn chế quyền).
1. Khai báo Content Provider trong AndroidManifest.xml
<provider android:name="MyDataContentProvider" android:authorities="com.myapp" android:exported="false" android:grantUriPermissions="true" />
2. Implement Content Provider (openFile)
public class MyDataContentProvider extends ContentProvider {
@Override
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
// uri ví dụ: content://com.myapp/video.mp4
String fileName = uri.getLastPathSegment(); // "video.mp4"
File file = new File(getContext().getFilesDir(), fileName); // hoặc assets
// Nếu file trong assets, cần copy ra filesDir trước
return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
}
// ... các method bắt buộc khác (query, insert, update, delete, getType) return null
}
3. Load video trong WebView
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setMediaPlaybackRequiresUserGesture(false);
webView.loadUrl("content://com.myapp/video.mp4"); // hoặc file HTML nhúng video
Lưu ý quan trọng
- Android 7.0+ (Nougat) bắt buộc dùng
FileProviderthay vìContentProvidertùy chỉnh cho file:// URI. - Dùng
FileProvidertừandroidx.core.content.FileProviderđể an toàn và đơn giản hơn. - Video MP4 phải được encode tương thích (H.264 Baseline/Main/High, AAC audio).
Mã trong bài gốc chỉ là đoạn trích, không hoàn chỉnh. Trên là giải pháp đầy đủ, hiện đại cho Android 7+.