android實現本地視訊的播放,類似於一個小型的MP4,可以選擇本地的檔案進行播放
阿新 • • 發佈:2018-12-09
首先呢我們來 看一下佈局檔案中的程式碼:
<?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系統比較老的話會出現一些問題,目前大部分的機型都是沒問題的,當然要想播放其他型別的檔案也是可以滴,只是程式碼需要做一些改變,有興趣的童鞋可以去試一試啊,有疑問的也可以在下方留言哦!
其他部落格的連結:
歡迎各位訪問哦,這次就到這裡啦!