如何使Android设备振动?以不同的频率?

12 浏览
0 Comments

如何使Android设备振动?以不同的频率?

我写了一个Android应用程序。现在,我想在发生某个特定动作时让设备震动。我该怎么做?

0
0 Comments

如何使Android设备振动?

在Android O(API 8.0)中已弃用vibrate(interval)方法

为了支持所有Android版本,请使用此方法。

Java:

//振动150毫秒

private void shakeItBaby() {

if (Build.VERSION.SDK_INT >= 26) {

((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(VibrationEffect.createOneShot(150, VibrationEffect.DEFAULT_AMPLITUDE));

} else {

((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(150);

}

}

Kotlin:

//振动150毫秒

private fun shakeItBaby(context: Context) {

if (Build.VERSION.SDK_INT >= 26) {

(context.getSystemService(VIBRATOR_SERVICE) as Vibrator).vibrate(VibrationEffect.createOneShot(150, VibrationEffect.DEFAULT_AMPLITUDE))

} else {

(context.getSystemService(VIBRATOR_SERVICE) as Vibrator).vibrate(150)

}

}

我们不需要运行时权限来进行振动。振动不是一个危险权限,所以它只需要在清单文件中声明即可。

文档已经移动。将更新或删除它。

唯一需要补充的是,如果您在Activity中使用此方法且没有特定的Context变量,则应将getSystemService替换为this.getContext().getSystemService。

由于这个函数名,您赢得了一个点赞,谢谢。

0
0 Comments

如何使Android设备振动?以不同的频率

在开始实施任何振动代码之前,您必须给您的应用程序授予振动权限:

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

确保在AndroidManifest.xml文件中包含此行。

导入振动库

大多数集成开发环境(IDE)都会为您执行此操作,但如果您的IDE没有导入语句,请使用以下导入语句:

 import android.os.Vibrator;

请确保在您希望进行振动的活动中包含此语句。

如何按给定时间振动

在大多数情况下,您希望在设备上振动一小段预定时间。您可以使用vibrate(long milliseconds)方法来实现这一点。以下是一个快速示例:

// 从当前上下文获取Vibrator实例
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// 振动400毫秒
v.vibrate(400);

就是这样,很简单!

如何无限振动

可能有时您希望设备持续振动。为此,我们使用vibrate(long[] pattern, int repeat)方法:

// 从当前上下文获取Vibrator实例
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// 无延迟开始
// 振动100毫秒
// 休眠1000毫秒
long[] pattern = {0, 100, 1000};
// 这里的'0'表示无限重复
// '0'实际上是模式重复的起始位置的索引
// 要从任何其他点重复模式,可以增加索引,例如'1'
v.vibrate(pattern, 0);

当您准备停止振动时,只需调用cancel()方法:

v.cancel();

如何使用振动模式

如果您想要更特别的振动,可以尝试创建自己的振动模式:

// 从当前上下文获取Vibrator实例
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// 无延迟开始
// 每个元素交替振动,休眠,振动,休眠...
long[] pattern = {0, 100, 1000, 300, 200, 100, 500, 200, 100};
// 这里的'-1'表示只振动一次,因为'-1'超出了模式数组的范围
v.vibrate(pattern, -1);

更复杂的振动

有多个SDK提供更全面的触觉反馈。我使用的一个用于特殊效果的是Immersion的Android触觉开发平台

故障排除

如果您的设备无法振动,请首先确保它可以振动:

// 从当前上下文获取Vibrator实例
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// 如果可以振动,则输出yes;否则输出no
if (v.hasVibrator()) {
    Log.v("Can Vibrate", "YES");
} else {
    Log.v("Can Vibrate", "NO");
}

其次,请确保您已经给您的应用程序授予振动权限!请参考第一个要点。

很好的回答,但我要提醒在使用此功能时要负责任!

很棒的答案,但有一点。当你说“这里的'0'表示无限重复”时,虽然是正确的,但有点误导。这个数字是模式数组中模式重复时开始的索引。

很好的观点,但这超出了大多数人试图实现的范围。我选择了一个简单的解释 🙂

George Betsworth如何在手机静音模式下进行振动?请。

因为我必须强制关闭我的应用程序 🙂

它确实会无限重复模式,但是如何只振动3次,例如(即:开始+振动+休眠+振动+休眠+振动+停止)?!

阅读关于“如何使用振动模式”的部分。类似于:long[] pattern = {0, 100, 100, 100, 100, 100}; v.vibrate(pattern, -1);

immersion链接失效了,我在archive.org上找不到它 🙁

它在休眠和振动之间切换。不是反过来。

这在代码注释中提到。如果您错过了上一行的“无延迟开始”注释,那可能会令人困惑。如果是这样,我道歉。

如果您为Notification创建了NotificationChannel,请不要忘记卸载应用程序。否则,模式不会覆盖先前的振动模式。

- 是否有任何方法可以连续不间断地振动,而不是以特定的方式(如您上面描述的振动,延迟,振动,延迟...)?

0
0 Comments

在开发Android应用程序时,有时候需要让设备振动。下面的内容给出了如何让一个Android设备振动的方法,并且可以设置不同的振动频率。

首先,需要在AndroidManifest.xml文件中添加振动权限:


然后,可以使用以下代码来实现振动功能:

import android.os.Vibrator;
...
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// 振动500毫秒
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    v.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE));
} else {
    // 在API 26之前的版本中被弃用
    v.vibrate(500);
}

这段代码中,首先通过`getSystemService(Context.VIBRATOR_SERVICE)`获取到Vibrator对象。然后根据设备的API版本来判断使用不同的振动方法。在API 26及以上的版本中,可以使用`VibrationEffect.createOneShot()`方法来设置振动时间和振动强度;在API 26之前的版本中,可以直接使用`v.vibrate()`方法设置振动时间。

同时,还有一些相关的问题和解决方法:

- 如果遇到了"context cannot be resolved or is not a field"的错误,可能是因为没有正确引入Context类。可以尝试在代码中添加`Context context = getApplicationContext();`来解决这个问题。

- 使用上述方法进行振动时,如果手机处于省电模式并且没有连接电源,可能无法触发振动。这是为了节省电量的设计。

- 上述方法在API 26及以上的版本中已经被弃用,推荐使用`vibrate(VibrationEffect)`方法来代替。

总结起来,以上就是如何在Android设备上实现振动功能的方法。通过添加振动权限和使用Vibrator对象的相关方法,可以实现不同频率的设备振动。

0