2012-04-25 27 views
6

私がしようとしているのは、現在実行中のアクティビティにモーションイベントをディスパッチすることです。私は今、私はコンポーネント名を持っていることを、私はActivityクラスであるイベント現在実行中のアクティビティのインスタンスを取得しますか?

dispatchTouchEvent(MotionEvent ev) 

を派遣する、とやってみたい、このコード

ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 

// get the info from the currently running task 
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 

Log.d("current task :", "CURRENT Activity ::" + 
      taskInfo.get(0).topActivity.getClassName()); 

ComponentName componentInfo = taskInfo.get(0).topActivity; 

から現在の活動のコンポーネント名を持っていますこれは現在のアクティビティのインスタンスが必要です。私はコンポーネントの名前で立ち往生しています。イベントをディスパッチできるように、Activityインスタンスを取得するにはどうすればよいですか?

+1

次回にコードを書式設定する際にもう少し努力してください... –

答えて

7

うわー、この質問に間違ったことがたくさんあるので、どこから始めたらいいのですか?のが順序でそれらを見てみましょう:私が何をしようとしています何

がモーションイベントは現在ない限り、それはいけない、モーションイベントを取得する活動

現在のフォアグラウンド活動を実行するために派遣することです。私が想像することができる唯一の方法は、あなたのサービスがすべてのアプリの上にあるシステムウインドウを上げているということです。その場合、私はあなたにこれをしないで、あなたの前景アクティビティがイベントを処理します。

I)は

ActivityManager.getRunningTasks(このコードから現在の活動のコンポーネント名を持っているない通常のアプリケーション開発のためです。これは、タスクマネージャーなどのものを対象としています。この関数によって返される情報に依存するコアプログラムロジックを書くことは絶対に避けてください。それは問題を募集しています。実際、私はそのようなコードがある時点で破られることを保証することができます。 (複数のアプリケーションを同時に前に実行していることができたときはどうなりますか?)私は

あなたを本当にイベントを送出したい

、本当に1つの窓の外モーションイベントをリッピングするべきではありませんそれらを別のものに詰め込む。様々なディスパッチ状態は正しく設定されません。イベントの状態は一貫していません(イベントは元のウィンドウには設定されていますが、新しいウィンドウでは設定しません)。これは別のものですあなたがそれを今日でもまったく機能するようにすることができれば、将来的に中断する可能性の高い薄れたアプリケーションを作る素晴らしい方法です。

コンポーネント名がついています。どのようにしてイベントをディスパッチできるようにActivityインスタンスを取得できますか?

実際、コンポーネント名はすべて所有しています。それはアクティブなインスタンスとは関係ありません。これを実際のインスタンスに変える魔法の方法はありません。これは簡単に曖昧になる可能性があるため(インスタンス化されたクラスのインスタンスが2つある場合)、供給するのは間違いです。

私はあなたが実際に何を達成しようとしているのかを見直して、それに近づく合理的な方法について助けを求める必要があると思います。自分が得た道は、この時点でかなり終わりです。

+0

詳細な回答ありがとうございますが、これらのメソッドがAPIに含まれている理由は何ですか? – Ahmed

+0

booleanのようなメソッド\t dispatchGenericMotionEvent MotionEvent ev) ジェネリックモーションイベントを処理するために呼び出されます。 boolean \t dispatchKeyEvent(KeyEventイベント) キーイベントを処理するために呼び出されます。 boolean \t dispatchKeyShortcutEvent(KeyEventイベント) キーショートカットイベントを処理するために呼び出されます。 ブール値\t dispatchPopulateAccessibilityEvent(AccessibilityEventイベント) AccessibilityEventsの処理を呼び出すために呼び出されます。 boolean \t dispatchTouchEvent(MotionEvent ev) タッチスクリーンイベントを処理するために呼び出されます。 boolean \t dispatchTrackballEvent(MotionEvent ev) トラックボールイベントを処理するために呼び出されます。 – Ahmed

+1

基本的に私は、このメソッドがいつかアプリケーションをクラッシュさせることに興味がありません、あなたが言及しているこれらの特殊なケースにもかかわらず、実行状態でそれを作らなければなりません。 – Ahmed

関連する問題