屏幕接收器广播不工作

Screen Receiver Broadcast not working

我想在 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);
}

请让我知道可能是什么问题。我已经研究了很长时间了。前两天都浪费在这上面了。似乎没有任何效果。

我认为你把这个复杂化了。 这是您

需要的 activity
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Intent startServiceIntent = new Intent(this, MyService.class);
    startService(startServiceIntent);

}

这是服务

public class MyService extends Service {
public MyService() {
}

@Override
public IBinder onBind(Intent intent) {
    // TODO: Return the communication channel to the service.
    throw new UnsupportedOperationException("Not yet implemented");
}


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.i("APP", "Service started");
    ScreenOffReceiver receiver = new ScreenOffReceiver();
    registerReceiver(receiver, new IntentFilter(Intent.ACTION_SCREEN_OFF));

    return START_STICKY;
}
}

这是广播接收器

public class ScreenOffReceiver extends BroadcastReceiver {
    public ScreenOffReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("APP", "EVENT occured");
    }
}

我刚刚试用了这段代码,日志记录工作正常。

当您通过服务启动它,并在 onStartCommand() 方法中启动一个新线程来完成工作时,请注意,每次您调用 [=25= 的 onCreate() 时线程都会启动].

希望对您有所帮助