Android开发——播放视频

本文介绍了Android开发中使用VideoView控件进行视频播放的方法,包括setVideoPath、start、pause等关键函数的使用,并提供了播放视频的示例。在实际操作中,可能遇到的问题如实体机运行时缺少NDK,以及如何处理API23+的权限问题也进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值