1. 程式人生 > >android實現本地視訊的播放,類似於一個小型的MP4,可以選擇本地的檔案進行播放

android實現本地視訊的播放,類似於一個小型的MP4,可以選擇本地的檔案進行播放

首先呢我們來 看一下佈局檔案中的程式碼:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/play"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="play"/>
        <Button
            android:id="@+id/pause"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="pause"/>
        <Button
            android:id="@+id/replay"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="replay"/>
        <Button
            android:id="@+id/choice"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Choice"/>
    </LinearLayout>
    <VideoView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

這裡面也沒啥特別的,就包含了四個按鈕和一個播放視訊的介面,按鈕分別用來控制視訊的播放,暫停,重新開始,和選擇檔案

程式碼裡面寫的比較清楚了

然後我們來看一下主函式的程式碼:

package com.example.pc_ly.playvideotest;

import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v4.os.EnvironmentCompat;
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.Toast;
import android.widget.VideoView;

import java.io.File;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
  private VideoView videoView;
    private static final int FILE_SELECT_CODE=1;
    private static final String TAG="VideoActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        videoView=(VideoView)findViewById(R.id.video_view);
        Button play=(Button)findViewById(R.id.play);
        Button pause=(Button)findViewById(R.id.pause);
        Button replay=(Button)findViewById(R.id.replay);
        Button choice=(Button)findViewById(R.id.choice) ;//按鈕的初始化
        choice.setOnClickListener(this);
        play.setOnClickListener(this);
        pause.setOnClickListener(this);
       replay.setOnClickListener(this);//給按鈕加監聽
        if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);//判斷你是否授權
        }
        else {
            inintVideoPath();
        }
    }
    private void inintVideoPath(){
        File file=new File(Environment.getExternalStorageDirectory(),"movie.mp4");//開啟軟體直接播放的視訊名字是movie.mp4
        videoView.setVideoPath(file.getPath());//指定視訊檔案的路徑
    }
    public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults){
        switch (requestCode){
            case 1:
                if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
                    inintVideoPath();
                }
                else {
                    Toast.makeText(this,"拒絕許可權將無法訪問程式",Toast.LENGTH_SHORT).show();
                    finish();
                }
                break;
            default:
        }
    }
    public void onClick(View v){//各按鈕的功能
        switch (v.getId()){
            case R.id.play:
                if(!videoView.isPlaying()){//播放
                    videoView.start();
                }
                break;
            case R.id.pause:
                if(videoView.isPlaying()){//暫停
                    videoView.pause();
                }
                break;
            case R.id.replay:
                if(videoView.isPlaying()){
                    videoView.resume();//重新播放
                }
                break;
            case R.id.choice://選擇檔案
                Intent intent=new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("*/*");//設定型別,這是任意型別
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                startActivityForResult(intent,1);
        }
    }
    public void onDestroy(){//釋放資源
        super.onDestroy();
        if(videoView!=null){
            videoView.suspend();
        }
    }
    public void onActivityResult(int requestCode,int resultCode,Intent data){
        if(resultCode== Activity.RESULT_OK){
            Uri uri=data.getData();
            videoView.setVideoURI(uri);//將選擇的檔案路徑給播放器
            super.onActivityResult(requestCode, resultCode, data);
            return;
        }
        if (requestCode == FILE_SELECT_CODE) {
            Uri uri = data.getData();
            Log.i(TAG, "------->" + uri.getPath());
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
   //public void choseFile(){
    ///    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    //    intent.setType("*/*");
    //    intent.addCategory(Intent.CATEGORY_OPENABLE);
    //    try {
    //        startActivityForResult(Intent.createChooser(intent, "選擇檔案"), FILE_SELECT_CODE);
    //    } catch (android.content.ActivityNotFoundException ex) {
    //        Toast.makeText(this, "親,木有檔案管理器啊-_-!!", Toast.LENGTH_SHORT).show();
    //    }

   // }

}

這裡面的註釋比較詳細,我就不再囉嗦了,剛開啟軟體點選播放會播放sd卡根目錄下名字為movie.MP4的檔案,你也可以自己設定,或者乾脆不要,然後選擇檔案之後,點選播放就會播放你選擇的檔案啦,效果如下圖:

最後需要注意的一個問題是要記得授權哦,如下圖,在AndroidManifest加入這一行程式碼即可:

可能android系統比較老的話會出現一些問題,目前大部分的機型都是沒問題的,當然要想播放其他型別的檔案也是可以滴,只是程式碼需要做一些改變,有興趣的童鞋可以去試一試啊,有疑問的也可以在下方留言哦!

郵箱:[email protected]

其他部落格的連結:

Github個人網站      知乎      簡書

歡迎各位訪問哦,這次就到這裡啦!