2012-03-15 8 views
2

私はTYPE_SYSTEM_OVERLAYを作成しました。このオーバレイでserviceを使用して指/タッチイベントをキャプチャしたいと考えています。TYPE_SYSTEM_OVERLAY内のGestureDetector

オーバーレイは正常に動作しますが、問題は、GestureDetectorを組み込むときにタッチイベントをキャプチャできないことです。私は、画面をタップすると、誰もがどこ私に語った場合、トーストMSG「onDown」didntのショー..

は感謝します私はOverlayViewクラスのGestureDetector外にもありません結果を実装しようとしている:(間違っていたしました。

public class NUSLogService extends IntentService { 
     OverlayView mView; 

     @Override 
     public void onCreate() { 
      super.onCreate(); 

      final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
       WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
       WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, 
       PixelFormat.TRANSLUCENT); 

       params.gravity = Gravity.RIGHT | Gravity.BOTTOM; 
       params.setTitle("TouchLayer"); 
       mView = new OverlayView(getApplicationContext()); 

      final WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
       wm.addView(mView, params); 
     } 
    @Override 
    public void onDestroy() { 
      super.onDestroy(); 
      if(mView != null) 
      { 
      ((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(mView); 
      mView = null; 
      } 
     } 

    //self-created overlay class 
    class OverlayView extends ViewGroup implements OnGestureListener{ 

     private GestureDetector gestureScanner = new GestureDetector(this); 

     public OverlayView(Context context) { 
     super(context); 
     Toast.makeText(getContext(),"OverlayView", Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public boolean onTouchEvent(MotionEvent event) { 
    //  return super.onTouchEvent(event); 
      return gestureScanner.onTouchEvent(event); 
     } 

     @Override 
     protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) { 
     // TODO Auto-generated method stub   
     } 

     @Override 
     public boolean onDown(MotionEvent e) { 
     Toast.makeText(getContext(),"onDown", Toast.LENGTH_SHORT).show(); 
     return false; 
     } 
} 

答えて

2

まず、これはIntentServiceではありません。あなたの現在の実装では、onDestroy()onCreate()後にミリ秒または2と呼ばれます。

第二に、TYPE_SYSTEM_OVERLAYは、セキュリティのために、アンドロイド4.0のよう任意のタッチイベントを受け取ることができません理由s。

+0

お返事ありがとうございます。しかし、もし私がonTouchEvent'にトーストメッセージを入れたら、それは動作します。もし 'IntentService'を使うとそれは問題ですか? 私はアンドロイド2.2で実装していますので、今は大丈夫でしょうか? – star

+0

@star: "IntentServiceを使用するとどうですか?"もちろんそれは重要です。追加した直後にビューを削除しています。 – CommonsWare

+0

私はGestureDetectorを 'Service'を使って実装していますが、動作できません@ onTouchEvent()をオーバーライドしていますか?同じコードは 'Activity'を使って動作します..どのように私はサービスを使ってGestureDetectorを使うことができますか? – star