public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity-vv";
private String path;
private VideoView videoView;
private MediaController mediaController;
private File file;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/one.mp4";
file = new File(path);
videoView = findViewById(R.id.videoview);
mediaController = new MediaController(this);
checkPermissionAndPlayVideo();
}
private void checkPermissionAndPlayVideo() {
int i = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
if (i != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 999);
} else {
playVideo();
}
}
private void playVideo() {
videoView.setMediaController(mediaController);
videoView.setVideoPath(path);
videoView.start();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == 999) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
playVideo();
} else {
Toast.makeText(this, "需要取得SDcard權限", Toast.LENGTH_SHORT).show();
}
}
}
}<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider
android:authorities="com.imooc.provider"
android:name="androidx.core.content.FileProvider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_path"></meta-data>
</provider>
</application>
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path
name="name"
path=""></external-path>
</paths>
出現錯誤。無法播放視頻
2020-03-15 09:57:30.328 8615-8741/com.example.myapplication D/HiTouch_PressGestureDetector: onAttached, package=com.example.myapplication, windowType=1, mHiTouchRestricted=false
2020-03-15 09:57:30.332 8615-8615/com.example.myapplication W/MediaPlayer: Couldn't open uri in attemptDataSource
2020-03-15 09:57:30.334 8615-8615/com.example.myapplication W/VideoView: Unable to open content: /storage/emulated/0/one.mp4
java.io.FileNotFoundException: /storage/emulated/0/one.mp4: open failed: EACCES (Permission denied)
at libcore.io.IoBridge.open(IoBridge.java:496)
at java.io.FileInputStream.<init>(FileInputStream.java:159)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1264)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1208)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1124)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1145)
at android.widget.VideoView.openVideo(VideoView.java:412)
at android.widget.VideoView.access$2200(VideoView.java:83)
at android.widget.VideoView$7.surfaceCreated(VideoView.java:694)
at android.view.SurfaceView.updateSurface(SurfaceView.java:786)
at android.view.SurfaceView$2.onPreDraw(SurfaceView.java:162)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1088)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2944)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1857)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8089)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1057)
at android.view.Choreographer.doCallbacks(Choreographer.java:875)
at android.view.Choreographer.doFrame(Choreographer.java:776)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1042)
at android.os.Handler.handleCallback(Handler.java:888)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8169)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
at libcore.io.Linux.open(Native Method)
at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:252)
at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:8037)
at libcore.io.IoBridge.open(IoBridge.java:482)
at java.io.FileInputStream.<init>(FileInputStream.java:159)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1264)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1208)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1124)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1145)
at android.widget.VideoView.openVideo(VideoView.java:412)
at android.widget.VideoView.access$2200(VideoView.java:83)
at android.widget.VideoView$7.surfaceCreated(VideoView.java:694)
at android.view.SurfaceView.updateSurface(SurfaceView.java:786)
at android.view.SurfaceView$2.onPreDraw(SurfaceView.java:162)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1088)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2944)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1857)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8089)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1057)
at android.view.Choreographer.doCallbacks(Choreographer.java:875)
at android.view.Choreographer.doFrame(Choreographer.java:776)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1042)
at android.os.Handler.handleCallback(Handler.java:888)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8169)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
2020-03-15 09:57:30.334 8615-8615/com.example.myapplication D/VideoView: Error: 1,0
uj5u.com熱心網友回復:
你確認檔案存在嗎,提示說檔案找不到uj5u.com熱心網友回復:
是你的權限適配問題 : open failed: EACCES (Permission denied)Android 10 系統的權限又升級了 你也要升級的 你百度或者Google一下 Android 10 系統的權限問題就好了
Android 10 每個應用只有特定的私有目錄可以訪問,其他的非私有目錄得通過Google開發檔案的提示來進行申請權限
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/54624.html
標籤:Android
上一篇:求解答
下一篇:Android,跪求答案
