я хочу получить широкий бросок, когда экран выключен в android. Я написал следующий код. Это код получателя.
@Override
public void onReceive(Context context, Intent intent) {
helper = new FeedReaderDBHelper(context);
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
System.out.println("Screen Off Receiver just received something");
if(helper.getValue(FeedReaderContract.FeedEntry.onlock).equals("YES"))
{
helper.lockAll();
wasScreenOn = false;
}
else if(helper.getValue(FeedReaderContract.FeedEntry.onLock3).equals("YES"))
{
System.out.println("Running 3 minutes thread");
Runner runner = new Runner(context);
Thread t = new Thread(runner);
t.setName("LockThreeThread");
t.start();
}
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
// and do whatever you need to do here
wasScreenOn = true;
}
}
Я регистрирую и отменяю регистрацию получателя в Службе. Код выглядит следующим образом.
Регистрационный приемник в методе onStartCommand
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
isScreenOn = pm.isScreenOn();
RegisterReceiver();
//Toast.makeText(getApplicationContext(), "Service Started", Toast.LENGTH_SHORT).show();
//System.out.println("StartRemove");
helper = new FeedReaderDBHelper(this);
names = helper.getNames();
Thread t = new Thread(new Runnable() {
@Override
public void run() {
startChecker();
}
});
t.start();
return START_STICKY;
}
И вот как я отменяю регистрацию в onDestroy метода обслуживания.
private void RegisterReceiver()
{
receiver = Factory.getScreeReceiver();
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
registerReceiver(receiver, filter);
}
Пожалуйста, дайте мне знать, что может быть проблемой. Я долго копался в этом. Последние два дня были потрачены на это. Кажется, ничего не работает.
Я думаю, что вы слишком усложняете это.
Это действие, которое вам понадобится
Это услуга
И это вещательный приемник
Я просто опробовал этот код, и ведение журнала работало хорошо.
Когда вы запускаете это через службу и запускаете новый поток для выполнения задания в методе onStartCommand (), обратите внимание, что поток будет запускаться каждый раз, когда вы вызываете onCreate() действия.
Надеюсь, это поможет