Tôi đang sử dụng mã sau để phát âm thanh trong ứng dụng của mình. Mọi thứ hoạt động tốt trước ICS. Nhưng trên ICS và các phiên bản gần đây không có âm thanh nào có thể được nghe mặc dù không có lỗi xuất hiện.Âm thanh không phát trong phiên bản Android lớn hơn 4.0
EDIT: Lưu ý, mã sau đây được kích hoạt bởi bộ thu rộng. Bộ thu BroadCast gọi nhiệm vụ không đồng bộ. Trong phương thức xử lý bài của nhiệm vụ asycn, phương thức sau được gọi.
Lỗi này chỉ xảy ra trên các kiểu điện thoại di động cụ thể (ví dụ: nexus) và trên một số kiểu người dùng có thể phát âm thanh đi kèm với hệ điều hành nhưng không phải là âm thanh riêng của họ trong thư mục rigtones.
Tôi không thể nhận được các vấn đề xảy ra trên thiết bị cầm tay cụ thể
Lỗi này có thể là gì?
public static void playSound(final Context context, final int volume,
Uri uri, final int stream, int maxTime, int tickTime) {
//stopPlaying();
/*
if (stream < 0 || stream > 100) {
throw new IllegalArgumentException(
"volume must be between 0 and 100 .Current volume "
+ volume);
}*/
final AudioManager mAudioManager = (AudioManager) context
.getSystemService(Context.AUDIO_SERVICE);
int deviceLocalVolume = getDeviceVolume(volume,
mAudioManager.getStreamMaxVolume(stream));
Log.d(TAG,
"device max volume = "
+ mAudioManager.getStreamMaxVolume(stream)
+ " for streamType " + stream);
Log.d(TAG, "playing sound " + uri.toString()
+ " with device local volume " + deviceLocalVolume);
final int oldVolume = mAudioManager.getStreamVolume(stream);
// set the volume to what we want it to be. In this case it's max volume
// for the alarm stream.
Log.d(Constants.APP_TAG, "setting device local volume to " + deviceLocalVolume);
mAudioManager.setStreamVolume(stream, deviceLocalVolume,
AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
final MediaPlayer mediaPlayer = new MediaPlayer();
golbalMMediaPlayer = mediaPlayer;
try {
final OnPreparedListener OnPreparedListener = new OnPreparedListener() {
@Override
public void onPrepared(final MediaPlayer mp) {
Log.d(TAG, "onMediaPlayercompletion listener");
mp.start();
countDownTimer.start();
}
};
mediaPlayer.setDataSource(context.getApplicationContext(), uri);
mediaPlayer.setAudioStreamType(stream);
mediaPlayer.setLooping(false);
mediaPlayer.setOnPreparedListener(OnPreparedListener);
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Log.d(Constants.APP_TAG, "Entered onCompletion listener of mediaplayer");
mAudioManager.setStreamVolume(stream, oldVolume,
AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
try{
if(mediaPlayer != null && mediaPlayer.isPlaying()){
mediaPlayer.release();
}
}catch(Exception ex){
Log.e(Constants.APP_TAG, "error on oncompletion listener" ,ex);
}
}
});
CountDownTimer timer = new CountDownTimer(maxTime*1000, tickTime*1000) {
@Override
public void onTick(long millisUntilFinished) {
Log.d(TAG, "tick while playing sound ");
}
@Override
public void onFinish() {
Log.d(TAG, "timer finished");
stopPlaying();
}
};
countDownTimer = timer;
mediaPlayer.prepareAsync();
} catch (Exception e) {
Log.e(TAG, "problem while playing sound", e);
} finally {
}
}
GỖ
:07-01 00:00:00.030: D/beephourly(9500): device max volume = 7 for streamType 5
07-01 00:00:00.030: D/beephourly(9500): playing sound content://media/internal/audio/media/166 with device local volume 7
07-01 00:00:00.030: D/beephourly(9500): setting device local volume to 7
07-01 00:00:00.080: D/beephourly(9500): vibrating with pattern = [[email protected]
07-01 00:00:00.090: D/beephourly(9500): will show normal notification
07-01 00:00:00.100: D/beephourly(9500): notification is enabled
07-01 00:00:00.100: D/usersettings(9500): hr = 0
07-01 00:00:00.110: D/beephourly(9500): onMediaPlayercompletion listener
07-01 00:00:00.451: D/beephourly(9500): tick while playing sound
07-01 00:00:20.460: D/beephourly(9500): timer finished
07-01 00:00:20.460: D/beephourly(9500): got request to stop playing
07-01 00:00:20.460: D/beephourly(9500): cancelling countdowntimer
07-01 00:00:20.460: D/beephourly(9500): releasing mediaplayer now
Câu hỏi này là một câu hỏi theo dõi câu hỏi mà tôi hỏi trước đó: sound not playing in android > icecream sandwich
Bạn có thể xác định một âm thanh mà không chơi và một trong đó không và cho tôi biết tốc độ bit và định dạng của âm thanh bạn đang cố gắng phát và trên thiết bị nào? –
một trong các định dạng không thể phát được là mp3 – user93796
Không có gì rõ ràng là sai với mã của bạn - một ứng dụng mẫu có thể phát trong luồng THÔNG BÁO trên Nexus của tôi. Tôi khuyên bạn nên thêm Trình nghe lỗi và xóa bộ lọc nhật ký mà bạn có thể có - các bản ghi thú vị sẽ đến từ MediaPlayer và NuPlayer. – rds