2012-01-14 134 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