Сервис для проверки текущего приложения переднего плана - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь создать службу, которая проверяет текущее приложение переднего плана, и выполнить задачу (сменить губернатора).У меня есть основное действие, и я хочу управлять включением / выключением сервиса с его помощью.

Класс обслуживания:

    @Override
protected void onHandleIntent(Intent intent) {
    Log.i(TAG, "Service started");
    ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);

    ActivityManager.RunningTaskInfo foregroundTaskInfo = am.getRunningTasks(1).get(0);


    //  to get the current foreground app
    String foregroundTaskPackageName = foregroundTaskInfo.topActivity.getPackageName();
    PackageManager pm = this.getPackageManager();
    try{
        PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(foregroundTaskPackageName, 0);
        String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString();
        Log.i(TAG,foregroundTaskAppName);
    }catch (Exception e) {
    }
}

В настоящее время он возвращает только приложение основного действия, икогда я нажимаю домой и открываю другое приложение, ничего не возвращается.Я не уверен, какой тип услуги будет более подходящим для такой задачи?Должен ли сервис быть в каком-то цикле?Я также пытался поиграть с использованием обычных сервисов и вызывать поток, но я думаю, что на самом деле я создаю больше потоков каждый раз, когда нажимаю «вкл», чтобы запустить свой сервис в своей основной деятельности.

Main:

    @Override
public void onClick(View v) {
    // default method for handling onClick Events..
    //  doesn't include show notification button --> done by OnClick of the button
    Intent serviceIntent = new Intent(this,GS_Service.class);
    switch (v.getId()) {
        case R.id.onService:
            startService(serviceIntent);
            break;

        case R.id.offService:
            stopService(serviceIntent);
            break;
...