安卓本地視訊播放SurfaceView+MediaPlayer
阿新 • • 發佈:2019-02-18
MainActivity
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback{ private SurfaceView sfv; private MediaPlayer mediaPlayer; private SurfaceHolder holder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sfv = (SurfaceView) findViewById(R.id.sfv); mediaPlayer = new MediaPlayer(); holder = sfv.getHolder(); holder.addCallback(this); mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mediaPlayer.start(); } }); // 視訊播放完成後會回撥的方法 mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mediaPlayer.release(); } }); } @Override public void surfaceCreated(SurfaceHolder holder) { mediaPlayer.reset(); mediaPlayer.setDisplay(holder); Uri uri = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.minion_01); try { mediaPlayer.setDataSource(this,uri); } catch (IOException e) { e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } @Override protected void onStop() { super.onStop(); if (mediaPlayer!=null) { mediaPlayer.release(); } } public void play(View view) { mediaPlayer.prepareAsync(); } }
activity_main
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <SurfaceView android:id="@+id/sfv" android:layout_width="match_parent" android:layout_height="300dp" /> <Button android:id="@+id/btn_play" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="開始播放" android:onClick="play"/> </LinearLayout>
許可權++
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 粗略定位 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 精準定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.LOCATION_HARDWARE" />