将自定义意图从一个服务广播到另一个服务

时间:2015-03-24 09:27:27

标签: android android-intent android-service android-broadcast watch-face-api

我有两项服务。我需要使用来自一个服务的数据来广播自定义意图。在第二次服务中,我需要接收它。我试过以下:

在第一次服务中:

  public String ACTION_CHANGE_TIME_FORMAT = "com.example.agile.mywatchface.changetimeformat";

Intent timeFormatIntent = new Intent();
                    timeFormatIntent.putExtra("format", 12);
                    timeFormatIntent.setAction(ACTION_CHANGE_TIME_FORMAT);
                    LocalBroadcastManager.getInstance(this).sendBroadcast(timeFormatIntent);

在第二次服务中:

  public String ACTION_CHANGE_TIME_FORMAT = "com.example.agile.mywatchface.changetimeformat";

    public class TimeFormatReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d(MyPreferences.LOGCAT_TAG, "Time format Broadcast received: ");
            format = intent.getExtras().getInt("format", 0);
            updateTime();
        }
    }

我在第二次服务中正确注册和注册了接收者:

   IntentFilter timeFormatIntentFilter = new IntentFilter();
    timeFormatIntentFilter.addAction(ACTION_CHANGE_TIME_FORMAT);
    MyWatchfaceService.this.registerReceiver(timeFormatReceiver, timeFormatIntentFilter);

这里有什么不对吗?我无法获取数据(format)。

修改:onRecieve()没有打电话。

2 个答案:

答案 0 :(得分:0)

第二次服务:
format = intent.getExtras().getInt("format", 0);更改为format = intent.getIntExtra("format", 0);

intent.getExtras()将返回Bundle放置的Intent.putExtras(Bundle bundle),但您没有这样做。

答案 1 :(得分:0)

1_检查是否调用了onReceive()方法。如果没有,您的接收器仍然没有注册。

2_如果(1)没问题,请尝试int format = intent.getIntExtra("format", 0);

P / S:我不知道你在哪里使用“格式”变量,考虑将它用作局部变量并像参数一样传递它。

int format = intent.getIntExtra("format", 0);
updateTime(format)