如何使安卓设备振动?频率不同?授予振动权限导入振动库如何在给定时间内振动如何无限期振动如何使用振动模式更复杂的振动故障 排除

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


答案 1

尝试:

import android.os.Vibrator;
...
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 500 milliseconds
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    v.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE));
} else {
    //deprecated in API 26 
    v.vibrate(500);
}

注意:

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

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

答案 2

授予振动权限

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

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

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

导入振动库

大多数 IDE 会为您执行此操作,但如果您的 IDE 不这样做,则以下是导入语句:

 import android.os.Vibrator;

确保在您希望振动发生的活动中执行此操作。

如何在给定时间内振动

在大多数情况下,您需要在预定的短时间内振动设备。您可以使用该方法实现此目的。下面是一个简单示例:vibrate(long milliseconds)

// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// Vibrate for 400 milliseconds
v.vibrate(400);

就是这样,很简单!

如何无限期振动

可能是您希望设备无限期地继续振动的情况。为此,我们使用以下方法:vibrate(long[] pattern, int repeat)

// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// Start without a delay
// Vibrate for 100 milliseconds
// Sleep for 1000 milliseconds
long[] pattern = {0, 100, 1000};

// The '0' here means to repeat indefinitely
// '0' is actually the index at which the pattern keeps repeating from (the start)
// To repeat the pattern from any other point, you could increase the index, e.g. '1'
v.vibrate(pattern, 0);

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

v.cancel();

如何使用振动模式

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

// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// Start without a delay
// Each element then alternates between vibrate, sleep, vibrate, sleep...
long[] pattern = {0, 100, 1000, 300, 200, 100, 500, 200, 100};

// The '-1' here means to vibrate once, as '-1' is out of bounds in the pattern array
v.vibrate(pattern, -1);

更复杂的振动

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

故障 排除

如果您的设备不会振动,请先确保它可以振动:

// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

// Output yes if can vibrate, no otherwise
if (v.hasVibrator()) {
    Log.v("Can Vibrate", "YES");
} else {
    Log.v("Can Vibrate", "NO");
}

其次,请确保您已授予应用程序振动权限!请回顾第一点。


推荐