我通过这种方法从服务中调用广播接收器。
Intent intent = new Intent(NotifyService.this, AlarmReciever.class);
intent.putExtra("TIME",ttime);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 34324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP,timee,pendingIntent);
在Broadcastreceiver页面中,我通过这种方法接收。
Bundle b = in.getExtras();
date = b.getString("TIME");
问题是在Broadcastreceiver页面我得到空值。 我的问题是: -
如何将数据从服务传递到broadcastreceiver?
答案 0 :(得分:2)
在您的主要活动中,以
开始您的服务i = new Intent(this, SimpleService.class);
startService(i);
registerReceiver(broadcastReceiver, new IntentFilter(SimpleService.BROADCAST_ACTION));
使用send broadcast将任何值从服务类发送到mainactiviy类
intent.putExtra("textval", s);
sendBroadcast(intent);
然后在您的主要活动类中接收它为
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//do your coding here using intent
}
};
答案 1 :(得分:0)
好吧我假设“ttime”是一个捆绑(从您编写的代码看起来似乎有意义)
尝试并接收这样的数据
Bundle b= in.getBundleExtra("TIME");
如果“tttime”是其他格式,比如说String或Int,你可以在Broadcastreceiver的onReceive中获取数据
字符串:
in.getStringExtra("TIME");
整数:
in.getIntExtra("TIME", -1) // -1 is default value which will be return incase no matching integer found with the key "TIME" in intent "in"
有关完整的详细信息以及如何从不同类型的意图中获取数据,请参阅android documentation
答案 2 :(得分:0)
你错过了这样做: -
Intent intent = new Intent(NotifyService.this, AlarmReciever.class);
sendBroadcast(intent);
您可以调用pendingIntent,如下所示: -
PendingIntent operation = PendingIntent.getBroadcast(Service.this,
0, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(),5* 60 * 1000, operation);
如果您将任何时间数据传递给广播类,那么您可以在接收器类中接收该数据
String mTime = NotifyService.time;
试试这个。也告诉我。