android 多媒体和相机详解四

来源:互联网 发布:linux终止进程命令 编辑:程序博客网 时间:2024/05/18 07:46

处理AUDIO_BECOMING_NOISYIntent

  很多良好的音频播放的应用都会在那些导致声音变为噪音(通过外部扬声器输出)的事件发生时自动停止播放.例如,这可能发生在当一个用户用耳机听音乐时忽然断开了耳机连接.音频从扬声器播放可能不是用户期望的.



  你可以通过处理ACTION_AUDIO_BECOMING_NOISYintent来保证你的应用在此情况下停止播放音乐,你可以把如下代码添加到你的manifest来注册一个receiver

[java] view plaincopyprint?
  1. <receiver android:name=".MusicIntentReceiver"
  2.    <intent-filter> 
  3.       <action android:name="android.media.AUDIO_BECOMING_NOISY" /> 
  4.    </intent-filter> 
  5. </receiver> 

此段把MusicIntentReceiver类作为这个intent的一个广播接收器(broadcastreceiver)进行注册,下面就是要实现这个类:

[java] view plaincopyprint?
  1. public class MusicIntentReceiverimplements android.content.BroadcastReceiver { 
  2.    @Override 
  3.    public void onReceive(Context ctx, Intent intent) { 
  4.       if (intent.getAction().equals( 
  5.                     android.media.AudioManager.ACTION_AUDIO_BECOMING_NOISY)) { 
  6.           // 通知你的service停止播放 
  7.           // (比如通过一个Intent) 
  8.       } 
  9.    } 

从一个ContentResolver获取媒体


  媒体播放应用的是另一个有用的特性是检索用户存放在设备上的音乐.你可以通过从ContentResolver查询媒体来做到:

[java] view plaincopyprint?
  1. ContentResolver contentResolver = getContentResolver(); 
  2. Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
  3. Cursor cursor = contentResolver.query(uri, null, null, null,null); 
  4. if (cursor == null) { 
  5.     // 查询失败,处理错误 
  6. } else if (!cursor.moveToFirst()) { 
  7.     // 设备上没有媒体 
  8. } else
  9.     int titleColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE); 
  10.     int idColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID); 
  11.     do
  12.        long thisId = cursor.getLong(idColumn); 
  13.        String thisTitle = cursor.getString(titleColumn); 
  14.        // ...process entry... 
  15.     } while (cursor.moveToNext()); 

要在MediaPlayer中播放获取到的媒体,你可以这样做:

[java] view plaincopyprint?
  1. long id = /* 上面获取到的某个条目的id */
  2. Uri contentUri = ContentUris.withAppendedId( 
  3.         android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id); 
  4.  
  5. mMediaPlayer = new MediaPlayer(); 
  6. mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
  7. mMediaPlayer.setDataSource(getApplicationContext(), contentUri); 
  8.  
  9. // ...prepare and start... 


JetPlayer

  Android平台包含一个JET引擎,用它可以添加交互式播放的JET音频内容到你的应用.你可以使用SDK所带的JetCreator应用来创建JET内容.要播放和管理JET内容,使用JetPlayer类.


播放JET内容

  本节教给你如何写出,配置和播放JET内容.JET的概念,介绍以及如何使用JetCreator工具创建JET内容,请看JetCreator用户手册,这里不叨叨.这个工具可以在Windows,OS X, Linux平台(Linux上不能像WindowsOSX上那样对导入的资产进行试听)上使用.


下面是如何对存储在SD卡上的一个.jet文件配置JET回放:

[java] view plaincopyprint?
  1. JetPlayer jetPlayer = JetPlayer.getJetPlayer(); 
  2. jetPlayer.loadJetFile("/sdcard/level1.jet"); 
  3. byte segmentId = 0
  4.  
  5. // queue segment 5, repeat once, use General MIDI, transpose by -1 octave 
  6. jetPlayer.queueJetSegment(5, -1,1, -1,0, segmentId++); 
  7. // queue segment 2 
  8. jetPlayer.queueJetSegment(2, -1,0, 0,0, segmentId++); 
  9.  
  10. jetPlayer.play(); 

SDK包含一个例子—JetBoy —它向你演示了如何使用JetPlayer在你的游戏中创建一个交互式音轨.它也演示了如何使用JET事件来同步音乐和游戏逻辑.