2011-06-11 108 views
0

由于呼入呼叫,可以将呼叫振铃器切换为静音吗?以编程方式关闭无声

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

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

如上所述,我改变了设置好,所以如果我收到后续的电话振铃的作品,但初始的呼叫(这触发了设置的变化)仍然继续在无声模式下响铃...有没有方式(在我设置振铃模式后)强制手机再次用新设置“响铃”?

更新:

我已经设置的铃声关闭静音,并设置使用下面的最大volumne响:

 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 = [email protected] 
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) 

是否有办法根本手动调用这些函数?

回答

0

您可以考虑何时调用电话,您的应用程序开始播放默认铃声。虽然

+0

这是一种可能性,但正如你所说的那样,我不想那么做,除非它是最后的手段。如果我这样做,我可能不得不跟踪呼叫状态,并在电话接听等时停止播放声音,谢谢你的建议。 – FireEnigmaX 2011-06-11 16:42:10

+0

然而,只是合乎逻辑,我认为这是唯一的选择。当系统收到呼叫并将事件交给应用时,我认为已经设置了通知的方式,因此此呼叫将保持沉默。应用程序正在踢这一切发生。 – yoshi 2012-04-09 20:07:16

0

我认为你可以制作一个广播接收器来感应来电,所以在它的onReceive方法中,你可以改变你的电话设置,因此这个设置会在你接到电话后立即生效。

希望这项工作。

0

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