Android отключение / включение телефона - PullRequest
21 голосов
/ 06 сентября 2011

Моя цель - поддержать 2 операции:

  • отключение звука телефона (возможно, с включенной / отключенной вибрацией), поэтому при получении вызова или смс он не издает шум

  • включить звук телефона и восстановить громкость до состояния перед тем, как отключить звук телефона

Как я могу это сделать? Какие разрешения требуются в AndroidManifest?

Ответы [ 3 ]

39 голосов
/ 06 сентября 2011

Это разрешение на вибрацию в файле манифеста

<uses-permission android:name="android.permission.VIBRATE" />

для перевода устройства в бесшумный режим с вибрацией

AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);

для перевода в режим звонка

AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_RING);

audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
audioManager.setStreamVolume(AudioManager.STREAM_RING, maxVolume, AudioManager.FLAG_SHOW_UI + AudioManager.FLAG_PLAY_SOUND);
18 голосов
/ 06 сентября 2011
public void changeRingerMode(Context context){

AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);

    /**
    * To Enable silent mode.....
    */
    audio.setRingerMode(AudioManager.RINGER_MODE_SILENT);

    /**
    * To Enable Ringer mode.....
    */
    audio.setRingerMode(AudioManager.RINGER_MODE_NORMAL);

}
0 голосов
/ 25 июля 2016

Если вы хотите отключить звук и восстановить настройку звука в предыдущее состояние, это работает для меня.

static int ringstate = 0;
private void soundOn(boolean off){
AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
   if(off)
    {   //turn off ringing/sound
     //get the current ringer mode
     ringstate = audio.getRingerMode();
     if(ringstate!=AudioManager.RINGER_MODE_SILENT)
      audio.setRingerMode(AudioManager.RINGER_MODE_SILENT);//turn off
    }
  else
  {
    //restore previous state
    audio.setRingerMode(ringstate);


  }

}

Это должно сделать.

...