下面的代码片段,从我实施所谓的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:"));
当邮件应用程序中打开(在与Android 4.0.4我的Nexus S),logcat的输出以下内容,我想不通为什么; 谷歌和SO为createChooser unregisterReceiver搜索似乎无果而终,我无法找到许多例子createChooser()
也叫unregisterReceiver()
的方式,帮助这种情况。
04-08 21:26:19.094:E / ActivityThread(27894):活动com.android.internal.app.ChooserActivity已泄漏,最初这里注册IntentReceiver com.android.internal.app.ResolverActivity$1@4150aac8。 你缺少unregisterReceiver()的调用?
04-08 21:26:19.094:E / ActivityThread(27894):android.app.IntentReceiverLeaked:活动com.android.internal.app.ChooserActivity已泄漏IntentReceiver com.android.internal.app.ResolverActivity$1@4150aac8该原本在这里注册。 你缺少unregisterReceiver()的调用?
04-08 21:26:19.094:E / ActivityThread(27894):在android.app.LoadedApk $ ReceiverDispatcher(LoadedApk.java:763)
这感觉就像一个Android的错误,因为我自己的代码不调用registerReceiver()
所以为什么Android的抱怨,我需要调用unregisterReceiver()
我看到这个问题,以及对我的Galaxy Nexus与4.0.4,但前提只有一个选项,并选择器不会出现。
这是Android的源中的错误 - 没有什么可以做的。 他们ResolverActivity注册一个BroadcastReceiver,但并不总是注销它。
更多详情:
Intent.createChooser()将启动一个ResolverActivity。 在的onCreate(),活动电话
mPackageMonitor.register(this, false);
mPackageMonitor是一个BroadcastReceiver和内register()
它自己注册上的活动。 通常情况下,接收机在注销onStop()
然而,在后来onCreate()
代码检查多少选项,用户可以从中选择。 如果只有一个调用finish()
由于finish()
中被调用onCreate()
的其他生命周期方法不会被调用,并直接跳转到onDestroy()
-泄漏的接收器。
我没有看到这个错误在Android问题数据库,所以我创建了一个 。
欲了解更多信息,你可以在代码中看到这一点:
- ResolverActivity
- PackageMonitor
作为一个侧面说明,谷歌使用电子邮件作为的时候,你不会想使用选择器,所以你可以考虑刚推出的意图通常是一个例子。 请参阅的javadoc 意向#ACTION_CHOOSER 。
问题简单解决。
更多资讯: https://developer.android.com/training/basics/intents/sending.html
Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
PackageManager pkManager = getPackageManager();
List<ResolveInfo> activities = pkManager.queryIntentActivities(mapIntent, 0);
if (activities.size() > 1) {
// Create and start the chooser
Intent chooser = Intent.createChooser(mapIntent, "Open with");
startActivity(chooser);
} else {
startActivity( mapIntent );
}
文章来源: Why does Intent.createChooser() need a BroadcastReceiver and how to implement?