我制作了一个正在侦听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的第一种方法确实改变了振动的系统设置,但它不会影响当前正在进行的振动。
任何想法?
西蒙
答案 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);