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" />