TileService не работает, плитка перестает отвечать на запросы - PullRequest
0 голосов
/ 08 декабря 2018

Я сделал tileService, который запускает службу переднего плана при нажатии.Я взял разрешение на оптимизацию батареи из настроек и установил его не оптимизировать.Однако через 3 дня плитка перестает отвечать на запросы.

public class QSIntentService
    extends TileService {

String TAG = getClass().getSimpleName();
Context context;
boolean isTileActive;


@Override
public void onStartListening() {
    super.onStartListening();
    Log.e(TAG, "-----onStartListening Tile--");
    if (isServiceRunning(getApplicationContext())) {
        isTileActive = true;
        updateTile();
    } else {
        isTileActive = false;
        updateTile();
    }
}

@Override
public void onClick() {
    context = getApplicationContext();
    Log.e(TAG, "-----onClick --- ");

    Tile tile = getQsTile();
    isTileActive = (tile.getState() == Tile.STATE_ACTIVE);

    Intent serviceIntent = new Intent(context, 
ForegroundService.class);
    if (isServiceRunning(context)) {
        isTileActive = false;
        Utils.setBooleanFromPref(context, 
context.getString(R.string.widgetStop), true);
        if (ShareIBeaconInfo.INSTANCE.getForegroundService() != null) {
            ForegroundService foregroundService = 
ShareIBeaconInfo.INSTANCE.getForegroundService();
            if (foregroundService.scanDevice != null) {
                foregroundService.stopForegroundService();
            }
        }

        context.stopService(serviceIntent);
    } else {
        isTileActive = true;
        Utils.setBooleanFromPref(context, 
context.getString(R.string.widgetStop), false);
        Log.e(TAG, "service is not running");
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            Intent service = new Intent(context, 
ForegroundService.class);
            ContextCompat.startForegroundService(context, service);
        } else {
            Intent service = new Intent(context, ForegroundService.class);
            context.startService(service);
        }
    }
    updateTile();
}


private void updateTile() {
    Tile tile = super.getQsTile();
    int activeState = isTileActive ?
            Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;

    tile.setState(activeState);
    tile.updateTile();
}

private boolean isServiceRunning(Context context) {
    try {
        final ActivityManager manager;
        manager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
        for (ActivityManager.RunningServiceInfo service : manager
                .getRunningServices(Integer.MAX_VALUE)) {
            if ("com.foregroundscan.service.ForegroundService"
                    .equalsIgnoreCase(service.service.getClassName())) {
                return true;
            }
        }
    } catch (NullPointerException ex) {
    } catch (Exception e) {
    }
    return false;
}
}

Моим тестовым устройством является OnePlus 6T, работающий на Android 9. Также есть ли способ открыть диалоговое окно, если плитка не отвечает?Чтобы я мог перезапустить службу?

Я получил журнал, когда щелкаю плитку, когда она не отвечает

2-08 16:34:56.710 1831-2154/? E/MdmLogger: Cannot get tag from tileTag 
: Tile.CustomTile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...