如何查看设备是否具有振动功能?

38

我有一个设备,我不知道它是否有震动器。

有没有一种方法可以查询震动器的可用性?


这可能听起来很蠢,但如果你想了解某个特定设备的规格,难道不能在网上查一下吗? - Gaijinhunter
这个问题旨在记录一个相对较少知名的类。 ;) - Octavian Helm
@Octavian:你可能会对这个感兴趣。它导致了这个问题列表的产生。 - sbi
4个回答

31

Vibrator类就是这样。它的hasVibrator()方法返回一个布尔值,指示是否支持振动。

  1. 获取系统服务的Vibrator类的实例。
  2. 使用hasVibrator()方法查询Vibrator类。
String vs = Context.VIBRATOR_SERVICE;
Vibrator mVibrator = (Vibrator)getSystemService(vs);

boolean isVibrator = mVibrator.hasVibrator();

3
只有从API级别11(Android 3.0.x)开始才支持振动器功能。那么在API级别小于11的设备上如何检查是否支持振动器呢? - AmITheRWord
5
在Honeycomb之前的设备中是否有没有振动器的设备? - Octavian Helm
你会认为制造商应该知道他们的设备是否有振动器。我第一次尝试使用一个应用程序的振动功能,然后我注意到了这个问题。我不明白为什么会出现这种情况,所以我想寻找一个相当于11之前的方法,并偶然发现了这个问题。让我们开始讨论吧! :) - AmITheRWord
4
我桌子上就有这样一个设备——它运行着Gingerbread系统,但没有振动功能。拥有android.permission.VIBRATE权限的应用程序可以正常安装。 - David Given
1
如果设备不支持振动,那么从 getSystemService 返回的 Vibrator 是否为 null? - Adam Johns
显示剩余2条评论

9

对于API<11,以下内容可能会有所帮助:

Context.getSystemService() 返回一个服务对象或者null(如果没有服务)。

if ( getSystemService(VIBRATOR_SERVICE) != null ) {
    //Vibrator exists
}

0

在使用hasVibrator()之前,您需要支持(至少)Android 3.0(11 HoneyComb)。

奇怪的是,您可以在任何/所有版本上使用vibrate()本身。

因此,真正的问题是:v1-v10如何检测设备是否具有振动器? (或者如果您尝试在没有振动器的设备上振动,会发生什么不好的事情吗?)


8
我的真正问题就是我所问的。如果您有其他更具体的问题,请提出一个新问题。 - Octavian Helm

0
也许对某些人有所帮助。由于我正在构建PWA,最终我需要检查屏幕大小:
  if (window.innerWidth < 600) {
    window.navigator.vibrate(300);
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接