您的位置:首页 > 移动开发 > Android开发

android 多媒体和相机详解四

2017-04-26 14:05 471 查看


处理AUDIO_BECOMING_NOISYIntent

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

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

[java] view
plain copy

<receiver android:name=".MusicIntentReceiver">  

   <intent-filter>  

      <action android:name="android.media.AUDIO_BECOMING_NOISY" />  

   </intent-filter>  

</receiver>  

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

[java] view
plain copy

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] view
plain copy

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] view
plain copy

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] view
plain copy

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事件来同步音乐和游戏逻辑.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: