问题
寻找切换方法:
这些选择可以通过路径---菜单>>找到。设置>>声音>>振动---在电话上。
通过手机导航更改很简单(顺便说一下,我的手机是带有Android 2.3.3的摩托罗拉Atrix 2),但我还没有遇到过在我的代码中使用的方法。
代码
我基本上有按钮可以在点击时操纵振动设置。其中一个按钮如下所示:
bSilent.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);
audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_OFF);
Toast.makeText(getBaseContext(), "Set to Never", Toast.LENGTH_SHORT).show();
}
});
audioManager在此代码上方定义为:
final AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
Android提供AudioManager.setVibrateSetting,但现已弃用。相反,它们会引用您的getRingerMode方法。
http://developer.android.com/reference/android/media/AudioManager.html
但是,使用这些功能(以及它们的任意组合)不能在四个振动设置之间有效移动。例如,如果我从“始终”开始,我似乎不可能达到“从不”。振动方法的所有组合仅在“始终”和“仅在静音模式”之间移动。另一方面,如果我从“从不”开始,提供的方法只会在“从不”和“仅在不在静默模式下”之间切换。
因此,假设我想让手机处于静音模式并希望它振动。然后,我决定不再让它振动了。我无法从“始终”或“仅在静音模式”切换到“从不”。
过去的解决方案和帖子
我知道这在StackOverflow上有点重复。这个问题在......之前提出来了。
此处:Vibrate settings on Android 2.2
此处(最近):Changing vibrate setting
链接的前者提供了“答案”。 LuTHieR最终进行了讨论,并最终找到了自己的方法。他参考了网站:
并说“我查看了com.android.settings.Settings类的源代码,并复制了启用和禁用振动的部分方法”。
我大力浏览了这个网站,找不到他做了什么。任何人都可以澄清他的解决方案吗?
问题
有没有人能够在“始终”,“从不”,“仅在静音模式下”和“仅在不在静音模式下”之间精确切换?
答案 0 :(得分:0)
我的解决方案(具有所需振动设置的收入String sParam
的函数的路径,如果需要整数0-3则重构):
AudioManager audioManager = getSystemService( Context.AUDIO_SERVICE);
if( Build.VERSION.SDK_INT < 16)
{
// sParam may be:
// 0 - Always
// 1 - Never
// 2 - Only in silent mode (when sound is off)
// 3 - Only when not in silent mode (when sound is on)
if( (sParam.equals( "1") == true) || (sParam.equals( "3") == true))
{
Settings.System.putInt( Static.contextApplication.getContentResolver(), "vibrate_in_silent", 0);
if( sParam.equals( "1") == true)
audioManager.setVibrateSetting( AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);
if( sParam.equals( "3") == true)
audioManager.setVibrateSetting( AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON);
}
if( (sParam.equals( "0") == true) || (sParam.equals( "2") == true))
{
Settings.System.putInt( Static.contextApplication.getContentResolver(), "vibrate_in_silent", 1);
if( sParam.equals( "0") == true)
audioManager.setVibrateSetting( AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON);
if( sParam.equals( "2") == true)
audioManager.setVibrateSetting( AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT);
}
}
// else (for new SDK > 16 via setRingerMode() ??? )