我写了一个Android应用程序。现在,我想让设备在某个动作发生时震动。我该怎么做呢?
当前回答
已弃用VIBRATOR_SERVICE。
所以在SDK 31及以上使用VIBRATOR_MANAGER_SERVICE
确保你在AndroidManifest.xml中添加了这个权限
<uses-permission android:name="android.permission.VIBRATE"/>
Vibrator vibrator;
VibratorManager vibratorManager;
private static final long[] VIBRATE_PATTERN = {500, 500};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT>=31) {
vibratorManager = (VibratorManager) getSystemService(Context.VIBRATOR_MANAGER_SERVICE);
vibrator = vibratorManager.getDefaultVibrator();
}
else {
vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
}
if (Build.VERSION.SDK_INT >= 26) {
vibrator.vibrate(VibrationEffect.createWaveform(VIBRATE_PATTERN,0));
}
else {
vibrator.vibrate(VIBRATE_PATTERN,0);
}
}
其他回答
Try:
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"/>
上面的答案是非常正确的,但我给出了一个简单的步骤:
private static final long[] THREE_CYCLES = new long[] { 100, 1000, 1000, 1000, 1000, 1000 };
public void longVibrate(View v)
{
vibrateMulti(THREE_CYCLES);
}
private void vibrateMulti(long[] cycles) {
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new Notification();
notification.vibrate = cycles;
notificationManager.notify(0, notification);
}
然后在xml文件中:
<button android:layout_height="wrap_content"
android:layout_width ="wrap_content"
android:onclick ="longVibrate"
android:text ="VibrateThrice">
</button>
这是最简单的方法。
振动模式/波:
import android.os.Vibrator;
...
// Pause for 500ms, vibrate for 500ms, then start again
private static final long[] VIBRATE_PATTERN = { 500, 500 };
mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// API 26 and above
mVibrator.vibrate(VibrationEffect.createWaveform(VIBRATE_PATTERN, 0));
} else {
// Below API 26
mVibrator.vibrate(VIBRATE_PATTERN, 0);
}
Plus
AndroidManifest.xml中的必要权限:
<uses-permission android:name="android.permission.VIBRATE"/>
已弃用VIBRATOR_SERVICE。
所以在SDK 31及以上使用VIBRATOR_MANAGER_SERVICE
确保你在AndroidManifest.xml中添加了这个权限
<uses-permission android:name="android.permission.VIBRATE"/>
Vibrator vibrator;
VibratorManager vibratorManager;
private static final long[] VIBRATE_PATTERN = {500, 500};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT>=31) {
vibratorManager = (VibratorManager) getSystemService(Context.VIBRATOR_MANAGER_SERVICE);
vibrator = vibratorManager.getDefaultVibrator();
}
else {
vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
}
if (Build.VERSION.SDK_INT >= 26) {
vibrator.vibrate(VibrationEffect.createWaveform(VIBRATE_PATTERN,0));
}
else {
vibrator.vibrate(VIBRATE_PATTERN,0);
}
}
我努力理解如何做到这一点在我的第一个实现-确保你有以下:
1)您的设备支持振动(我的三星平板电脑不工作,所以我一直在重新检查代码-原始代码在我的CM Touchpad上完美地工作
2)你已经在AndroidManifest.xml文件中声明了应用程序级别以上的代码来允许运行。
3)在MainActivity.java中导入以下两个文件和其他导入文件: 进口android.content.Context; 进口android.os.Vibrator;
4)调用你的振动(在这个线程中已经广泛讨论了)-我在一个单独的函数中做了它,并在其他点的代码中调用它-取决于你想要使用什么来调用振动,你可能需要一个图像(Android:长时间单击按钮->执行动作)或按钮监听器,或XML中定义的可点击对象(clickable image - Android):
public void vibrate(int duration)
{
Vibrator vibs = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibs.vibrate(duration);
}
推荐文章
- 在maven中安装mvn到底做什么
- 在android中从上下文获取活动
- 不可变与不可修改的集合
- 如何在JSON中使用杰克逊更改字段名
- GSON -日期格式
- 如何从线程捕获异常
- 无法解析主机"<URL here>"没有与主机名关联的地址
- getActivity()在Fragment函数中返回null
- 如何在Java中打印二叉树图?
- 按钮背景是透明的
- String.format()在Java中格式化双重格式
- 在Mac OS X上哪里安装Android SDK ?
- 我如何获得图像缩放功能?
- 在Android应用程序中显示当前时间和日期
- com.jcraft.jsch.JSchException: UnknownHostKey