Intent.Action_Send和ShareCompat.IntentBuilder对话框缺少应用程序图标

时间:2014-03-11 18:26:25

标签: android

我有以下代码启动发送电子邮件的意图

@Override
public void onPostExecute(File outfile) {
    ProgressDialogRequestIcons d1 = (ProgressDialogRequestIcons) fm.findFragmentByTag("DIALOG_F2");
    d1.dialogDismiss();
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("text/plain");
    Uri uri = Uri.fromFile(outfile);
    intent.putExtra(Intent.EXTRA_STREAM, uri);
    intent.putExtra(Intent.EXTRA_EMAIL, new String[] { getString(R.string.app_email) });
    intent.putExtra(Intent.EXTRA_SUBJECT, "Icon Support for" + " " + this.getResources().getString(R.string.app_name));
    intent.putExtra(Intent.EXTRA_TEXT, "I am using " + Build.DEVICE + " with Android version " + Build.VERSION.RELEASE);
    this.startActivity(Intent.createChooser(intent, "Send eMail.."));
}

然而,当对话框弹出以选择要发送的应用程序时,显示时没有图标,而是

enter image description here

然后我尝试了另外一种方法如下,但仍然有同样的问题。

public void startEmailIntentWithPackage(File icon_request){
    try{
        ShareCompat.IntentBuilder.from(this)
                .setType("application/zip")
                .addStream(Uri.parse("file://" + icon_request.getAbsolutePath()))
                .addEmailTo(getString(R.string.app_email))
                .setSubject("Icon Support for" + " " + this.getResources().getString(R.string.app_name))
                .setText("I am using " + Build.DEVICE + " with Android version " + Build.VERSION.RELEASE)
                .setChooserTitle("Send Email..")
                .startChooser();
    }
    catch (Exception ignored)
    {
    }
}

1 个答案:

答案 0 :(得分:1)

AsyncTask的一个烦恼是默认情况下回到序列化执行,它在API级别13中认真开始。当库在内部使用AsyncTask时,这会变得更糟...他们自己使用executeOnExecutor()来选择加入一个线程池。

我的猜测是:

  • 您使用execute()启动任务
  • ShareCompat使用execute()启动另一项任务...然后阻止,直到第一项任务完成

解决方案要么:

  • 自己使用executeOnExecutor()
  • 使用普通Thread,特别是如果您不需要onPostExecute()onProgressUpdate()AsyncTask