2012-10-23 45 views
7

Vì vậy, trên thiết bị 2,3 của tôi, tôi có thể phát âm thanh với SoundPool hoặc MediaPlayer ở mức âm lượng đầy đủ, ngay cả khi âm lượng thiết bị được đặt thành 0/tắt tiếng. Đó là sự hiểu biết của tôi rằng bạn phải tự thiết lập mức thiết bị và đặt nó khi bạn phát lại âm thanh.Phát âm thanh bất kể mức âm lượng thiết bị

Đây là cách tôi muốn hành vi hoạt động.

Tuy nhiên, bây giờ tôi nhận thấy trên thiết bị 4.0 của tôi, rằng âm thanh được tự động phát ở mức thiết lập của thiết bị mà tôi không muốn!

Đây có phải là sự khác biệt giữa các phiên bản của hệ điều hành không? Nếu vậy, có cách nào để bỏ qua khối lượng thiết bị không? Vì vậy, ngay cả khi nó được tắt tiếng, tôi có thể chơi một âm thanh và có nó được lắng nghe?

Tôi không thể hiểu tại sao tôi cần tính năng này, nhưng tôi thực sự thực sự làm.

Cảm ơn!

+0

Tôi cảm thấy như bạn thực sự nên giải thích lý do bạn CÓ tính năng này. Điều duy nhất mà đến với tâm trí đối với tôi là một số loại điện thoại bị mất vị trí ứng dụng. – cost

+0

Tôi thực sự không thể. Tôi đã ký một NDA cho dự án này, nhưng nó là một tính năng chính. Nếu tôi không thể buộc âm thanh bỏ qua các mức âm lượng hệ thống, tôi có một số thiết kế lại chính để thực hiện. – romamnmlst

Trả lời

13

Tôi có nhu cầu tương tự đối với ứng dụng đồng hồ báo thức. Đây là mã có liên quan với các nhận xét về khối lượng.

Tính năng này hoạt động trên HTC Rezound Android Version 4.0.3 khi cấu hình âm thanh được đặt ở chế độ im lặng, khi âm lượng báo thức được đặt thành 0 và khi âm lượng nhạc chuông được đặt thành 0.

Context context; 
    MediaPlayer mp; 
    AudioManager mAudioManager; 
    int userVolume; 


    public AlarmController(Context c) { // constructor for my alarm controller class 
     this.context = c; 
     mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 

     //remeber what the user's volume was set to before we change it. 
     userVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM); 

     mp = new MediaPlayer(); 
    } 
    public void playSound(String soundURI){ 

     Uri alarmSound = null; 
     Uri ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); 


     try{ 
      alarmSound = Uri.parse(soundURI); 
     }catch(Exception e){ 
      alarmSound = ringtoneUri; 
     } 
     finally{ 
      if(alarmSound == null){ 
       alarmSound = ringtoneUri; 
      } 
     } 



     try { 

      if(!mp.isPlaying()){ 
      mp.setDataSource(context, alarmSound); 
      mp.setAudioStreamType(AudioManager.STREAM_ALARM); 
      mp.setLooping(true); 
      mp.prepare(); 
      mp.start(); 
      } 


     } catch (IOException e) { 
      Toast.makeText(context, "Your alarm sound was unavailable.", Toast.LENGTH_LONG).show(); 

     } 
     // set the volume to what we want it to be. In this case it's max volume for the alarm stream. 
     mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), AudioManager.FLAG_PLAY_SOUND); 

    } 

    public void stopSound(){ 
// reset the volume to what it was before we changed it. 
     mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, userVolume, AudioManager.FLAG_PLAY_SOUND); 
     mp.stop(); 
     mp.reset(); 

    } 
    public void releasePlayer(){ 
     mp.release(); 
    } 
+0

Cảm ơn bạn rất nhiều vì điều này ... hoàn hảo! – romamnmlst

+0

thnx bạn đã cứu tôi rất nhiều thời gian! – mhdjazmati

0

Cách dễ dàng và thay thế để phát nhạc từ thư mục thô;

try { 
     String uri = "android.resource://" + getPackageName() + "/" + R.raw.beep; 
     //Strign uri = "http://bla-bla-bla.com/bla-bla.wav" 
     Uri notification = Uri.parse(uri); 
     Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification); 
     r.play(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
Các vấn đề liên quan