如何将数据从Service传递到Broadcastreceiver

时间:2014-04-01 09:06:19

标签: android android-intent

我通过这种方法从服务中调用广播接收器。

   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?

3 个答案:

答案 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;

试试这个。也告诉我。