以编程方式关闭静音

时间:2011-06-11 15:31:57

标签: android

是否可以在来电时将呼叫振铃器关闭?

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

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

如上所述,我已将设置更改为ok,因此如果我接收到后续呼叫,则振铃器正常工作,但初始呼叫(触发设置更改)仍然继续以静音模式振铃...有没有办法到(在我设置振铃模式后)强制手机再次使用新设置“振铃”?

更新

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

        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)

有没有办法手动调用这些功能?

3 个答案:

答案 0 :(得分:0)

您可以考虑拨打电话的时间,您的应用程序开始播放默认铃声。有点hacky虽然

答案 1 :(得分:0)

我认为您可以制作一个能够感应来电的广播接收器,因此在其onReceive方法中您可以更改手机的设置,因此一旦您接到电话,此设置就会生效。

希望这项工作。

答案 2 :(得分:0)

查看AudioManager,它会显示如何使用它在您的应用程序中动态更改铃声类型的开发指南。

相关问题