2

メールに複数のファイルを添付したい。

まずUriのリストを準備しています。

void prepareListOfUri()
{
    listOfUri = new ArrayList<Uri>();
    File fileTemp = new File(android.os.Environment.getExternalStorageDirectory(), "BuyNowImages");
    fileTemp.mkdirs();

    for (int i = 0; i < listOfImageView.size(); i++)
    {
        try
        {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            Drawable drawable = listOfImageView.get(i).getDrawable();
            Bitmap bitmapPicked = ((BitmapDrawable) drawable).getBitmap();
            bitmapPicked.compress(CompressFormat.JPEG, 75, bos);
            byte[] image = bos.toByteArray();
            File file = new File(fileTemp, "buynow_product" + i + ".jpg");
            file.createNewFile();
            // write the bytes in file
            FileOutputStream fo = new FileOutputStream(file);
            fo.write(image);
            Uri uri = Uri.parse("file://" + file.getAbsolutePath());
            listOfUri.add(i, uri);
        } catch (Exception e)
        {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
}

メールの添付&送信用

void sendMultipleAttachments()
    {
        try
        {
            Intent intentEmail = new Intent(Intent.ACTION_SEND);
            intentEmail.setType("text/plain");
            String[] recipients = new String[] { "" };

            intentEmail.putExtra(Intent.EXTRA_EMAIL, recipients);
            intentEmail.putExtra(Intent.EXTRA_SUBJECT, "subject of email");
            intentEmail.putExtra(Intent.EXTRA_TEXT, "body of email");
            intentEmail.setType("image/jpeg");
            intentEmail.putParcelableArrayListExtra(Intent.EXTRA_STREAM, listOfUri);
            startActivity(intentEmail);
        } catch (android.content.ActivityNotFoundException ex)
        {
            Toast.makeText(this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
            ex.printStackTrace();
        } catch (Exception e)
        {
            e.printStackTrace();
            Toast.makeText(this, "Exception " + e.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }

各ファイルを個別に送信することにより、 のリストがUri完全に準備されていることを確認しました。しかし、上記のコードを使用して複数のファイルを送信すると、次のようになりますException

Key android.intent.extra.STREAM expected Parcelable but value was a java.util.ArrayList.  The default value <null> was returned.
4

3 に答える 3

7

Intent.ACTION_SEND私が使用する代わりにIntent.ACTION_SEND_MULTIPLE、それは機能しました。

開発者向けドキュメントから:

アクティビティアクション:複数のデータを他の人に配信します。と同様ACTION_SENDですが、データが複数ある点が異なります。

于 2012-10-04T05:02:01.860 に答える
0

if (AndroidUtil.isValidaEmail(email)) {

        Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);

        BitmapFactory.Options options = new BitmapFactory.Options();  
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;      
        Bitmap bmp = BitmapFactory.decodeByteArray(Produto.getTodosProdutos().get(0).getAnexo(), 0, Produto.getTodosProdutos().get(0).getAnexo().length, options); 

        String path = Images.Media.insertImage(getActivity().getContentResolver(), bmp,"title", null);
        Uri screenshotUri = Uri.parse(path);

        ArrayList<Uri> uris = new ArrayList<Uri>();

        uris.add(screenshotUri);            

        intent.putExtra(Intent.EXTRA_EMAIL, new String[] { emailRemetente });
        intent.putExtra(Intent.EXTRA_SUBJECT, assuntoMontado);
        intent.putExtra(Intent.EXTRA_TEXT, corpoGeralEmail);
        intent.putExtra(Intent.EXTRA_STREAM, uris);
        intent.setType("text/rfc822");
        startActivityForResult(Intent.createChooser(intent, "Choose an Email client :"), 0);

        isEnviado = true;

    }else{

        AndroidUtil.createDialog(getActivity(), R.style.DialogStyle, "Alerta", "Email invalido").show();

    }   
于 2015-08-12T18:01:00.253 に答える
0

インテント配列を使用して、インテントの配列と startActivity を使用できます。

于 2012-10-01T17:23:02.043 に答える