2012-01-14 141 views
5

我想在我的应用程序中使用振动器方法,并且我的手机上有一个振动器非常棒。然而,没有振动器的电话会发生什么情况。它根本不起作用吗?它会停止应用程序的工作?或者它根本不在市场上出现?或者我必须问电话是否有振动器?Android:振动器方法(如果手机没有振动器?)

我也想知道这段代码是好还是需要调整?这里是我的代码..

Vibrator vi; 

vi = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 

vi.vibrate(100); 

<uses-permission android:name="android.permission.VIBRATE" /> (In manifest) 

谢谢,任何帮助将是伟大的。

回答

14

检查文档,http://developer.android.com/reference/android/os/Vibrator.html

所有你需要做的是检查是否有振动器出现在手机上,像这样:

Vibrator vi; 

vi = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 

if(vi.hasVibrator()){ 
    vi.vibrate(100); 
} 

由于振动权限的Android市场可以过滤的你应用程序只是手机振动。为了避免这种情况,你可以使用标签与所需= “假”

<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-feature android:name="there.isnt.a.vibrate.feature" android:required="false" /> 

这一切都在这里记录的属性:

http://developer.android.com/guide/topics/manifest/uses-permission-element.html

http://developer.android.com/guide/topics/manifest/uses-feature-element.html

无论其

没有振动特征字符串,因此Android Market 不会过滤您的应用程序,因为您正在使用振动许可。所以你可以使用uses-permission并在Java代码中进行检查。

设备需要振动器才能与Android市场兼容,但当然这不适用于亚马逊和其他应用市场(Barnes & Noble Nook没有振动)。

这是由戴安Hackthorn(在谷歌的Android铅DEV)备份回复此主题: http://groups.google.com/group/android-developers/browse_thread/thread/7713e796ea2d0f5f

+2

请注意'hasVibrator()'是在API Level 11中添加的。早于这个设备的设备大多都会有振动电机,尤其是如果他们(合法)拥有Android Market的话。 – CommonsWare 2012-01-14 16:15:23

+0

我已阅读文档,并没有提到这一点。我在API 7上运行,所以我不能使用“hasVibrator”,所以如果振动器不存在会发生什么。 – 2012-01-14 16:19:07

+1

它会被忽略,不会振动!你可以使用反射来调用这些设备的api lvl 11调用,取决于你想如何实现你的想法。 – Blundell 2012-01-14 16:24:43

2

它不工作?它会停止应用程序的工作?

您的振动请求应该被忽略。

还是它根本不在市场上出现?

您不能过滤市场上缺少振动电机的设备。因此,VIBRATE权限不是其中之一,其中if you ask for it imply a hardware feature

还是我必须问电话,如果它有一个振动器?

您可以在API Level 11及更高版本中查看Blundell的答案。

+0

因此,如果我在API 7上工作,我可以保留一切,因为它现在不会被过滤掉,而且手机应该只是在没有振动器的情况下将其忽略掉。 – 2012-01-14 16:25:38

+0

@JackTrowbridge:AFAIK,是的。 – CommonsWare 2012-01-14 16:29:56