在android中接收调用时停止系统振动

时间:2011-08-24 20:58:55

标签: android broadcastreceiver vibration

我制作了一个正在侦听PHONE_STATE变化的BroadcastReceiver。在onReceive方法中,我想关闭系统振动器。我尝试了不同的方法,但到目前为止还没有。

AudioManager audioManager = (AudioManager)ctx.getSystemService(Context.AUDIO_SERVICE);
systemVibration = audioManager.getVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER);
audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);

Vibrator vib = (Vibrator)ctx.getSystemService(Context.VIBRATOR_SERVICE);
vib.cancel();

System.putInt(ctx.getContentResolver(), System.VIBRATE_ON, 0);

或所有这些在一起。

AudioManager的第一种方法确实改变了振动的系统设置,但它不会影响当前正在进行的振动。

任何想法?

西蒙

2 个答案:

答案 0 :(得分:1)

在Android中不允许停止由其他进程启动的振动,因此这个hack可以停止振动,或者它会让你觉得它已经停止了振动。

long timea = System.currentTimeMillis(); 振动器v =(振动器)getSystemService(Context.VIBRATOR_SERVICE);

while((System.currentTimeMillis() - timea)< 15000){     v.vibrate(1);     尝试{         了Thread.sleep(10);     } catch(InterruptedException e){} }

答案 1 :(得分:0)

试试这个:(从Android Source借用和修改)

AudioManager am = Context.getSystemService(Context.AUDIO_SERVICE);
boolean vibeInSilent = false;
int callsVibrateSetting = AudioManager.VIBRATE_SETTING_OFF;

Settings.System.putInt(getContentResolver(), 
        Settings.System.VIBRATE_IN_SILENT,
        vibeInSilent ? 1 : 0);

//mAudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
//or (not sure which one will work)
//mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);

am.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
        callsVibrateSetting);