WedX - журнал о программировании и компьютерных науках

Как обнаружить сенсорные события вне представления в фоновой службе?

Я пытался обнаружить события касания в фоновой службе, чтобы я мог получать все события касания, когда пользователь использует какие-либо приложения.

Что я сделал, так это использовал WindowManager, чтобы добавить небольшой вид, и при запуске приложения в фоновом режиме этот маленький вид все еще может быть на экране. Я также установил представление как onTouchListener, поэтому, когда пользователь касается внутри представления, я могу получить событие касания.

Моя проблема в том, что есть ли способ обнаружить события касания за пределами этого небольшого представления.

Вот мой код.

public class GlobalTouchService extends Service implements View.OnTouchListener {


private WindowManager mWindowManager;
private WindowManager.LayoutParams mLayoutParams;
private MyView myView;
private boolean flag = true;
@Override
public IBinder onBind(Intent intent) {
    return null;
}

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

    mWindowManager = (WindowManager)getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
    mLayoutParams = new WindowManager.LayoutParams();
    mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
    mLayoutParams.format = PixelFormat.TRANSLUCENT;
    mLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
    mLayoutParams.x = 0;
    mLayoutParams.y = 0;
    mLayoutParams.height = 300;
    mLayoutParams.width = 300;

    myView = new MyView(this);
    myView.setOnTouchListener(this);

}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if (flag) {
        flag = false;
        mWindowManager.addView(myView, mLayoutParams);
    }
    return super.onStartCommand(intent, flags, startId);
}

@Override
public void onDestroy() {
    super.onDestroy();
}

@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
    float x = motionEvent.getRawX();
    float y = motionEvent.getRawY();
    Log.d("x,y", "X" + x + " Y" + y);

    return false;
}
10.03.2020

Ответы:


1

Вы не можете. Android явно не позволяет вам получать сенсорные события, когда вы не являетесь приложением переднего плана по соображениям безопасности. То, что вы пытаетесь сделать, явно противоречит тому, чего хочет ОС, и если вы найдете способ, Google заткнет дыру так же быстро, как вы ее найдете. Единственный способ сделать это — на корневом устройстве, что означает, что он не будет работать в магазине игр (и способ сделать это — прочитать сенсорные данные со слоя устройства Linux).

10.03.2020
  • Хорошо. Я попытаюсь прочитать сенсорные данные со слоя устройства Linux. Спасибо. 10.03.2020
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]