1

我试图让我的 Android 服务能够将更改发送回活动,所以我试图只使用参数,因为一旦服务启动,活动就没有任何内容。

这是我的 .aidl 文件:

oneway interface IMyServiceCallback {
    void dataChanged(out double[] info);
    void pathChanged(out List<ParcelableInfo> info);
}

我被困在如何从服务传递数据,以便将其发送到活动。

所以这是在我的服务中,但在 mCallback 中没有任何内容可以让我传入参数,然后将这些参数发送回 Activity。

private final IMyServiceCallback.Stub mCallback = new IMyServiceCallback.Stub() {

    @Override
    public void dataChanged(double[] info) throws RemoteException {
    }

    @Override
    public void pathChanged(List<ParcelableInfo> info) throws RemoteException {
    }

};

所以,我不确定如何调用mCallback.dataChanged()它会传回的位置new double[] { 1.0, 1.1};

在活动方面,我想做的是,因为我假设传入的参数是我想要从服务中获得的数据。

private IMyServiceCallback mCallback = new IMyServiceCallback.Stub() {
    @Override
    public void dataChanged(double[] info) throws RemoteException {
        mHandler.sendMessage(mHandler.obtainMessage(DATA_MSG, info));
    }

    @Override
    public void pathChanged(
            List<Parcelable> info)
            throws RemoteException {
        mHandler.sendMessage(mHandler.obtainMessage(PATH_MSG, info));
    }
};

oneway也使用关键字,因为所有通信都从服务流向活动。

4

1 回答 1

1

Your service should broadcast through all remote callbacks registered in binder:

private final RemoteCallbackList<IMyServiceCallback> remoteCallbacks = new RemoteCallbackList<IMyServiceCallback>();

private void sendNewData(final double[] info)
{
  final int n = remoteCallbacks.beginBroadcast();
  for (int i=0; i<n; i++)
  {
    final IMyServiceCallback callback = remoteCallbacks.getBroadcastItem(i);
    try
    {
      callback.dataChanged(info);
    } 
    catch (RemoteException e)
    {
      Log.e(TAG, "Broadcast error", e);
    }
  }
  remoteCallbacks.finishBroadcast();
}

You can find complete example in API demos.

于 2012-02-05T15:22:54.540 回答