我写了一个Android应用程序。现在,我想让设备在某个动作发生时震动。我该怎么做呢?
当前回答
Kotlin更新更类型安全
在项目的一些常见类(如Utils.kt)中使用它作为顶级函数
// Vibrates the device for 100 milliseconds.
fun vibrateDevice(context: Context) {
val vibrator = getSystemService(context, Vibrator::class.java)
vibrator?.let {
if (Build.VERSION.SDK_INT >= 26) {
it.vibrate(VibrationEffect.createOneShot(100, VibrationEffect.DEFAULT_AMPLITUDE))
} else {
@Suppress("DEPRECATION")
it.vibrate(100)
}
}
}
然后在代码中的任何地方调用它,如下所示:
vibrateDevice(requireContext())
解释
使用Vibrator::class.java比使用String常量更加类型安全。
我们使用let{}检查振动器的可空性,因为如果振动对设备不可用,振动器将为空。
在else子句中抑制弃用是可以的,因为警告来自较新的SDK。
我们不需要在运行时要求使用振动的许可。但是我们需要在AndroidManifest.xml中声明它,如下所示:
<uses-permission android:name="android.permission.VIBRATE"/>
其他回答
我使用下面的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"/>
你可以使用重载方法,如果你想使用不同类型的振动(模式/不定)如上所述。
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"/>
未经允许震动
如果你想简单地震动设备一次,以提供对用户操作的反馈。你可以使用视图的performHapticFeedback()函数。这并不需要在清单中声明VIBRATE许可。
在一些常见类(如Utils)中,使用以下函数作为顶级函数。项目Kt:
/**
* Vibrates the device. Used for providing feedback when the user performs an action.
*/
fun vibrate(view: View) {
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
}
然后在你的片段或活动的任何地方使用它,如下所示:
vibrate(requireView())
就这么简单!
你可以振动设备和它的工作
Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(100);
权限是必需的,但不需要运行时权限
<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>
这是最简单的方法。
推荐文章
- 禁用IntelliJ星(包)导入?
- 面试问题:检查一个字符串是否是另一个字符串的旋转
- 如何分配文本大小在sp值使用java代码
- 将文件加载为InputStream的不同方法
- Swift 'if let'语句等价于Kotlin
- Manifest合并失败:uses-sdk:minSdkVersion 14
- 到底是什么导致了堆栈溢出错误?
- 为什么Android工作室说“等待调试器”如果我不调试?
- Java:路径vs文件
- 如何检查我的EditText字段是否为空?
- Android从图库中选择图像
- 后台任务,进度对话框,方向改变-有任何100%工作的解决方案吗?
- ExecutorService,如何等待所有任务完成
- Android:垂直对齐多行EditText(文本区域)
- Maven依赖Servlet 3.0 API?