这是我的东西:
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核心团队取而代之的是另一个神奇的决定吗?也许发射广播接收器会耗尽电量,是吗?
答案 0 :(得分:0)
我没有得到你的问题,但我得到你的许可问题的答案。
对于使用广播接收器,您始终需要授予AndroidManifest.xml权限,以便您可以收听接收器中的状态更改。还要在清单文件中注册您的接收器。
由以下人员添加:
<uses-permission android:name="android.permission.READ_PHONE_STATE" >
我希望这会有所帮助!!
答案 1 :(得分:0)
这是一个固件错误。
它无法在手机上运行,但在模拟器中运行正常。
去图。