2012-01-14 15 views
5

Quiero usar el método de vibración en mi aplicación, y lo tengo funcionando en mi teléfono que tiene un vibrador que es genial. sin embargo, los teléfonos que no tienen un vibrador suceden. no funciona en absoluto? ¿detiene la aplicación? o no aparece en el mercado en absoluto? o tengo que preguntarle al teléfono si tiene un vibrador?Android: método de vibrador (si el teléfono no tiene vibrador?)

También me gustaría saber si este código es bueno o si necesita algún ajuste. aquí está mi código ...

Vibrator vi; 

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

vi.vibrate(100); 

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

Gracias, cualquier ayuda sería genial.

Respuesta

14

Comprobar la documentación, http://developer.android.com/reference/android/os/Vibrator.html

todo lo que tiene que hacer es comprobar si un vibrador está presente en el teléfono, así:

Vibrator vi; 

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

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

Debido a la autorización de vibración mercado de Android puede filtrar su aplicación solo para teléfonos con vibración. Para evitar esto se puede utilizar la etiqueta con el atributo de required = "false"

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

Todo está documentado aquí:

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

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

Sin embargo

No hay una cadena de características de Vibrate, por lo tanto Android Market No va a filtrar su aplicación porque está utilizando el permiso de vibración. Así que está bien solo usar use-permission y hacer la verificación en el código de Java.

Los dispositivos necesitan un vibrador para ser compatibles con el mercado de Android, pero, por supuesto, esto no es válido para Amazon y otros mercados de aplicaciones (Barnes & Noble Nook no tiene vib).

Esto está respaldado por Dianne Hackthorn (dev plomo en Android de Google) Responder a este tema: http://groups.google.com/group/android-developers/browse_thread/thread/7713e796ea2d0f5f

+2

Tenga en cuenta que 'hasVibrator()' se agregó en el nivel 11 de la API. Los dispositivos más antiguos que la mayoría tendrán motores de vibración, especialmente si tienen (legítimamente) Android Market en ellos. – CommonsWare

+0

He leído el documento y no dice nada al respecto. Estoy corriendo en la API 7, así que no puedo usar "hasVibrator", así que, ¿qué pasa si el vibrador no está presente? –

+1

¡Simplemente se ignorará y no vibrará! Puede usar reflection para invocar la llamada api lvl 11 para esos dispositivos, depende de cómo quiera implementar sus ideas. – Blundell

2

qué no funciona en absoluto? ¿detiene la aplicación?

Simplemente debe ignorar su solicitud de vibración.

o no aparece en el mercado en absoluto?

No se pueden filtrar los dispositivos del mercado que carecen de un motor de vibración. Por lo tanto, el permiso VIBRATE no es uno de aquellos en los que if you ask for it imply a hardware feature.

o tengo que preguntarle al teléfono si tiene un vibrador?

Puede, en API Nivel 11 y superior - ver la respuesta de Blundell.

+0

Entonces, si estoy trabajando en API 7, puedo mantener todo como lo tengo ahora, porque no se filtrará en el mercado y el teléfono simplemente debería perderlo si no tiene un vibrador. –

+0

@JackTrowbridge: AFAIK, sí. – CommonsWare

Cuestiones relacionadas