編輯:關於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
本文實例為大家分享了Android刮刮卡效果控件,供大家參考,具體內容如下刮刮卡類: package com.reyo.view;import android.conte
以前做項目大多用的radiobutton,今天用tablayout來做一個tab切換頁面的的效果.實現的效果就是類似QQ.微信的頁面間(也就是Fragment間)的切換.
今天在修改一個布局問題時候,發現自己對權重的理解還不夠。首先問題如圖:一個TextView沒有按要求顯示完整,顯示成了2行。怎麼辦呢?方法1:是把它左面的字體放小。結果師
解決AngualrJS頁面刷新導致異常顯示問題 緒 俗話說,細節決定成敗,編程亦是如此。編程過程中我們可能會不自覺的忽視一些細節問題,殊不知,這些細節