如何从android上的电子邮件选择器中删除facebook,skype和Unnecessary选项

时间:2012-09-03 11:37:27

标签: android android-intent

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

  1. How to send recorded voice in email?
  2. Android Intent Chooser to only show E-mail option
  3. 正如我在上面的链接中所说,我尝试了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"));
    

    请帮帮我。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您有两种选择:

  • 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,并根据现有应用程序构建对话

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