gpt4 book ai didi

Android ResultReceiver 跨包

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:31:38 28 4
gpt4 key购买 nike

我在包 A (SignerClient) 中有一个 Activity ,在包 B (MyService) 中有一个服务

Activity 的结果接收者:

private ResultReceiver resultreceiver = new ResultReceiver(null) {
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
...
}
};

启动服务:

Intent intent = new Intent("com.example.STARTSERVICE");
intent.putExtra("resultreceiver", resultreceiver);
startService(intent);

接收端:

 ResultReceiver rr = (ResultReceiver) intent.getParcelableExtra("resultreceiver");

当客户端和服务器在同一个包中时执行此操作效果很好。但在这种情况下我得到:

FATAL EXCEPTION: IntentService[MyService]
android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.example.cryptoclient.SignerClient$1
at android.os.Parcel.readParcelable(Parcel.java:1883)
at android.os.Parcel.readValue(Parcel.java:1771)
at android.os.Parcel.readMapInternal(Parcel.java:2008)
at android.os.Bundle.unparcel(Bundle.java:208)
at android.os.Bundle.getParcelable(Bundle.java:1100)
at android.content.Intent.getParcelableExtra(Intent.java:3396)
at org.axades.service.MyService.onHandleIntent(MyService.java:28)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:59)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.os.HandlerThread.run(HandlerThread.java:60)

我错过了什么?我的想法是否可行?

最佳答案

我想跨包使用 ResultReceiver 并且必须加载其他包的上下文对我来说似乎不合适......毕竟,接收包不需要知道使用 ResultReceiver 的特定子类,它只需要能够调用 send() 并让 IPC 绑定(bind)器魔法发生。需要让特定的子类可用似乎是一个设计缺陷。

有一个解决方法:

public static ResultReceiver receiverForSending(ResultReceiver actualReceiver) {
Parcel parcel = Parcel.obtain();
actualReceiver.writeToParcel(parcel,0);
parcel.setDataPosition(0);
ResultReceiver receiverForSending = ResultReceiver.CREATOR.createFromParcel(parcel);
parcel.recycle();
return receiverForSending;
}

此代码将 ResultReceiver 的某个子类的实例转换为 ResultReceiver 本身的实例,尽管如此,它仍将结果发送到您的原始 actualReceiver . receiverForSending 可以在 Intent extra 中发送到另一个包,并且可以很好地解码。

关于Android ResultReceiver 跨包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5743485/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com