【问题标题】:How to remove facebook,skype and Unnecessary option from email chooser on android如何从 android 上的电子邮件选择器中删除 facebook、skype 和不必要的选项
【发布时间】:2012-08-28 03:28:46
【问题描述】:

在我的应用程序中,我将 WAV 文件作为附件发送到电子邮件中。在显示电子邮件选择器时,Indent.createChooser 意图将列出电子邮件、gmail、facebook、skype、蓝牙和其他不必要的选项。我只想显示电子邮件和 Gmail 选项。我不知道如何去做? 在您提出可能重复的问题之前,我看到了以下链接,但它对我没有帮助。

  1. How to send recorded voice in email?
  2. Android Intent Chooser to only show E-mail option

如上述链接中所述,我已尝试过sendIntent.setType("audio/rfc822");。再次显示相同。

我的代码示例:

    Intent sendIntent = new Intent(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_SUBJECT, "xxxxxxxxxxxx");
    sendIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("file://" + f.getAbsolutePath())); 
    sendIntent.setType("audio/wav");
    startActivity(Intent.createChooser(sendIntent, "Email file"));

更新问题:

我已经实现了一个示例,其中列出了已安装的应用程序,然后单击列表视图上的项目,我将启动 Gmail / 电子邮件应用程序:上面写着“没有应用程序可以执行此操作”。

在列表视图中列出应用程序:

-----------------
List<PackageInfo> packs = packageManager.getInstalledPackages(0);
  for(int i = 0; i < packs.size(); i++) {
     PackageInfo p = packs.get(i);
     ApplicationInfo a = p.applicationInfo;
     if ((includeSysApps) && ((a.flags & ApplicationInfo.FLAG_SYSTEM) == 1)) {
        continue;
     }
     App app = new App();
     app.setTitle(p.applicationInfo.loadLabel(packageManager).toString());
     app.setPackageName(p.packageName);
     app.setVersionName(p.versionName);
     app.setVersionCode(p.versionCode);
     app.setInstallDir(p.applicationInfo.sourceDir);
     app.setInstallSize(calculateSize(app.getInstallDir()));
     CharSequence description = p.applicationInfo.loadDescription(packageManager);
     app.setDescription(description != null ? description.toString() : "");
     apps.add(app);
     -----------

在onclick项目事件中是:

                Intent sendIntent = new Intent(getPackageManager().getLaunchIntentForPackage(app.getPackageName()));
                sendIntent.putExtra(Intent.EXTRA_SUBJECT, "xxxxxxxxxxxx");
                sendIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("file://" + Environment.getExternalStorageDirectory().getPath()+"/Music/SalsaFav.mp3")); 
                sendIntent.setType("audio/wav");
                startActivity(Intent.createChooser(sendIntent, "Email file"));

请帮帮我。

【问题讨论】:

标签: android android-intent


【解决方案1】:

你有两个选择:

  • 使用 PackageManager 和 queryIntentActivities 函数,从中过滤并显示您自己的对话框

在这里,您可以获得可以实际处理您的 Intent 的应用程序:

Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "xxxxxxxxxxxx");
sendIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("file://" + f.getAbsolutePath())); 
sendIntent.setType("audio/wav");

// Get the Activities which can handle the Intent
List<ResolveInfo> resolveInfos = getPackageManager().queryIntentActivities(sendIntent, 0);

// Loop on your Activities, filter and construct your own list here
if (!resolveInfos.isEmpty()){
  for (ResolveInfo resolveInfo : resolveInfos) {
  // Filter here !

  }
}
  • 使用getApplicationInfo 向您自己查询 PackageManager 并使用已知包名称列表,并根据现有应用程序构建您的对话框

我认为第一个解决方案最符合您的需求

【讨论】:

  • 请查看我更新的问题。我已经实现了一个示例应用程序,其中列出了 listview 上所有已安装的应用程序,然后单击它打开应用程序的应用程序。但我得到“没有应用程序可以执行此操作”请帮助我。
  • 尝试将类型设置为“****/****”,您点击的应用似乎无法处理“audio/wav”
  • 您打算在错误的方面这样做。 Android有一个漂亮的Intent系统,当你用一个Intent启动Activty时,你基本上告诉他“获取所有可以处理这个的应用程序”。在您的示例中,您执行相反的操作,您告诉应用程序处理您不知道是否可以的 Intent。所以你必须抓住实际可以过滤这个列表的应用程序,我会更新我的答案给你看
【解决方案2】:

您可能需要创建自己的弹出式活动并将意图发送到该活动。 现在在该弹出活动中,您需要列出您喜欢的沟通渠道。在单击任何通信渠道时,您弹出的活动应启动相关活动。 您可以查看的其他内容是this 帖子,它将向您展示如何完成工作:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 2011-04-28
    • 1970-01-01
    • 2011-09-09
    • 2022-01-06
    • 2015-08-14
    • 2016-10-23
    相关资源
    最近更新 更多