2013-08-18 6 views
0

Я создаю активность Android, которая запускает службу. Эта услуга предназначена для приема событий касания, даже если пользователь использует другое приложение. Его метод onCreate() заключается в следующем. общественного недействительный OnCreate() {Отправка событий касания к другому приложению

super.onCreate(); 
    // create linear layout 
    touchLayout = new LinearLayout(this); 
    // set layout width 30 px and height is equal to full screen 
    LayoutParams lp = new LayoutParams(30, LayoutParams.MATCH_PARENT); 
    touchLayout.setLayoutParams(lp); 
    // set color if you want layout visible on screen 
    //touchLayout.setBackgroundColor(Color.CYAN); 
    // set on touch listener 
    touchLayout.setOnTouchListener(this); 

    // fetch window manager object 
    mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 
    // set layout parameter of window manager 
    WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(
       //30, // width of layout 30 px 
      WindowManager.LayoutParams.MATCH_PARENT, 
       WindowManager.LayoutParams.MATCH_PARENT, // height is equal to full screen 
       WindowManager.LayoutParams.TYPE_PHONE, // Type Ohone, These are non-application windows providing user interaction with the phone (in particular incoming calls). 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE , // this window won't ever get key input focus 
       PixelFormat.TRANSLUCENT);  
    mParams.gravity = Gravity.LEFT | Gravity.TOP; 
    Log.i(TAG, "add View"); 

    mWindowManager.addView(touchLayout, mParams); 

} 

Выше я создаю окно, которые охватывают всю высоту и ширину экрана. Я установил его для прослушивания событий касания. Но при этом другие приложения получают прикосновение. Поэтому я ищу, чтобы отправить эти события касания, полученные на моем сервисе, в фоновое приложение, на котором расположено мое окно.

Пожалуйста, помогите!

ответ

0

Сандип,

Добавление вид наложения в оконный менеджер автоматически помещает эту точку зрения на вершине иерархии зрения, что окна, а это означает, что она будет перехватывать штрихи вместо представления (ы) позади него. Единственный способ просмотра событий, связанных с сенсорными событиями, заключается в том, чтобы пользователь касался внешнего вида (что невозможно, поскольку оно охватывает весь экран), или для представления сверху, чтобы обозначить себя «неприкасаемым».

Итак, ограничьте размер вашего представления или добавьте флажок WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE к вашим флагам params.

В любом случае, ПОКА В настоящее время пользователь не имеет ваше приложения на переднем плане, любые сенсорные события вне вашего зрения будет возвращать ACTION_OUTSIDE сенсорного событие, но без каких-либо координат на местоположении ощупи. (Если у пользователя есть приложение на переднем плане, то вы получите координаты со своими событиями ACTION_OUTSIDE.)

Смежные вопросы