如何使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的振动(模式/不确定),则可以使用超载方法。