2017-05-05 11 views
1

振動を伴う小さなアプリケーションで作業していて、vibrate()関数が呼び出されると、アプリケーションがクラッシュします。スタックトレースは、 "Vibrator:Failed to vibrate"というテキストでvibrator.vibrate()行に戻ります。バイブレータ。また、すべてのAndroidクラスにリンクするDeadObjectExceptionsRuntimeExceptionsのカップルがあります。これは一部の電話機でのみ発生し、他の電話機では完全に機能します。hasVibrator()がtrueを返すにもかかわらず、Vibratorを使用するとアプリケーションがクラッシュする

hasVibrator()返信trueバイブレーターオブジェクトはnullではなく、電話にはバイブレーターが付いているため、何が間違っているかわかりません。おそらく、私はバイブレータオブジェクトが作成されたあと、あまりにも早く振動しようとしていますか、またはonCreate()メソッドであまりにも早くバイブレータオブジェクトを作成していますか?ここで

は私がvibrate()メソッドを使用していたコードの一部です:

あなたはクラスがサポートされているシステムサービスではない場合は、サービスまたはnullを得ることを期待することができ getSystemServiceを使用していると仮定すると
//vibrate only if exists 
if (vibrating) 
{ 
    long[] pattern = {0, power, target - power}; 
    try 
    { 
     vibrator.vibrate(pattern, 0); 
    } 
    catch (Exception e) 
    { 
     vibrating = false; 
    } 
} 
+0

に振動する権限を追加しますか?ありがとうございました。 –

+0

@NewtronLabs私は失敗した携帯電話の1つにアクセスできませんが、明日はできる限りそれを追加します。 – AtlasShrugging

答えて

1

異なるデバイスで特定の例外が発生していると言われたので、その例外をキャッチすることができます。

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

私はすでにブランケット例外をチェックしています(これは良い練習ではないことが分かっていますが、テストのためだけだった)が、まだクラッシュしています。 – AtlasShrugging

0

あなたは完全な例外とコードを掲示いいです、あなたのAndroidManifest.xml

<uses-permission android:name="android.permission.VIBRATE"/> 
関連する問題