2017-05-05 6 views
1

Je travaille sur une petite application qui implique des vibrations, et chaque fois que la fonction vibrate() est appelée, l'application se bloque. La trace de pile renvoie à la ligne vibrator.vibrate() avec le texte "Vibrator: Failed to vibrate". vibreur. Il y a aussi un couple de DeadObjectExceptions et RuntimeExceptions qui tous les liens vers des classes Android. Cela n'arrive que sur certains téléphones, d'autres fonctionnent parfaitement.L'application se bloque lors de l'utilisation de Vibrator, même si hasVibrator() renvoie vrai

hasVibrator() renvoie true, et l'objet vibrateur est non nul, et le téléphone a un vibrateur, donc je ne peux pas comprendre ce qui ne va pas. Peut-être que j'essaie de vibrer trop tôt après que l'objet vibrateur a été créé, ou que je crée l'objet vibrateur trop tôt dans la méthode onCreate()?

Voici la partie du code où je suis en utilisant la méthode vibrate():

//vibrate only if exists 
if (vibrating) 
{ 
    long[] pattern = {0, power, target - power}; 
    try 
    { 
     vibrator.vibrate(pattern, 0); 
    } 
    catch (Exception e) 
    { 
     vibrating = false; 
    } 
} 
+0

-vous ennuierait affichant la pleine exception et le code? Je vous remercie. –

+0

@NewtronLabs Je n'ai pas accès à l'un des téléphones défaillants en ce moment, mais je vais l'ajouter demain quand je peux. – AtlasShrugging

Répondre

1

En supposant que vous utilisez getSystemService vous pouvez vous attendre pour obtenir le service ou null si la classe est pas un service de système pris en charge . Maintenant, puisque vous avez dit que vous obtenez certaines exceptions sur différents périphériques, vous pouvez attraper ces exceptions.

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

if(vibrator != null) 
{ 
    try 
    { 
     long[] pattern = { 0, 200, 500 }; 
     vibrator.vibrate(pattern, 0); 
    } 
    catch(DeadObjectExceptions e) 
    { 
     e.printStackTrace(); 
    } 
} 
+0

Je vérifie déjà une exception de couverture (je sais que ce n'est pas une bonne pratique, c'était juste pour tester) mais elle se bloque toujours. – AtlasShrugging

0

Ajouter la permission de vibrent dans votre AndroidManifest.xml

<uses-permission android:name="android.permission.VIBRATE"/>