我试图让我的Android服务能够将更改发送回Activity,所以我试图只使用参数,因为一旦服务启动,Activity就没有任何内容。< / p>
这是我的.aidl文件:
oneway interface IMyServiceCallback {
void dataChanged(out double[] info);
void pathChanged(out List<ParcelableInfo> info);
}
我坚持如何从服务传递数据,以便将其发送到活动。
所以这是在我的服务中,但mCallback中没有任何内容允许我传入参数,然后将这些参数发送回活动。
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
关键字,因为所有通信都从服务流向活动。
答案 0 :(得分:1)
您的服务应通过在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();
}
您可以在API演示中找到完整的示例。