Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 多媒體和相機詳解四

android 多媒體和相機詳解四

編輯:關於Android編程

處理AUDIO_BECOMING_NOISYIntent
  很多良好的音頻播放的應用都會在那些導致聲音變為噪音(通過外部揚聲器輸出)的事件發生時自動停止播放.例如,這可能發生在當一個用戶用耳機聽音樂時忽然斷開了耳機連接.音頻從揚聲器播放可能不是用戶期望的.

 

 

  你可以通過處理ACTION_AUDIO_BECOMING_NOISYintent 來保證你的應用在此情況下停止播放音樂,你可以把如下代碼添加到你的manifest來注冊一個receiver:


[java]
<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)進行注冊,下面就是要實現這個類:


[java]
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查詢媒體來做到:


[java]
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中播放獲取到的媒體,你可以這樣做:


[java]
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回放:


[java]  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(); www.2cto.com

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();


SDK包含一個例子— JetBoy —它向你演示了如何使用JetPlayer在你的游戲中創建一個交互式音軌.它也演示了如何使用JET事件來同步音樂和游戲邏輯.

 作者:nkmnkm
 


 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved