在 Android API 19 (4.4) 上,intent.createChooser 方法会导致 IntentServiceLeak

2023-11-26

在新的 Android KitKat 设备(API 19、4.4)上运行我的应用程序时,每次尝试创建意图选择器时,我都会收到“已复制到剪贴板”的消息。这种情况发生在 Youtube、Tumblr 和 Android KitKat 上的各种其他应用程序上。查看日志我看到以下异常:

com.android.internal.app.ChooserActivity 已泄露 IntentReceiver com.android.internal.app.ResolverActivity$1@4150aac8

这曾经是当设备没有多个应用程序要意图使用时引起的问题(请参阅为什么Intent.createChooser()需要BroadcastReceiver以及如何实现?)。但是,我的设备上并非如此。 Android API 19 似乎有些问题。


这是我针对此问题的解决方案。我首先检测设备是否在 KIT_KAT 或更高版本上运行,并且我没有创建选择器,而是尝试启动意图。这将导致 Android 询问用户他们想要使用哪个应用程序来完成操作(除非用户已经拥有所有 ACTION_SEND 意图的默认值。

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
sendIntent.putExtra(Intent.EXTRA_TEXT, message);
sendIntent.setType("text/plain");

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    // This will open the "Complete action with" dialog if the user doesn't have a default app set.
    context.startActivity(sendIntent);
} else {
    context.startActivity(Intent.createChooser(sendIntent, "Share Via"));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android API 19 (4.4) 上,intent.createChooser 方法会导致 IntentServiceLeak 的相关文章

随机推荐