android 多媒体和相机详解四 .
来源:互联网 发布:德雷蒙德格林体测数据 编辑:程序博客网 时间:2024/06/06 01:02
处理AUDIO_BECOMING_NOISYIntent
很多良好的音频播放的应用都会在那些导致声音变为噪音(通过外部扬声器输出)的事件发生时自动停止播放.例如,这可能发生在当一个用户用耳机听音乐时忽然断开了耳机连接.音频从扬声器播放可能不是用户期望的.
你可以通过处理ACTION_AUDIO_BECOMING_NOISYintent来保证你的应用在此情况下停止播放音乐,你可以把如下代码添加到你的manifest来注册一个receiver:
- <receiver android:name=".MusicIntentReceiver">
- <intent-filter>
- <action android:name="android.media.AUDIO_BECOMING_NOISY" />
- </intent-filter>
- </receiver>
<receiver android:name=".MusicIntentReceiver"> <intent-filter> <action android:name="android.media.AUDIO_BECOMING_NOISY" /> </intent-filter></receiver>
此段把MusicIntentReceiver类作为这个intent的一个广播接收器(broadcastreceiver)进行注册,下面就是要实现这个类:
- public class MusicIntentReceiver implements android.content.BroadcastReceiver {
- @Override
- public void onReceive(Context ctx, Intent intent) {
- if (intent.getAction().equals(
- android.media.AudioManager.ACTION_AUDIO_BECOMING_NOISY)) {
- // 通知你的service停止播放
- // (比如通过一个Intent)
- }
- }
- }
public class MusicIntentReceiver implements android.content.BroadcastReceiver { @Override public void onReceive(Context ctx, Intent intent) { if (intent.getAction().equals( android.media.AudioManager.ACTION_AUDIO_BECOMING_NOISY)) { // 通知你的service停止播放 // (比如通过一个Intent) } }}
从一个ContentResolver获取媒体
媒体播放应用的是另一个有用的特性是检索用户存放在设备上的音乐.你可以通过从ContentResolver查询媒体来做到:
- ContentResolver contentResolver = getContentResolver();
- Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
- Cursor cursor = contentResolver.query(uri, null, null, null, null);
- if (cursor == null) {
- // 查询失败,处理错误
- } else if (!cursor.moveToFirst()) {
- // 设备上没有媒体
- } else {
- int titleColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE);
- int idColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID);
- do {
- long thisId = cursor.getLong(idColumn);
- String thisTitle = cursor.getString(titleColumn);
- // ...process entry...
- } while (cursor.moveToNext());
- }
ContentResolver contentResolver = getContentResolver();Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;Cursor cursor = contentResolver.query(uri, null, null, null, null);if (cursor == null) { // 查询失败,处理错误} else if (!cursor.moveToFirst()) { // 设备上没有媒体} else { int titleColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE); int idColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID); do { long thisId = cursor.getLong(idColumn); String thisTitle = cursor.getString(titleColumn); // ...process entry... } while (cursor.moveToNext());}
要在MediaPlayer中播放获取到的媒体,你可以这样做:
- long id = /* 上面获取到的某个条目的id */;
- Uri contentUri = ContentUris.withAppendedId(
- android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);
- mMediaPlayer = new MediaPlayer();
- mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
- mMediaPlayer.setDataSource(getApplicationContext(), contentUri);
- // ...prepare and start...
long id = /* 上面获取到的某个条目的id */;Uri contentUri = ContentUris.withAppendedId( android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);mMediaPlayer = new MediaPlayer();mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mMediaPlayer.setDataSource(getApplicationContext(), contentUri);// ...prepare and start...
JetPlayer
Android平台包含一个JET引擎,用它可以添加交互式播放的JET音频内容到你的应用.你可以使用SDK所带的JetCreator应用来创建JET内容.要播放和管理JET内容,使用JetPlayer类.
播放JET内容
本节教给你如何写出,配置和播放JET内容.JET的概念,介绍以及如何使用JetCreator工具创建JET内容,请看JetCreator用户手册,这里不叨叨.这个工具可以在Windows,OS X, 和Linux平台(Linux上不能像Windows和OSX上那样对导入的资产进行试听)上使用.
下面是如何对存储在SD卡上的一个.jet文件配置JET回放:
- JetPlayer jetPlayer = JetPlayer.getJetPlayer();
- jetPlayer.loadJetFile("/sdcard/level1.jet");
- byte segmentId = 0;
- // queue segment 5, repeat once, use General MIDI, transpose by -1 octave
- jetPlayer.queueJetSegment(5, -1, 1, -1, 0, segmentId++);
- // queue segment 2
- jetPlayer.queueJetSegment(2, -1, 0, 0, 0, segmentId++);
- jetPlayer.play();
JetPlayer jetPlayer = JetPlayer.getJetPlayer();jetPlayer.loadJetFile("/sdcard/level1.jet");byte segmentId = 0;// queue segment 5, repeat once, use General MIDI, transpose by -1 octavejetPlayer.queueJetSegment(5, -1, 1, -1, 0, segmentId++);// queue segment 2jetPlayer.queueJetSegment(2, -1, 0, 0, 0, segmentId++);jetPlayer.play();
SDK包含一个例子—JetBoy —它向你演示了如何使用JetPlayer在你的游戏中创建一个交互式音轨.它也演示了如何使用JET事件来同步音乐和游戏逻辑.
- android 多媒体和相机详解四
- android 多媒体和相机详解四
- android 多媒体和相机详解四 .
- android 多媒体和相机详解四
- android 多媒体和相机详解
- android 多媒体和相机详解一
- android 多媒体和相机详解二
- android 多媒体和相机详解三
- android 多媒体和相机详解五
- android 多媒体和相机详解六
- android 多媒体和相机详解七
- android 多媒体和相机详解八
- android 多媒体和相机详解一
- android 多媒体和相机详解二
- android 多媒体和相机详解三
- android 多媒体和相机详解五
- android 多媒体和相机详解六
- android 多媒体和相机详解七
- UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-8摄像头功能调试支持
- Archie osgEarth Step By Step ⑤OsgEarth开发指南——使用osgearth API编程动态建立地图
- ORA-12641 错误的一个解决办法
- VC++ 聊天框,仿QQ接收图片
- AnimationDrawable在2.2系统上开始动画后无法显示的问题
- android 多媒体和相机详解四 .
- 随机启动脚本修改Magento数据表core_config_data
- Linux中应用程序运行库错误问题的一种解决方法
- android 多媒体和相机详解五 .
- Disclaimer
- extjs4 chart 坐标轴都为Numberic时,坐标不正确问题
- C#中Split用法
- 如何在EditText中嵌入一个Button
- shell编程之 .命令