2017-04-24 5 views
0

私はいくつかのオブジェクト(スプライト)が画面の周りを動くアプリを持っています。私は彼らが触れられた/クリックされたときに携帯電話を振動させたいが、私はいくつかの問題を抱えている。私がやったことは、以下に見られるように、私は(スプライトクラスで)wasItTouched方法で働くだろうと思ったものを追加しましたwasItTouchedイベントで私のAndroid Appを振動させる

public boolean wasItTouched(float ex, float ey) { 
    boolean touched = false; 
    if ((x <= ex) && (ex < x + bmp_width) && 
      (y <= ey) && (ey < y + bmp_height)) { 
     touched = true; 

     Vibrator vibe = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
     vibe.vibrate(500); 
     //mySound.play(zapSoundId, 1, 1, 1, 0, 1); 


    } 

    return touched; 
} 

あなたはおそらく、私が追加しようとしたコメント "から見ることができるように音もそれはうまくいきませんでした。

私はそれを正しい場所に置いていないのだろうかと思う。私はマニフェストにそれを宣言した

(下記参照):

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

私は(そのことについては、画面上のどこか)スプライトをクリックして行くと、アプリがクラッシュします。誰もが、私が最も感謝される任意のガイダンスを提供することができる場合

04-24 17:32:56.192 7551-7551/cct.mad.lab D/AndroidRuntime: Shutting down VM 
04-24 17:32:56.192 7551-7551/cct.mad.lab W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xb0d7cb20) 
04-24 17:32:56.192 7551-7551/cct.mad.lab E/AndroidRuntime: FATAL EXCEPTION: main 
                 Process: cct.mad.lab, 
PID: 7551 
                 java.lang.IllegalStateException: System services not available to Activities before onCreate() 
                  at android.app.Activity.getSystemService(Activity.java:4532) 
                  at cct.mad.lab.Sprite.wasItTouched(Sprite.java:136) 
                  at cct.mad.lab.GameView.onTouchEvent(GameView.java:187) 
                  at android.view.View.dispatchTouchEvent(View.java:7706) 
                  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
                  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 
                  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
                  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 
                  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
                  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 
                  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 
                  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 
                  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068) 
                  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515) 
                  at android.app.Activity.dispatchTouchEvent(Activity.java:2458) 
                  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2016) 
                  at android.view.View.dispatchPointerEvent(View.java:7886) 
                  at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3954) 
                  at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3833) 
                  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399) 
                  at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449) 
                  at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418) 
                  at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3525) 
                  at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426) 
                  at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3582) 
                  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399) 
                  at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449) 
                  at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418) 
                  at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426) 
                  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399) 
                  at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5602) 
                  at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5582) 
                  at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5553) 
                  at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5682) 
                  at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 
                  at android.os.MessageQueue.nativePollOnce(Native Method) 
                  at android.os.MessageQueue.next(MessageQueue.java:138) 
                  at android.os.Looper.loop(Looper.java:123) 
                  at android.app.ActivityThread.main(ActivityThread.java:5017) 
                  at java.lang.reflect.Method.invokeNative(Native Method) 
                  at java.lang.reflect.Method.invoke(Method.java:515) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                  at dalvik.system.NativeStart.main(Native Method) 
04-24 17:32:56.192 1591-1711/system_process W/ActivityManager: Force finishing activity cct.mad.lab/.GameActivity 

:以下

は私がlogcatから取得していますものです。

おかげ

答えて

0

「のonCreate(前の活動に利用できないシステムサービス)」を

のonCreateが法的されていない、その活動に呼ばれる前に、何とかこれを呼んでいます。主なケースは、オブジェクトのinitの関数をデフォルト値として呼び出す場合、またはnewを介してアクティビティを作成しようとする場合(決して実行しないでください)です。

+0

onCreate()の前にアクティビティで利用できないサービス wasItTouched()がonClickから呼び出され、onCreate()メソッドが実行される前にclickイベントを登録している可能性があります。 – rahul

+0

私は実際にonClickを持っていません。パブリックブールonTouchEvent(MotionEventイベント){ \t \t IF(sprite.wasItTouched(event.getX()、event.getY())){ \t \t \tスプライト=私はGameViewクラスに以下の方法でMotionEventを有します新しいスプライト(これ); \t \t \t hitCount ++; \t \t \t return true; \t \t} else { \t \t \t return true; \t \t} \t} – emulus

+0

@emulus何か正しいとは限りません。ここでは、スプライトにwasItをタッチしていました。それはgetSystemServiceを呼び出すことです。つまり、コンテキスト(おそらくアクティビティ)である必要があります。その場合、クラス階層は完全に間違っています。そうでない場合、貼り付けたコードは実際に実行しているコードではありません。 –

関連する問題