2012-10-23 28 views
7

Böylece, aygıtlarım 0/mute değerine ayarlanmış olsa bile 2.3 aygıtlarımda, SoundPool veya MediaPlayer ile tam ses düzeyinde bir ses çalabilirim. Cihaz seviyesini manuel olarak almanız ve bir ses çaldığınızda ayarlamanız gerektiğiydi.Aygıt ses düzeyi ne olursa olsun sesler çalma

Davranışın nasıl çalışacağını bu şekilde istiyorum.

Ancak, şimdi 4.0 cihazımda, seslerin otomatik olarak cihazın ayarlanmadığı seviyede ayarlandığını görüyorum!

Bu işletim sistemi sürümleri arasındaki fark nedir? Öyleyse, cihazların sesini görmezden gelmenin bir yolu var mı? Bu yüzden susturulmuş olsa bile, bir ses çalabilir ve duyulabilir miyim?

Bu özelliğe neden ihtiyaç duyduğuma giremiyorum, ama gerçekten gerçekten yapıyorum.

Teşekkürler!

+0

ben tür açıklamalıdır gerçekten sizin gibi hissediyorum. Benim için akla gelen tek şey, bir tür kayıp telefon bulma uygulaması. – cost

+0

Gerçekten yapamam. Bu proje için bir NDA imzaladım, ama önemli bir özellik. Bir sesin sistem ses düzeylerini görmezden gelmesi için zorlayamazsam, yapmam gereken bazı önemli tasarımlar yapıyorum. – romamnmlst

cevap

13

Bir alarm saati uygulaması için benzer bir ihtiyacım vardı. Sesle ilgili yorumlar içeren ilgili kod.

Ses akışı sessiz olarak ayarlandığında, ses akışı el ile sıfırlandığında ve zil sesi sıfıra ayarlandığında, HTC Rezound Android Sürüm 4.0.3 cihazımda çalışır.

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

Bunun için çok teşekkürler ... Mükemmel! – romamnmlst

+0

thnx bana çok zaman kazandırdı! – mhdjazmati

0

Ham klasörden müzik çalmak için kolay ve alternatif bir yol; Bu özelliği olması VAR neden

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(); 
    } 
İlgili konular