gpt4 book ai didi

android - 为什么 Intent.createChooser() 需要 BroadcastReceiver 以及如何实现?

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

以下代码段是从我的 onOptionsItemSelected() 实现中调用的,它可以很好地将用户从我的应用程序带到一个邮件客户端,其中预填了电子邮件地址、主题和正文。我将此用作让用户给我反馈的简单方法。

String uriText =
"mailto:" + emailAddress +
"?subject=" + subject +
"&body=" + body;

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse(uriText));
startActivity(Intent.createChooser(emailIntent, "Pick an email app:"));

当邮件应用程序打开时(在我的 Nexus S 和 Android 4.0.4 上),LogCat 输出以下内容,我不明白为什么; Google 和 SO 搜索 createChooser unregisterReceiver 似乎没有结果,而且我找不到很多 createChooser() 的例子也调用了 unregisterReceiver()一种有助于这种情况的方法。

04-08 21:26:19.094: E/ActivityThread(27894): Activity com.android.internal.app.ChooserActivity has leaked IntentReceiver com.android.internal.app.ResolverActivity$1@4150aac8 that was originally registered here. Are you missing a call to unregisterReceiver()?

04-08 21:26:19.094: E/ActivityThread(27894): android.app.IntentReceiverLeaked: Activity com.android.internal.app.ChooserActivity has leaked IntentReceiver com.android.internal.app.ResolverActivity$1@4150aac8 that was originally registered here. Are you missing a call to unregisterReceiver()?

04-08 21:26:19.094: E/ActivityThread(27894): at android.app.LoadedApk$ReceiverDispatcher.(LoadedApk.java:763)

这感觉像是一个 Android 错误,因为我自己的代码没有调用 registerReceiver(),那么为什么 Android 会提示我需要调用 unregisterReceiver()

最佳答案

我在装有 4.0.4 的 Galaxy Nexus 上也看到了这一点,但前提是只有一个选项并且没有出现选择器。

这是 Android 源代码中的一个错误 - 您无能为力。他们的 ResolverActivity 注册了一个 BroadcastReceiver,但并不总是注销它。

更多细节:

Intent.createChooser() 将启动一个 ResolverActivity。在 onCreate() 中, Activity 调用

mPackageMonitor.register(this, false);

mPackageMonitor 是一个 BroadcastReceiver,在 register() 中它会在 Activity 中注册自己。通常,接收器在 onStop() 中注销。但是,稍后在 onCreate() 中,代码会检查用户可以选择的选项数量。如果只有一个,它会调用 finish()。由于 finish()onCreate() 中被调用,其他生命周期方法永远不会被调用,它直接跳转到 onDestroy() - 泄漏接收器.

我在 Android 问题数据库中没有看到这方面的错误,所以我 created one .

有关更多信息,您可以在代码中看到:

作为旁注,Google 使用电子邮件作为您不想使用选择器的示例,因此您可以考虑正常启动 Intent。请参阅 Intent#ACTION_CHOOSER 的 javadocs .

关于android - 为什么 Intent.createChooser() 需要 BroadcastReceiver 以及如何实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10068954/

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