VideoView 播放sd卡目录下视频的路径问题

来源:互联网 发布:剑侠情缘网络单机版 编辑:程序博客网 时间:2024/06/15 05:02

以下是视频播放源代码:

package com.example.c7contentprovider;import android.Manifest;import android.content.pm.PackageManager;import android.os.Bundle;import android.os.Environment;import android.support.annotation.NonNull;import android.support.annotation.Nullable;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.MediaController;import android.widget.Toast;import android.widget.VideoView;import java.io.File;import java.io.IOException;/** * Created by 邓苏桃 on 2017/7/4. */public class VedioPlayerActivity extends AppCompatActivity implements View.OnClickListener {    private VideoView videoView;    MediaController mediaController;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.vedioplayer_main);        videoView= (VideoView) findViewById(R.id.video_view);        Button play = (Button) findViewById(R.id.vedio_play);        Button pause = (Button) findViewById(R.id.vedio_pause);        Button replay = (Button) findViewById(R.id.vedio_replay);        play.setOnClickListener(this);        pause.setOnClickListener(this);        replay.setOnClickListener(this);        if (ContextCompat.checkSelfPermission(VedioPlayerActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {            ActivityCompat.requestPermissions(VedioPlayerActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);        } else {            initVideoPath();        }    }    private void initVideoPath() {        File file=new File("storage/sdcard1/shiping.mp4");        if(file.exists())        {//            Toast.makeText(this, "have found video", Toast.LENGTH_SHORT).show();            videoView.setVideoPath(file.getAbsolutePath());//            mediaController=new MediaController(this);//            videoView.setMediaController(mediaController);//            mediaController.setMediaPlayer(videoView);//            videoView.requestFocus();//            videoView.start();        }        else        {            Toast.makeText(this, file.getAbsolutePath(), Toast.LENGTH_SHORT).show();        }    }    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        switch (requestCode)        {            case 1:                if (grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED)                {                    initVideoPath();                }                else                {                    Toast.makeText(this, "You Denied the Permission", Toast.LENGTH_SHORT).show();                    finish();                }                break;        }    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.vedio_play:                if (!videoView.isPlaying()){                    videoView.start();                }                break;            case R.id.vedio_pause:                if (videoView.isPlaying()){                    videoView.pause();                }                break;            case R.id.vedio_replay:                if (videoView.isPlaying()){                    videoView.resume();                }                break;            default:                break;        }    }    @Override    protected void onDestroy() {        super.onDestroy();        if (videoView!=null)        {            videoView.suspend();        }    }}

关键问题在这里:

 private void initVideoPath() {        File file=new File("storage/sdcard1/shiping.mp4");        ...        ...

按照《第一行代码》第八章给的代码应该写成这样:

File file=new File(Environment.getExternalStorageDirectory(),"shiping.mp4");

两者区别在于:
Environment.getExternalStorageDirectory()的实际文件路径是:storage/sdcard0/,而如果这样写则会显示找不到s**hiping.mp4**文件。网上百度才发现,sdcard0是内置存储,一般是手机U盘sdcard1是外置存储,只手机上的sd卡。所以如果使用Environment.getExternalStorageDirectory(),应该把文件放在手机U盘上。

原创粉丝点击