Member 12809980 Ответов: 0

Слушайте ACTION_SCREEN_on и ACTION_SCREEN_OFF


Все действительные ответы на этот вопрос либо устарели, либо были даны в 2012/2013 годах. Я следовал конкретно этому ответу: android: широковещательный приемник для включения и выключения экрана

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

Что я уже пробовал:

public class ScreenReceiver extends BroadcastReceiver {

private boolean screenOff;

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
        screenOff = true;
    } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
        screenOff = false;
    }
    Intent i = new Intent(context, BackgroundService.class);
    i.putExtra("screen_state", screenOff);
    context.startService(i);
}

public class BackgroundService extends Service{

private boolean isRunning;
private Context context;
private Thread backgroundThrad;

private BroadcastReceiver mScreenStateReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        boolean screenOn = intent.getBooleanExtra("screen_state",false);
        if(!screenOn){
            System.out.println("SCREEN OFF");
        }
        if(screenOn){
            System.out.println("CREEN ON");
        }
    }
};

@Override
public void onCreate() {
    this.context = this;
    this.isRunning = false;
    this.backgroundThrad = new Thread(myTask);

    // REGISTER RECEIVER THAT HANDLES SCREEN ON AND SCREEN OFF LOGIC
    IntentFilter screenStateFilter = new IntentFilter();
    screenStateFilter.addAction(Intent.ACTION_SCREEN_ON);
    screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF);
    registerReceiver(mScreenStateReceiver, screenStateFilter);
}

@Override
public void onDestroy() {
    unregisterReceiver(mScreenStateReceiver);
    this.isRunning = false;
}

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId){
    if(!this.isRunning){
        this.isRunning = true;
        this.backgroundThrad.start();
    }
    return START_STICKY;
}

private Runnable myTask = new Runnable() {
    @Override
    public void run() {
        System.out.println("THE BACKGROUND SERVICE IS RUNNING");
        stopSelf();
    }
};

}

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <service android:name=".BackgroundService"> </service>
</application>

0 Ответов