Android开发——播放视频

      • VideoView控件介绍
      • 播放视频示例
        • 活动
        • 错误
          • 在实体机上运行app时错误
          • 无法播放视频的错误

VideoView控件介绍

播放视频需要用到VideoView控件。VideoView类主要有以下方法:

  • setVideoPath(“”):设置要播放的视频文件的位置
  • setVideoURI(Uri.parse(“”)):和setVideoPath一样,setVideoPath把Uri.parse(“”)放在函数主体中而已
  • start():开始或者继续播放
  • pause():暂停播放
  • resume():从头开始播放???在播放的时候如果调用resume()会从头开始,但是如果处于暂停状态,则没有反应。
  • seekTo():从指定位置开始播放
  • isPlaying():判断当前是否正在播放视频
  • getDuration():获取视频的时长
  • getCurrentPosition():

播放视频示例

在主页面上添加VideoView控件及几个控制播放的Button。

活动

修改活动:

package com.example.victoria.mediaplayer;

import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.VideoView;

import java.io.File;

public class MainActivity extends AppCompatActivity {
    private Button play;
    private Button pause;
    private Button replay;
    private VideoView videoView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.i("main", "create");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        play = (Button) findViewById(R.id.play);
        pause = (Button) findViewById(R.id.pause);
        replay = (Button) findViewById(R.id.replay);
        videoView = (VideoView) findViewById(R.id.video_view);

        verifyStoragePermissions(MainActivity.this);

        File file = new File(Environment.getExternalStorageDirectory() + "/video.mp4");
        videoView.setVideoPath(file.getPath());
        Log.i("main", file.getPath());

        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!videoView.isPlaying()) {
                    videoView.start();
                }
            }
        });

        pause.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (videoView.isPlaying()) {
                    videoView.pause();
                }
            }
        });

        replay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                videoView.resume();
            }
        });
    }


    // Storage Permissions
    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
    };

    /**
     * Checks if the app has permission to write to device storage
     *
     * If the app does not has permission then the user will be prompted to grant permissions
     *
     * @param activity
     */
    public static void verifyStoragePermissions(Activity activity) {
        // Check if we have write permission
        int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

        if (permission != PackageManager.PERMISSION_GRANTED) {
            // We don't have permission so prompt the user
            ActivityCompat.requestPermissions(
                    activity,
                    PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE
            );
        }
    }


    @Override
    protected void onDestroy(){
        super.onDestroy();
        if(videoView != null){
            videoView.suspend();
        }
    }
}

错误

在实体机上运行app时错误
All packages are not available for download!
The following packages are not available: -Package id platform;android-1

缺少NDK。先把项目打包成apk,然后安装到手机上。

无法播放视频的错误
  • 首先在manifest中声明读写存储卡的权限。
  • 对于API23+,即使manifest文件中声明了权限,还是需要在代码中请求读写权限:
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
};

/**
 * Checks if the app has permission to write to device storage
 *
 * If the app does not has permission then the user will be prompted to grant permissions
 *
 * @param activity
 */
public static void verifyStoragePermissions(Activity activity) {
    // Check if we have write permission
    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permission != PackageManager.PERMISSION_GRANTED) {
        // We don't have permission so prompt the user
        ActivityCompat.requestPermissions(
                activity,
                PERMISSIONS_STORAGE,
                REQUEST_EXTERNAL_STORAGE
        );
    }
}

Android开发——播放视频_第1张图片

你可能感兴趣的:(Android)