我必须开发一个应用程序,在用户设置的特定时间发出弹出消息。
我将使用启动服务的android AlarmManager,该服务将使用OK按钮启动包含弹出界面的活动。
我想将数据传递给该活动,如何做到这一点(否则我将不得不查询数据库)?
此外,如果服务在我的应用程序中启动一个活动(而不是主活动),并且数据库处理函数在一个单独的类中,那么数据库是否可访问?
答案 0 :(得分:3)
当您将PendingIntent对象传递给AlarmManager.set方法时,您可以将所需的任何额外内容包含在待处理意图中的Intent对象中。例如:
Intent intent = new Intent(getApplicationContext(), YourService.class);
intent.putExtra("someKey", someData);
intent.putExtra("anotherKey", anotherData);
PendingIntent pi = PendingIntent.getService(getApplicationContext(), REQUEST_CODE, intent, FLAGS);
alarmManager.set....
然后,当服务启动时,您会收到相同的intent对象:
public void onStartCommand(Intent data, int startId, int flags) {
int data1 = data.getExtra("someKey");
}
从服务开始活动时,您也可以这样做:
Intent activityIntent = new Intent(getApplicationContext(), YourActivity.class);
intent.putExtra("key", data1);
事实上,如果您在服务中没有做任何特别的事情而是启动活动,为什么不在警报中设置活动的意图呢?