gpt4 book ai didi

android - 在 Android 中使用 ResultReceiver

转载 作者:IT老高 更新时间:2023-10-28 13:23:10 39 4
gpt4 key购买 nike

基本上,我想从 IntentService 建立对 Activity 的回调。我的问题与此处回答的问题非常相似:

Restful API service

但是,在应答代码中, Activity 代码被视为实现 ResultReceiver。除非我遗漏了什么,否则 ResultReceiver 实际上是一个类,因此它无法执行此实现。

所以本质上,我在问将 ResultReceiver 连接到该服务的正确方法是什么。在这方面,我对 Handler 和 ResultReceiver 的概念感到困惑。任何工作示例代码将不胜感激。

最佳答案

  1. 你需要让自定义的resultreceiver类扩展自结果接收器

  2. 然后在你的activity中实现resultreceiver接口(interface)

  3. 将自定义resultreceiver对象传递给intentServiceintentservice 只是获取接收者对象并调用receiver.send() 函数将任何内容发送到调用 Activity bundle 对象。

    这里是 customResultReceiver 类:

     public class MyResultReceiver extends ResultReceiver {

    private Receiver mReceiver;

    public MyResultReceiver(Handler handler) {
    super(handler);
    // TODO Auto-generated constructor stub
    }

    public interface Receiver {
    public void onReceiveResult(int resultCode, Bundle resultData);

    }

    public void setReceiver(Receiver receiver) {
    mReceiver = receiver;
    }

    @Override
    protected void onReceiveResult(int resultCode, Bundle resultData) {

    if (mReceiver != null) {
    mReceiver.onReceiveResult(resultCode, resultData);
    }
    }

    }

在你的activity中实现Myresultreceiver.receiver接口(interface),创建一个类变量

Public MyResultReceiver mReceiver;

在 onCreate 中初始化这个变量:

mReceiver = new MyResultReceiver(new Handler());

mReceiver.setReceiver(this);

通过以下方式将此 mReceiver 传递给 intentService:

intent.putExtra("receiverTag", mReceiver);

并像这样在 IntentService 中获取:

ResultReceiver rec = intent.getParcelableExtra("receiverTag");

并使用 rec 将任何内容发送到 Activity :

Bundle b=new Bundle();
rec.send(0, b);

这将在 Activity 的 onReceiveResult 中接收。您可以在以下位置查看完整代码:IntentService: Providing data back to Activity

编辑:您应该在 onResume 中调用 setReceiver(this) 并在 onPause() 中调用 setReceiver(null) 以避免泄漏。

关于android - 在 Android 中使用 ResultReceiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4510974/

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