SCREEN_OFF广播接收器未在单独的进程中在服务内部触发

时间:2017-02-17 21:20:54

标签: android broadcastreceiver

这是我的东西:

public class NotificationSystem extends Service implements Runnable {

    private final Thread worker = new Thread(this);
    private boolean alreadyRunning = false;

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

    @Override
    public void onCreate() {
        super.onCreate();
        IntentFilter filter = new IntentFilter();
        ScreenManager screenManager = new ScreenManager();
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        registerReceiver(screenManager, filter);
    }

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

    @Override
    public void run() {

        while(true) {

            System.out.println("Thread doing stuff");

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }

    private static class ScreenManager extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            System.out.println("Screen is off");
        }
    }

}

当屏幕切换时,广播接收器永远不会触发,为什么?

如果服务中有广播接收器,是否会出现问题?清单中是否需要SCREEN_OFF来切换?

Android核心团队取而代之的是另一个神奇的决定吗?也许发射广播接收器会耗尽电量,是吗?

2 个答案:

答案 0 :(得分:0)

我没有得到你的问题,但我得到你的许可问题的答案。

对于使用广播接收器,您始终需要授予AndroidManifest.xml权限,以便您可以收听接收器中的状态更改。还要在清单文件中注册您的接收器。

由以下人员添加:

<uses-permission android:name="android.permission.READ_PHONE_STATE" >

我希望这会有所帮助!!

答案 1 :(得分:0)

这是一个固件错误。

它无法在手机上运行,​​但在模拟器中运行正常。

去图。