2011-09-06 106 views
20

我的目标是支持2个操作:的Android静音/取消静音电话

  • 静音电话(可能有震动的启用/禁用),所以当收到一个电话或短信也不会制造噪音

  • 取消静音电话和静音电话

我怎样才能做到这一点之前恢复卷的状态? AndroidManifest需要什么权限?

回答

36

这是权限振动到清单文件

<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); 
+0

谢谢,工作正常 –

+0

嘿Pratik,当收到电话时被调用哪种方法。我应该在哪里放置你的代码?谢谢! –

+0

@Rich您需要在设置屏幕中将设备默认的声音选项放入应用程序中,并且您可以按照这种方式或通过简单的方式创建相同的设置,只需通过管理它即可提供选项或选项。 – Pratik

17
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); 

} 
+1

谢谢,我希望我可以接受这两个答案 –

0

如果你想要的是禁用声音并将声音设置恢复到以前的状态,这对我有效。

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); 


    } 

} 

这应该做。