5

我有一个带有 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 处理程序,有没有一种方法可以在那里实现触觉反馈?

当我点击我的一个按钮时,我所要做的就是在手机设置的“声音”部分中选中“声音选择”——根本不需要编码。为什么触觉反馈要复杂得多?

4

2 回答 2

10

未经许可VIBRATE

您可以使用performHapticFeedback()任何功能,View包括Button.

例如,在 Kotlin 中以编程方式:

view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)

这会使设备振动。

您可以从Fragment或中的任何位置振动设备Activity,即使您没有View可用的设备。

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

requireView().performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)

在活动中,您可以:

window.decorView.rootView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
于 2019-10-16T14:31:19.627 回答
8

创建一个VibrateButton继承自的自定义类Button,并添加此振动onClick。您仍然需要在 Manifest 中请求权限,因此如果没有继承,您将无能为力。此示例代码取自此处,并进行振动。

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 添加振动时,我愚蠢地浪费了几个小时;它没有振动模块。此外,请确保您可以禁用它,以延长电池续航时间。

于 2014-09-09T15:28:04.283 回答