播放音视频---MediaPlayer、VideoView
来源:互联网 发布:淘宝认证照片拍摄技巧 编辑:程序博客网 时间:2024/06/07 00:22
实现了简单的音视频功能。
前提条件,申请读取SD卡的权限,Android6.0及以上还要记得动态申请哦(放于文章最后)!!!
1.播放音频
功能:播放(续播)、暂停、停止。
1.布局xml:
<?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"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_margin="5dp" android:id="@+id/btn_paly" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="play"/> <Button android:layout_margin="5dp" android:id="@+id/btn_pause" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="pause"/> <Button android:layout_margin="5dp" android:id="@+id/btn_stop" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="stop"/> </LinearLayout></LinearLayout>
2.activity代码:
public class ActPlayMedia extends AppCompatActivity{ @BindView(R.id.btn_paly) Button btnPaly; @BindView(R.id.btn_pause) Button btnPause; @BindView(R.id.btn_stop) Button btnStop; private MediaPlayer mediaPlayer = new MediaPlayer(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_act_mediaplayer); ButterKnife.bind(this); initMediaPlayer(); } /** * 初始化MediaPlayer */ public void initMediaPlayer(){ try{ File sdDir = Environment.getExternalStorageDirectory(); File folderDir = new File(sdDir.getPath() + "/xxx"); if (!folderDir.exists()) { folderDir.mkdir(); } File file = new File(folderDir.getAbsolutePath(),"music.mp3"); if(file.exists()){ mediaPlayer.setDataSource(file.getPath());//指定音频文件路径 mediaPlayer.prepare();//让mediaPlayer进入准备状态 } }catch (Exception e){ e.printStackTrace(); } } @OnClick({R.id.btn_paly, R.id.btn_pause, R.id.btn_stop}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.btn_paly: if(!mediaPlayer.isPlaying()){ mediaPlayer.start();//开始播放;暂停播放后点击则继续播放 } break; case R.id.btn_pause: if(mediaPlayer.isPlaying()){ mediaPlayer.pause();//暂停播放 } break; case R.id.btn_stop: if(mediaPlayer.isPlaying()){ mediaPlayer.reset();//停止播放 initMediaPlayer(); } break; } } @Override protected void onDestroy() { super.onDestroy(); if(mediaPlayer != null){ mediaPlayer.stop(); mediaPlayer.reset();//释放资源 } }}
2.播放视频
功能:播放(续播)、暂停、重播。
1.布局xml
<?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"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_margin="5dp" android:id="@+id/btn_paly" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="play"/> <Button android:layout_margin="5dp" android:id="@+id/btn_pause" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="pause"/> <Button android:layout_margin="5dp" android:id="@+id/btn_replay" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="replay"/> </LinearLayout> <VideoView android:id="@+id/video_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="5dp"/></LinearLayout>
2.activity代码
public class ActPlayVideo extends AppCompatActivity { @BindView(R.id.btn_paly) Button btnPaly; @BindView(R.id.btn_pause) Button btnPause; @BindView(R.id.btn_replay) Button btnReplay; @BindView(R.id.video_view) VideoView videoView; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_act_playvideo); ButterKnife.bind(this); initVideoPath(); } public void initVideoPath(){ File sdDir = Environment.getExternalStorageDirectory(); File folderDir = new File(sdDir.getPath() + "/xxx"); if (!folderDir.exists()) { folderDir.mkdir(); } File file = new File(folderDir.getAbsolutePath(),"video.mp4"); if(file.exists()){ videoView.setVideoPath(file.getPath());//指定视频文件的路径 } } @OnClick({R.id.btn_paly, R.id.btn_pause, R.id.btn_replay}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.btn_paly: if(!videoView.isPlaying()){ videoView.start();//开始播放 } break; case R.id.btn_pause: if(videoView.isPlaying()){ videoView.pause();//暂停播放 } break; case R.id.btn_replay: if(videoView.isPlaying()){ videoView.resume();//重新播放 } break; } } @Override protected void onDestroy() { super.onDestroy(); if(videoView != null){ videoView.suspend();//释放资源 } }}
3.申请SD卡读取权限
1.配置文件申明:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2.动态申请
private boolean hadPermission = false; private static String[] PERMISSIONS_STORAGE = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE,};//SD卡读写的权限 private static final int REQUEST_EXTERNAL_STORAGE = 21; private final static int RESULT_PERMISSION = 1001; /** * 请求权限 */ public void verifyStoragePermissions() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { int i = ContextCompat.checkSelfPermission(MainActivity.this, PERMISSIONS_STORAGE[0]); int j = ContextCompat.checkSelfPermission(MainActivity.this, PERMISSIONS_STORAGE[1]); if (i != PackageManager.PERMISSION_GRANTED || j != PackageManager.PERMISSION_GRANTED) { //权限还没有授予,进行申请权限 startRequestPermission(); } else { hadPermission = true; } } else { hadPermission = true; } } /** * 开始提交请求权限 */ private void startRequestPermission() { ActivityCompat.requestPermissions(MainActivity.this, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE); } /** * 用户权限 申请 的回调方法 * * @param requestCode * @param permissions * @param grantResults */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_EXTERNAL_STORAGE) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (grantResults.length != 0) { if (grantResults[0] != PackageManager.PERMISSION_GRANTED) { // 判断用户是否点击了不再提醒。(检测该权限是否还可以申请) boolean b = shouldShowRequestPermissionRationale(permissions[0]); if (!b) { } else { } hadPermission = false; } else { hadPermission = true; } } } } }
阅读全文
0 0
- 播放音视频---MediaPlayer、VideoView
- Android 通过VideoView+MediaPlayer实现视频播放
- VideoView以及Surface+MediaPlayer播放视频RAW下视频方式
- VideoView播放视频异常MediaPlayer: Error (1,-2147483648)
- Android - SurfaceView+MediaPlayer、VideoView 2种方法播放视频
- 视频播放器(SurfaceView+MediaPlayer+SeekBar,VideoView+MediaController)
- VideoView播放视频异常MediaPlayer: Error (1,-2147483648)
- android 随手记 videoview循环播放网络视频 和mediaplayer+sufaceview播放网络视频
- android 随手记 videoview循环播放网络视频 和mediaplayer+sufaceview播放网络视频
- Android视频播放框架Vitamio集成及使用MediaPlayer+SurfaceView、VideoView+MediaController实现播放网络视频
- videoview循环播放网络视频 和mediaplayer+sufaceview播放网络视频
- MediaPlayer/MediaPlayer 视频播放
- 多媒体之播放视频——VideoView和MediaPlayer(MediaPlayer和SurfaceView结合)
- 第一行代码笔记 系统自带 媒体播放 音频播放MediaPlayer 视频播放VideoView
- android Mediaplayer 播放音视频
- Android VideoView播放视频
- VideoView播放视频
- Android VideoView播放视频
- java多线程学习(十一) 双重检查锁定和延迟初始化
- 线性代数 03.03 线性方程组的解
- <aop:aspect>与<aop:advisor>的区别
- U3D之AnimationCurve
- Angular2父子组件之间数据传递:父子组件共享服务通信
- 播放音视频---MediaPlayer、VideoView
- 计算机认识实习报告
- Java的@Override
- 伟大的man手册
- (2)--Android自定义View:时钟和圆百分比图
- 根据CTP接口计算现手、增仓、开平、对手盘 (2)
- android anr trace.txt文件 抓取
- @RequestBody, @ResponseBody 注解详解(转)
- 关于流计算基本认识