私はいくつかのオブジェクト(スプライト)が画面の周りを動くアプリを持っています。私は彼らが触れられた/クリックされたときに携帯電話を振動させたいが、私はいくつかの問題を抱えている。私がやったことは、以下に見られるように、私は(スプライトクラスで)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から取得していますものです。
おかげ
onCreate()の前にアクティビティで利用できないサービス wasItTouched()がonClickから呼び出され、onCreate()メソッドが実行される前にclickイベントを登録している可能性があります。 – rahul
私は実際に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
@emulus何か正しいとは限りません。ここでは、スプライトにwasItをタッチしていました。それはgetSystemServiceを呼び出すことです。つまり、コンテキスト(おそらくアクティビティ)である必要があります。その場合、クラス階層は完全に間違っています。そうでない場合、貼り付けたコードは実際に実行しているコードではありません。 –