2011-08-14 31 views
11

Tôi đã thử cài đặt luồng âm thanh của trình phát đa phương tiện trong ứng dụng của mình bằng mã sau đây nhưng khi tôi thực hiện việc này, tôi không nghe thấy âm thanh nào trong trình mô phỏng. Nếu tôi không đặt luồng cho trình phát thì âm thanh sẽ phát tốt. Tôi chắc chắn rằng tôi đang sử dụng sai, nhưng không thể tập luyện như thế nào, bất kỳ giúp đỡ?Android MediaPlayer - cách chơi trong STREAM_ALARM?

MediaPlayer player = MediaPlayer.create(getApplicationContext(), R.raw.test_audio); 

AudioManager audioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE); 
audioManager.getStreamVolume(AudioManager.STREAM_ALARM); 
audioManager.setStreamVolume(AudioManager.STREAM_ALARM, audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 
player.setAudioStreamType(AudioManager.STREAM_ALARM); 
player.start(); 

Lưu ý: Tôi đã thêm quyền MODIFY_AUDIO_SETTINGS vào tệp kê khai của mình.

Cảm ơn!

Trả lời

0

Hãy thử như sau:

player.setAudioStreamType(AudioManager.STREAM_ALARM); 
player.prepare(); 
player.start(); 

Và tại sao bạn gọi "audioManager.getStreamVolume (AudioManager.STREAM_ALARM);"? Giá trị không được lưu trữ trong một biến, vì vậy nó là khá vô dụng;)

Tôi hy vọng rằng giúp

+0

Tôi đã thử với player.prepare() nhưng nó không tạo ra bất kỳ sự khác biệt nào. Vẫn không phát âm thanh. Tôi đã lưu trữ khối lượng luồng tới một biến được sử dụng sau này trong ứng dụng của mình, tôi đã tạm thời chuyển nhượng nhiệm vụ để giúp gỡ lỗi. – James

19

Tôi không biết tại sao điều này sẽ xảy ra, tuy nhiên mã bên dưới công trình. Bạn nên đặt nguồn dữ liệu với setDataSource() thay vì bằng create().

Mã này hoạt động:

MediaPlayer mp = new MediaPlayer(); 
mp.setAudioStreamType(AudioManager.STREAM_ALARM); 
mp.setDataSource(this,Uri.parse("android.resource://PACKAGE_NAME/"+R.raw.soundfile)); 
mp.prepare(); 
mp.start(); 

này đang không công việc:

MediaPlayer mp = MediaPlayer.create(this, R.raw.soundfile); 
mp.setAudioStreamType(AudioManager.STREAM_ALARM); 
mp.prepare(); 
mp.start(); 
+1

tốt hơn để viết uri như: 'Uri.parse (" android.resource: // "+ mContext.getPackageName() +"/"+ R.raw.sound)' –

2

1. setAudioStreamType (int streamtype)

Phải gọi phương pháp này trước khi chuẩn bị ();

2. MediaPlayer.create (bối cảnh Bối cảnh, int resid)

Mở thành công, chuẩn bị() chắc chắn đã bị gọi và phải không được gọi một lần nữa.

3

Vấn đề là bạn đang sử dụng MediaPlayer.create() để tạo MediaPlayer của mình. Hàm Create gọi hàm prepare() để hoàn tất phương tiện của bạn và không cho phép bạn thay đổi AudioStreamType.

Các giải pháp được sử dụng setDataSource thay vì create:

MediaPlayer mp = new MediaPlayer(); 
mp.setAudioStreamType(AudioManager.STREAM_ALARM); 
mp.setLooping(true); 
try { 
    mp.setDataSource(getApplicationContext(), yourAudioUri); 
    mp.prepare(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
mp.start(); 

Xem this link để biết thêm thông tin.

Các vấn đề liên quan