【发布时间】:2015-08-18 15:42:22
【问题描述】:
我只是想弄清楚服务、广播接收器和所有这些东西是如何工作的。
我写了一个接收器,当屏幕状态改变时触发。然后它会打开一个服务,该服务会打开一个放置在锁定屏幕上的 Activity。只要我的应用程序正在运行,它就可以正常工作,但是当我的应用程序死机时,传递给我的 BroadcastReceiver 的上下文为空。而且我无法将我的数据传输到服务,因为 Intent 也为空。
我希望有人知道如何解决这个问题。
我的代码如下所示:
启动服务的活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent service = new Intent(this,UpdateService.class);
startService(service);
setContentView(R.layout.activity_main);
}
服务:
public class UpdateService extends Service {
@Override
public void onCreate() {
super.onCreate();
// REGISTER RECEIVER THAT HANDLES SCREEN ON AND SCREEN OFF LOGIC
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver mReceiver = new ScreenReceiver();
registerReceiver(mReceiver, filter);
}
@Override
public int onStartCommand(Intent intent,int flags , int startId) {
boolean screenOn = intent.getBooleanExtra("screen_state", false);
if (!screenOn) {
// Screen is on
} else {
// Screen is off
Intent myIntent = new Intent(this,MyActivity.class);
// The Flag is important to open an Acitivy from the service.
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(myIntent);
}
return Service.START_STICKY;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
广播接收器:
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 intent2open;
intent2open = new Intent(context, UpdateService.class);
intent2open.putExtra("screen_state", screenOff);
context.startService(intent2open);
}
}
【问题讨论】:
-
只是问,但你打算如何在锁定屏幕上启动你的活动?
-
计划是,Service 使用以下代码行启动 Activity: Intent myIntent = new Intent(this,MyActivity.class); // 标志对于从服务中打开 Activity 很重要。 myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(myIntent);
标签: android android-intent service broadcastreceiver