【问题标题】:Programmatically switch off silent以编程方式关闭静音
【发布时间】:2011-06-11 15:31:56
【问题描述】:

是否可以在来电时将呼叫铃声关闭静音?

我可以将手机切换到普通模式并设置铃声的音量,但是因为之前手机处于静音状态,所以我更改设置后它不会开始响铃。

我正在做的是,当电话处于静音状态并且我接到来电时,根据某些条件我希望电话真正响铃。

如前所述,我已经更改了设置,所以如果我收到后续呼叫,振铃器会工作,但初始呼叫(触发设置更改)仍然继续以静音模式振铃...有没有办法(在我设置振铃模式后)强制手机再次使用新设置“振铃”?

更新:

我已将铃声设置为静音并使用以下设置以最大音量响铃:

        AudioManager mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE);

    int origionalVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_RING);
    int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_RING);

    mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
    mAudioManager.setStreamVolume(AudioManager.STREAM_RING, maxVolume, AudioManager.FLAG_SHOW_UI + AudioManager.FLAG_PLAY_SOUND);

我可以在日志中看到,当铃声实际播放时,它会注销:

06-13 19:22:33.984: DEBUG/CallNotifier(126): RINGING... (new)
06-13 19:22:33.984: DEBUG/CallNotifier(126): onNewRingingConnection():  incoming: true state: INCOMING post dial state: NOT_STARTED
06-13 19:22:34.094: INFO/ActivityManager(59): Start proc android.process.acore for content provider com.android.providers.contacts/.ContactsProvider2: pid=294 uid=10000 gids={3003, 1015}
06-13 19:22:34.444: INFO/ActivityThread(294): Publishing provider com.android.social: com.android.providers.contacts.SocialProvider
06-13 19:22:34.494: INFO/ActivityThread(294): Publishing provider applications: com.android.providers.applications.ApplicationsProvider
06-13 19:22:34.594: WARN/CallNotifier(126): CallerInfo query took too long; manually starting ringer
06-13 19:22:34.594: WARN/CallNotifier(126): CallerInfo query took too long; falling back to default ringtone
06-13 19:22:34.594: DEBUG/Ringer(126): ring()...
06-13 19:22:34.664: INFO/ActivityManager(59): Start proc com.android.settings for broadcast com.android.settings/.widget.SettingsAppWidgetProvider: pid=301 uid=1000 gids={3002, 3001, 3003}
06-13 19:22:34.684: DEBUG/Ringer(126): mRingHandler: PLAY_RING_ONCE...
06-13 19:22:34.684: DEBUG/Ringer(126): creating ringtone: content://settings/system/ringtone
06-13 19:22:34.734: INFO/ActivityManager(59): Starting activity: Intent { act=android.intent.action.MAIN flg=0x10840000 cmp=com.android.phone/.InCallScreen }
06-13 19:22:35.374: DEBUG/InCallScreen(126): onCreate()...  this = com.android.phone.InCallScreen@44f29ad0
06-13 19:22:35.504: INFO/ActivityThread(294): Publishing provider contacts;com.android.contacts: com.android.providers.contacts.ContactsProvider2
06-13 19:22:36.184: DEBUG/AudioHardwareInterface(34): setMode(RINGTONE)

有没有办法手动调用这些函数?

【问题讨论】:

    标签: android


    【解决方案1】:

    您可以考虑当电话被呼叫时,您的应用程序开始播放默认铃声。不过有点老套

    【讨论】:

    • 这是一种可能性,但正如你所说的那样,它很老套,所以除非万不得已,否则我不想这样做。如果我这样做,我可能必须跟踪通话状态并在接听电话时停止播放声音等,谢谢您的建议。
    • 不过合乎逻辑,我认为这是唯一的选择。当系统收到呼叫并将事件移交给应用程序时,我假设已经设置了通知方式,因此该呼叫将保持沉默。在这一切发生后,该应用程序正在启动。
    【解决方案2】:

    我认为你可以做一个广播接收器来感知来电,所以在它的onReceive方法中你可以改变你手机的设置,所以这个设置会在你来电时生效。

    希望这项工作。

    【讨论】:

      【解决方案3】:

      查看AudioManager,它向开发指南展示了如何使用它在应用程序中动态更改振铃类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-01
        • 2013-10-19
        • 2012-05-09
        • 1970-01-01
        • 2010-09-22
        • 2010-11-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多