- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在谷歌的 C2DM 示例代码中,当在 BroadcastReceiver 中收到通知时,他们调用:
setResult(Activity.RESULT_OK, null/* data */, null/* extra */);
我不知道 setResult 的作用。这是他们在 Android 文档中所说的:
Change all of the result data returned from this broadcasts; only works with broadcasts sent through Context.sendOrderedBroadcast. All current result data is replaced by the value given to this method.
有人能解释一下他们的意思以及为什么我需要这样调用它吗?
完整代码:
public class C2DMBaseReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
C2DMReceiver.runIntentInService();
setResult(Activity.RESULT_OK, null /* data */, null /* extra */);
}
}
最佳答案
BroadcastReceiver
中的setResult(...)
方法,最重要的是用于跟踪目的。
如果你熟悉Activity
的方法setResult(...)
,你可以用同样的方式来思考广播中的这个方法。但是在 Activity 的情况下,不是像 onActivityResult(int requestCode, int resultCode, Intent data)
这样的回调方法,而是使用广播 setResult(...)
方法来按特定顺序跟踪广播结果,这就是为什么 documentation说:
Only works with broadcasts sent through Context.sendOrderedBroadcast. All current result data is replaced by the value given to this method.
这意味着您可以使用方法 getResultCode()
、getResultData()
或 getResultExtras()
来了解事情的进展在为处理您的广播而注册的所有不同 BroadcastReceiver
中执行 onReceive(Context, Intent)
方法期间。这样就可以知道在所有receiver上当前执行的代码之前调用的上一个BroadcastReceiver
中的代码执行结果。
它只说 Context.sendOrderedBroadcast()因为对 sendBroadcast(...)
方法的常规调用可能不会等待 1 个接收器完成其执行,然后再启动另一个线程以在其他接收器中执行代码,这些接收器也监听相同的 Intent 。
关于android - 为什么要在 BroadcastReceiver 中调用 setResult?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8990671/
在我的应用程序中,我在 list 文件中定义了 2 个 Activity ,如下所示: 在 MainActivity 中,我有 4 个 fragment 。在一个 fragment 中,我使用以下
使用 TaskCompletionSource.SetResult() 将在一个线程上创建的非线程安全对象传递给另一个线程是否安全? 例如在这个人为的例子中: using System; using
请注意:这里是 qt/c++ 新手 目的: 我有一个 QDialog,我想从中返回一个结果。我知道 QDialog::exec() 与 setResult 结合,导致使用 Accept() 或 Rej
这个问题在这里已经有了答案: Sending data back to the Main Activity in Android (13 个答案) 关闭 9 年前。 我创建了一个文件资源管理器和一个
我试图在我的“注册”按钮上设置结果,但没有任何反应: 登录 Activity : 为结果开始 Activity : Intent intent = RegisterActivity_.intent(t
我正在开发一个涉及两个 Activity 的测验应用程序:一个显示 Question 列表的 QuizActivity 和一个 QuestionActivity显示问题的详细信息(提示、选项等)。在
我已经使用 startActivityForResult 从父 Activity 开始了一个子 Activity 。在子 Activity 中执行所需的功能后,我使用 setResult 设置结果。但
我正在我的 Android 应用程序中实现 DeepLinking。假设我正在使用 PhonePe 付款并选择使用其他应用程序付款并选择我的应用程序。 Intent intent = new Inte
场景:我有一个 MainActivity.java、OtherPageForFragments.java 和一个位于 OtherPageForFragments.java 上的 fragment 在
我发现 TaskCompletionSource.SetResult(); 在返回之前调用等待任务的代码。就我而言,这会导致死锁。 这是在普通Thread中启动的简化版本 void ReceiverR
我有一个 Activity 保存 fragment (MainActivity.java) 在里面, fragment (ItemFragment.java) 有显示一些项目的 recyclervie
单击任何列表项时,我必须使用 setResult 转到父 Activity 。 list.setOnClickListener(new OnClickListener() {
我发起了一个电话 Activity 请求结果: Intent intentcall = new Intent(); intentcall.setAction(Intent.ACTION_CAL
我正在为 Android 创建一个基于 GPS 的应用程序,并且有 2 个 Activity Main 和 LocNames。 Main 显示我的 map ,LocNames 用于获取用户想要的来源和
好的,我又来了。还在学习。现在我需要在 2 个 Activity 中来回传递整数值。第一个 Activity 将计数器值传递给第二个 Activity (跟踪玩家统计数据)。第二个 Activity
在我的应用程序中,我需要启动 RecyclerAdapter.class 并等待结果,但我无法编写行 setResult 并完成: public static class MyViewHolder e
我有一个期望用户选择项目的 Activity ,但用户可以选择单击后退按钮而不选择项目。这个“项目选择” Activity 是从 startActivityForResult() 开始的。 我想知道两
在谷歌的 C2DM 示例代码中,当在 BroadcastReceiver 中收到通知时,他们调用: setResult(Activity.RESULT_OK, null/* data */, null
我有一个 Activity A - 它在 Viewpager 中包含 3 个 fragment 。 fragment 编号 1,是一个新闻文章列表,当用户从列表中选择一篇新闻文章时, Activity
最初我认为所有的延续都是在线程池上执行的(给定一个默认的同步上下文)。然而,当我使用 TaskCompletionSource 时,情况似乎并非如此。 我的代码看起来像这样: Task Foo() {
我是一名优秀的程序员,十分优秀!