对Android中的触觉反馈感到困惑

时间:2014-09-09 15:16:43

标签: android

我有一个带9个按钮的Android应用。这个应用程序在2.36上运行,是设备上唯一的应用程序(或者至少是我们允许用户使用的唯一应用程序 - 我们将设备预装为我们销售的工业产品套件的一部分。)

所有按钮都转到同一个处理程序,并通过其标记进行排序。处理程序在XML中指定:

   <Button android:id="@+id/IdleButton"
     android:layout_marginLeft="5dp"
     android:background="@drawable/idle18pt_he_normal"
     android:hapticFeedbackEnabled="true"
     android:layout_width="92dp"
     android:layout_height="92dp"
     android:tag="0"
     android:onClick="theButtonHandler">
   </Button> 

当用户按下按钮时,我想启用触觉反馈,即振动。有没有办法在XML中执行此操作,或者如果没有,是否有办法在我的 onClick()处理程序中执行此操作?

我在Android上看到的针对触觉反馈的网络示例(例如,http://androidcookbook.com/Recipe.seam?recipeId=1242)似乎主要涉及对清单的更改,对XML的更改(您可以看到我已经启用)它在我的XML中,然后为按钮声明,初始化和实现一个单独的Touch处理程序。这似乎很多工作,特别是因为我有9个按钮。

由于我的所有按钮只有一个onClick处理程序,我可以在那里实现触觉反馈吗?

我需要做的就是点击&#34;点击&#34;当我点击我的一个按钮时发出的声音是勾选&#34; Audible selection&#34;在&#34;声音&#34;电话设置的一部分 - 根本没有编码。为什么触觉反馈变得如此复杂?

2 个答案:

答案 0 :(得分:5)

创建一个继承自VibrateButton的自定义Button类,并添加此振动onClick。你仍然需要在Manifest中要求权限,所以没有继承就没有什么可以做的。此示例代码采用from here,并进行振动。

import android.os.Vibrator;
...
Vibrator v = (Vibrator) this.context.getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 500 milliseconds
v.vibrate(500);
  

注意:

     

不要忘记在AndroidManifest.xml文件中包含权限:

<uses-permission android:name="android.permission.VIBRATE"/>

声音可以自动设置为按钮的原因,但振动不能,它要求允许振动的权限相同。振动消耗电池(方式不仅仅是简单的声音),因此它影响电池持续时间,这需要以某种方式由最终用户批准。如果你看到,在大多数情况下,某些特定按钮(主要是键盘应用程序)可以选择“点击振动”,但这取决于每个应用程序。

PS:确保设备可以振动。在为Nexus 7 2012添加振动时,我有几个小时愚蠢地丢失了;它还没有振动模块。此外,请确保您可以禁用它,以延长电池使用时间。

答案 1 :(得分:0)

未使用VIBRATE权限。

您可以使用任何performHapticFeedback(),包括View的{​​{1}}功能。

例如在Kotlin中以编程方式进行的操作

Button

这会使设备振动。

即使您没有view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS) ,也可以从FragmentActivity的任何位置振动设备。

在Fragment中,您可以执行以下操作:

View

在“活动”中,您要做的是:

requireView().performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)