11-23 多媒体 MediaPlayer、Camera、MediaRecorder Vitamio 笔记
来源:互联网 发布:天刀捏脸数据 女 冰儿 编辑:程序博客网 时间:2024/06/06 16:11
多媒体
android提供了多媒体框架可以实现音频视频的控制操作,
主要的API类库有:MediaPlayer、Camera、MediaRecorder
1、MediaPlayer的使用
<1>MediaPlayer播放(1)播放程序本地资源文件public void playResFileClick(View v){ mediaPlayer = MediaPlayer.create(this,R.raw.a1); mediaPlayer.start();}(2)播放SDCard文件public void playSDcardFileClick(View v){ mediaPlayer = new MediaPlayer(); String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)+"/后会无期.mp3"; try { mediaPlayer.setDataSource(path); mediaPlayer.prepare(); } catch (IOException e) { e.printStackTrace(); } mediaPlayer.start(); }(3)播放网络文件public void playNetFileClick(View v){ mediaPlayer = new MediaPlayer(); String path ="http://cc.stream.qqmusic.qq.com/C100001Orf0q32GTFF.m4a?fromtag=52"; try { mediaPlayer.setDataSource(path); mediaPlayer.prepareAsync();//异步缓冲文件 //异步缓冲监听事件 mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mp.start(); } }); } catch (IOException e) { e.printStackTrace(); } }<2>MediaPlayer状态分析与方法参考API文档MediaPlayer的状态图<3>使用服务控制MediaPlayer<4>异常事件_唤醒锁_Notification1>异常事件 implements MediaPlayer.OnErrorListener,在MediaPlayer出现异常时,我们通常可以重置MediaPlayer对象。在onErrorListener的回调方法中调用mediaPlayer.reset()方法。2>唤醒锁(了解)用于保持在媒体播放时,防止屏幕休眠,需要添加权限:<uses-permission android:name="android.permission.WAKE_LOCK"/>但需要注意的时,你总是应该在必要的时间解除唤醒锁,否则会消耗电量3>Notification播放音乐时,我们可以使用通知的方式,在通知栏添加操作功能,以方便用户控制播放或返回到播放界面。 //发一个通知 private void notification(){ Notification.Builder builder = new Notification.Builder(this); builder.setTicker("我的播放器"); builder.setSmallIcon(R.mipmap.music_app_80x80); builder.setContentTitle("正在播放:后会无期"); builder.setContentText("邓紫棋"); Intent intent = new Intent(this,Main2Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pi = PendingIntent.getActivity(this,0,intent,0); builder.setContentIntent(pi); builder.setOngoing(true); Notification n = builder.build(); startForeground(1,n); nm.notify(MUSIC_NID,n); }<5>处理音频焦点(了解)参考PPT<6>处理噪音当用户用耳机听音乐时,突然耳机异常中断,导致声音从扬声器中发出,此时可能不是用户想要的我们把这样的声音理解为噪音,如何处理噪音,我们可以通过系统发出的中断广播来处理:public class MusicIntentReceiver extends BroadcastReceiver { public MusicIntentReceiver() { } @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if ("android.media.AUDIO_BECOMING_NOISY".equals(action)) { Intent service = new Intent(MusicService.ACTION_PAUSE); context.startService(service); } }}并在清单文件中注册广播接收器,添加action:android.media.AUDIO_BECOMING_NOISY<7>使用CP获取本地媒体 //初始化音乐数据(从ContentProvider获取本地音乐数据) private void initMusicData() { ContentResolver cr = getContentResolver(); Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Log.i("MediaUri",uri.toString()); Cursor c = cr.query(uri,null, MediaStore.Audio.Media.IS_MUSIC+"=? and "+MediaStore.Audio.Media.DURATION+">=?" , new String[]{"1","180000"},null); if(c==null)return; else{ Music m = null; while(c.moveToNext()){ m = new Music( c.getLong(c.getColumnIndex(MediaStore.Audio.Media._ID)), c.getString(c.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)), c.getString(c.getColumnIndex(MediaStore.Audio.Media.TITLE)), c.getString(c.getColumnIndex(MediaStore.Audio.Media.ARTIST))); musics.add(m); } c.close(); if(musics.size()>0){ musicAdapter.setMusicList(musics); musicAdapter.notifyDataSetChanged(); } } }
2、Camera
使用摄像头,需要添加权限:<uses-permission android:name="android.permission.CAMERA" />SDCard读写:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />public class CameraActivity extends AppCompatActivity {//通过两个类型分别生成保存图片和视频的文件位置 private static final int TYPE_CAPTURE_IMAGE = 0x1; private static final int TYPE_CAPTURE_VIDEO = 0x2;//请求编码(用于startActivityForResult方法) private static final int REQUEST_CODE_IMAGE = 0x3; private static final int REQUEST_CODE_VIDEO = 0x4; private ImageView imageView_image_capture; private TextView textView_path; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_camera); imageView_image_capture = (ImageView) findViewById(R.id.imageView3_image_capture); textView_path = (TextView) findViewById(R.id.textView_video_path); } private File file; public void imageCaptureClick(View view){ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); file = getCaptureFile(TYPE_CAPTURE_IMAGE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); startActivityForResult(intent,REQUEST_CODE_IMAGE); } public void videoCaptureClick(View view){ Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); file = getCaptureFile(TYPE_CAPTURE_VIDEO); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); startActivityForResult(intent,REQUEST_CODE_VIDEO); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (resultCode){ case RESULT_OK: if(requestCode==REQUEST_CODE_IMAGE){ if(data==null){ Log.i("image",file.getAbsolutePath()); Log.i("image",file.length()+""); BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 4; Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath(),options); imageView_image_capture.setImageBitmap(bitmap); }else{ Bitmap bitmap = (Bitmap) data.getExtras().get("data"); imageView_image_capture.setImageBitmap(bitmap); } }else if(requestCode==REQUEST_CODE_VIDEO){ textView_path.setText(file.toString()); } break; } } private File getCaptureFile(int type){ String path = null; DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); String fileName = df.format(new Date()); switch (type){ case TYPE_CAPTURE_IMAGE: path = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES)+"/"+fileName+".jpg"; break; case TYPE_CAPTURE_VIDEO: path = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_MOVIES)+"/"+fileName+".mp4"; break; } return new File(path); }}
3、音频录制(了解)
private void init(){ mr.reset(); mr.setAudioSource(MediaRecorder.AudioSource.MIC);//设置音源 mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//文件格式 mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//文件编码 String path = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_MUSIC)+"/"+ System.currentTimeMillis()+".mp3"; mr.setOutputFile(path); try { mr.prepare(); } catch (IOException e) { e.printStackTrace(); } } @Override public void onClick(View v) { switch (v.getId()){ case R.id.button7_start: init(); mr.start(); button_stop.setEnabled(true); button_start.setEnabled(false); break; case R.id.button8_stop: mr.stop(); button_stop.setEnabled(false); button_start.setEnabled(true); break; } } @Override protected void onDestroy() { super.onDestroy(); if(mr!=null)mr.release(); }
4、Vitamio框架
一个功能强大的多媒体框架,可以支持常用的媒体文件格式,和流媒体。在项目中集成:<1>使用AS的添加第三方依赖包: compile 'me.neavo:vitamio:4.2.2'<2>在项目的libs目录(注意一定要是libs目录)下添加so库,可以从vitamio源码中的dist\arm_x86_mips\libs 下把文件复制中libs中<3>打开工程的清单文件,添加权限: <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><4>配置一个用于初始化的Activity(由vitamio提供) <!-- Don't forgot InitActivity --> <activity android:name="io.vov.vitamio.activity.InitActivity" android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation" android:launchMode="singleTop" android:theme="@android:style/Theme.NoTitleBar" android:windowSoftInputMode="stateAlwaysHidden" /><5>在程序启动时,添加检查是否加载lib库的代码:通过可以在Activity的基类中的onCreate方法添加以下代码 if (!LibsChecker.checkVitamioLibs(this)) return;API的使用可以参:https://www.vitamio.org 官网示例可以参考源码中自带的示例:vitamio-sample
0 0
- 11-23 多媒体 MediaPlayer、Camera、MediaRecorder Vitamio 笔记
- 音乐(多媒体)SoundPool,MediaRecorder和Mediaplayer
- Android多媒体视频——MediaRecorder&MediaPlayer
- 视频(多媒体) MediaPlayer,camera
- 视频播放器MediaPlayer拍照Camera-录像MediaRecorder
- 学习笔记之Vitamio的MediaPlayer
- Android入门笔记 - 多媒体 - MediaPlayer
- 扣丁学堂笔记第23天Camera、音频录制与Vitamio框架
- MediaRecorder与MediaPlayer步骤
- MediaRecorder录音,MediaPlayer播放
- android多媒体部分学习笔记六----音频录制 mediaRecorder
- android多媒体部分学习笔记七------音频录制 mediaRecorder
- android多媒体部分学习笔记八------音频录制 mediaRecorder
- MediaPlayer,Camera
- Vitamio多媒体开发框架
- Vitamio多媒体开发框架
- Android多媒体---MediaRecorder
- Android学习MediaRecorder和MediaPlayer
- java字符串中元音字母反转
- Jlink调试环境搭建
- 全面认识openstack
- [1st.Aug.16.] NOIP2011 选择客栈——最终其实没有做出来
- 心少朴
- 11-23 多媒体 MediaPlayer、Camera、MediaRecorder Vitamio 笔记
- 什么是OGNL表达式
- 关于MySql8小时空闲后连接超时问题(testOnBorrow,logAbandoned等)
- tjut 4333
- HDU 1325 Is It A Tree?(树的判断,经典题目)
- 每周学一点Egret(15) 桌面版龙骨预览工具
- 设计模式六大原则
- [php学习十七]JQuery练习2-动画
- java集合---hashcode和equals的重写