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

ОДНАКО

Нет строки с функцией Vibrate, поэтому Android Market Не будет фильтровать ваше приложение, потому что вы используете виброзвонок. Таким образом, вы можете просто использовать использование-разрешение и выполнить проверку кода Java.

Приборы нуждаются в вибраторе для совместимости с рынком Android, но, конечно же, это не касается амазонки и других рынков приложений (Barnes & Noble Nook не имеет вибропоглощения).

Это подкреплено Дайан Hackthorn (Android ведущего разработчика в Google) ответа на эту тему: http://groups.google.com/group/android-developers/browse_thread/thread/7713e796ea2d0f5f

+2

Обратите внимание, что 'hasVibrator()' был добавлен в API Level 11. Устройства, более старые, в основном, имеют вибромоторы, особенно если они (на законных основаниях) имеют Android Market на них. – CommonsWare

+0

Я прочитал документ, и он ничего не говорит об этом. Я работаю на API 7, поэтому я не могу использовать «hasVibrator», поэтому, если вибратор отсутствует. –

+1

Это будет просто проигнорировано и не вибрирует! Вы можете использовать отражение для вызова вызова api lvl 11 для этих устройств, зависит от того, как вы хотите реализовать свои идеи. – Blundell

2

она не работает вообще? не работает ли приложение?

Ваш запрос вибрации должен просто игнорироваться.

или не появляется на рынке вообще?

Вы не можете отфильтровывать устройства с рынка, у которых отсутствует вибрационный двигатель. Следовательно, разрешение VIBRATE не является одним из тех, где if you ask for it imply a hardware feature.

или мне нужно спросить телефон, есть ли у него вибратор?

Вы можете на уровне API 11 и выше - см. Ответ Бланделла.

+0

Итак, если я работаю над API 7, я могу просто сохранить все, как сейчас, потому что он не будет отфильтрован на рынке, и телефон просто должен пропустить его, если у него нет вибратора? –

+0

@JackTrowbridge: AFAIK, да. – CommonsWare