如何使Android设备振动?

我写了一个Android应用程序。 现在,我想在发生某些操作时使设备振动。 我怎样才能做到这一点?

尝试:

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

注意:

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

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

授予振动许可

在开始实施任何振动代码之前,您必须为您的应用程序提供振动许可:

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

确保在你的AndroidManifest.xml文件中包含这一行。

导入振动库

大多数IDE会为你做这个,但是如果你不这样做的话,这里是import语句:

  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, eg '1' v.vibrate(pattern, 0); 

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

 v.cancel(); 

如何使用振动模式

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

 // 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"); } 

其次,请确保你已经给你的应用程序许可振动! 回头看看第一点。

我努力了解如何在我的第一个实现上做到这一点 – 确保你有以下几点:

1)您的设备支持振动(我的三星平板电脑不工作,所以我不断重新检查代码 – 原代码完美工作在我的CM触摸板

2)你已经在你的AndroidManifest.xml文件的应用程序级别之上声明了赋予代码运行权限。

3)将以下两者都导入到MainActivity.java中,同时导入其他导入:import android.content.Context; 导入android.os.Vibrator;

4)调用你的振动(在这个线程已经广泛讨论) – 我做了一个单独的function,并在其他点的代码调用这取决于你想用什么来调用振动,你可能需要一个图像( 安卓:长按一个button – >执行操作 )或button侦听器,或者是一个可定义在XML( Clickable image-android )中的可点击对象:

  public void vibrate(int duration) { Vibrator vibs = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); vibs.vibrate(duration); } 

以上答案是完美的。 然而,我想振作我的应用程序恰好两次点击button,这个小的信息是在这里失踪,因此发布像我这样的未来读者。 🙂

我们必须按照上面提到的那样进行,唯一的变化是振动模式如下,

 long[] pattern = {0, 100, 1000, 300}; v.vibrate(pattern, -1); //-1 is important 

这将完全振动两次。 由于我们已经知道0是为了延迟,所以第一次100为100MS振动,接下来是为了300MS再次振动1000MS的延迟。

人们可以继续提及延迟和振动交替(例如3次振动的0,100,1000,300,1000,300等等),但请记住戴维的话是非常负责任的。 🙂

此处还要注意重复参数设置为-1,这意味着振动将完全按照模式中提到的方式发生。 🙂

更新2017年振动(间隔)方法已弃用Android-O(API 8.0)

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

 // Vibrate for 150 milliseconds 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); } } 
 <uses-permission android:name="android.permission.VIBRATE"/> 

应该被添加到<manifest>标签和<application>标签之外。

上面的回答是非常正确的,但我正在做一个简单的步骤:

  private static final long[] THREE_CYCLES = new long[] { 100, 1000, 1000, 1000, 1000, 1000 }; public void longVibrate(View v) { vibrateMulti(THREE_CYCLES); } 

然后在你的xml文件中:

 <button android:layout_height="wrap_content" android:layout_width ="wrap_content" android:onclick ="longVibrate" android:text ="VibrateThrice"> </button> 

这是最简单的方法。

我使用下面的utils方法:

 public static final void vibratePhone(Context context, short vibrateMilliSeconds) { Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); vibrator.vibrate(vibrateMilliSeconds); } 

将以下权限添加到AndroidManifest文件

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

如果您希望使用上述build议的不同types的振动(模式/不确定),则可以使用超载方法。