代码之家  ›  专栏  ›  技术社区  ›  luthier

Android 2.2上的振动设置

  •  1
  • luthier  · 技术社区  · 14 年前

    我正在制作一个振动切换小部件(事实上,它的第一个版本已经在市场上了),但是我在android2.2的振动设置上遇到了一些问题。

    am.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_OFF);
    am.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,AudioManager.VIBRATE_SETTING_OFF);
    

    同样的,但是 VIBRATE_SETTING_ON 在两条线路上打开它,它工作正常。

    然而,由于android2.2引入了“只在静默模式下振动”和“不在静默模式下振动”,我不知道如何让它工作。当振动设置为“总是”或“从不”时,没有问题,但只要用户手动将其设置为其他两个设置之一,应用程序就会开始做奇怪的事情。

    例如,如果我将其设置为“仅在静默模式下振动”,并通过我的小部件关闭振动,它将关闭,但当我重新打开时。。。它返回到“仅在静默模式”而不是“始终”。事实上,除非通过设置->声音,否则无法将其设置回“始终”,因此我猜振动模式的组合框正在执行我不知道的其他操作。这就像它将值存储在其他地方一样,因为即使我手动设置为“始终”,当我禁用它并通过小部件再次启用它(使用我之前发布的代码)时,它也会一直返回“仅在静默模式下振动”。

    更重要的是,AudioManager类中有一个值表示“仅在静默模式下”(VIBRATE\u SETTING\u Only\u silent),但当您将其设置为“仅在非静默模式下”时,它会使用VIBRATE\u SETTING\u ON,因此无法检测到它(据我所知,我的意思是)。

    希望我没有太混乱,但我想给所有可能的数据。所有的一切。。。

    重现问题(或至少其中一个问题)的步骤如下:

    • 通过小部件将振动设置为“从不”:

      setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);

    • 在“设置”菜单中选中“振动”设置为“从不”。

    • 通过小部件将振动设置为“始终”:

      setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON);

    2 回复  |  直到 12 年前
        1
  •  9
  •   magaio    14 年前

    当某个应用程序弄乱了nexusone的个人设置时,我不得不自己处理这些设置。它们在这里:

    总是在响铃时振动:

    setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON);
    

    切勿在戒指上振动:

    setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);
    

    只在无声的铃声中振动:

    setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT);
    

    通知时始终振动:

    setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_ON);
    

    setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_OFF);
    

    setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_ONLY_SILENT);
    

    Change ringer mode:

    AudioManager.setRingerMode( RINGER_MODE_NORMAL AudioManager.setRingerMode( RINGER_MODE_SILENT ); RINGER_MODE_VIBRATE );

    振动设置独立于振铃器设置。混乱随之而来。

        2
  •  1
  •   Vadim Kotov First Zero    7 年前

    好吧,我想我终于修好了。
    com.android.settings.Settings 初始化并复制启用和禁用振动的部分方法:
    https://android.googlesource.com/platform/packages/apps/Settings/+/master/src/com/android/settings/SoundSettings.java