将Lollipop置于静音模式/静音模式而非优先模式

时间:2015-05-10 16:45:59

标签: android

目前我正在使用以下功能将手机置于静音模式:

AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);

但我注意到在Lollipop中它将手机置于“优先模式”,通知栏顶部有一颗小星星。但我希望它是100%无声而不是“优先模式”。这可能吗?将Lollipop设置为100%无声?

我试图将setRingerMode设置为0,如此

audioManager.setRingerMode(0);

但是它仍然给了我明星而不是说话者通过它的线,它说在它下面用括号中的(优先级)振动。

3 个答案:

答案 0 :(得分:5)

在Android 5.0.X中,调用setRingerMode(RINGER_MODE_SILENT)将(i)触发"优先模式",这将(ii)随后触发将振铃模式更改回RINGER_MODE_NORMAL。

利用Android 5.0.X中的错误进行残酷的解决方法是在触发上述操作(ii)后的短时间内(比如500毫秒)再次发出setRingerMode(RINGER_MODE_SILENT)来电。但这当然不合适,应该停止在Android 5.1.X中工作。

在5.X中实现100%静音的正确方法是切换到"无"中断模式。这可以通过创建扩展NotificationListenerService的服务,注册它,并通过调用服务中的requestInterruptionFilter(INTERRUPTION_FILTER_NONE)来提供设置中断模式的功能来实现。 Here (Noyze app)就是一个例子。然后,您可以从活动中调用该功能以切换到该模式。

为此,您需要BIND_NOTIFICATION_LISTENER_SERVICE权限,以及用户明确授予通知访问权限。

警告:您可能知道INTERRUPTION_FILTER_NONE真的意味着100%沉默,闹钟将停止工作。

答案 1 :(得分:0)

Google已从棒棒糖中移除了静音模式。这里is the link to official android issue page

  

将设备设置为RINGER_MODE_SILENT会导致设备进入   新的优先模式。如果设置,设备将退出优先模式   到RINGER_MODE_NORMAL或RINGER_MODE_VIBRATE。

您详细了解here

答案 2 :(得分:0)

我已经通过调用setRingerMode(AudioManager.RINGER_MODE_SILENT)两次解决了这个问题,因为Lollipop首先将设备置于优先模式而不是静音模式。

final AudioManager audiomanage = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    audiomanage.setRingerMode(AudioManager.RINGER_MODE_SILENT);
    new Thread(new Runnable() {

        public void run() 
        {
            try 
            {
                Thread.sleep(100);
                audiomanage.setRingerMode(AudioManager.RINGER_MODE_SILENT);             
            } 
            catch (InterruptedException e) 
            {
                e.printStackTrace();
            }
        }
    }).start();