gpt4 book ai didi

java - 带有多个附件的 Android 电子邮件 Intent

转载 作者:行者123 更新时间:2023-12-01 19:50:12 25 4
gpt4 key购买 nike

我正在开发一个应用程序,用户可以在其中填写成绩单并通过选择的电子邮件客户端(在我的例子中为 Gmail)发送。除了文本之外,用户还需要能够附加一张或多张图像,但我似乎无法让它工作(完整的代码附在下面)。

下面是 onActivityResult,它将图像附加到 View 并将其 Uris 放入“userSelectedImageUriList”中。这似乎有效。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode==REQUEST_CODE_BROWSE_PICTURE)
{
if(resultCode==RESULT_OK)
{
// Get return image uri. If select the image from camera the uri like file:///storage/41B7-12F1/DCIM/Camera/IMG_20180211_095139.jpg
// If select the image from gallery the uri like content://media/external/images/media/1316970.
Uri fileUri = data.getData();

// Save user choose image file uri in list.
if(userSelectedImageUriList == null)
{
userSelectedImageUriList = new ArrayList<Uri>();
}
userSelectedImageUriList.add(fileUri);

// Create content resolver.
ContentResolver contentResolver = getContentResolver();

try {
// Open the file input stream by the uri.
InputStream inputStream = contentResolver.openInputStream(fileUri);

// Get the bitmap.
Bitmap imgBitmap = BitmapFactory.decodeStream(inputStream);

ImageView imageview = new ImageView(ReportCard.this);
LinearLayout linearLayout = (LinearLayout)findViewById(R.id.imageHolderLayout);
LinearLayout.LayoutParams params = new LinearLayout
.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

// Add image path from drawable folder.
imageview.setImageBitmap(imgBitmap);
imageview.setLayoutParams(params);
linearLayout.addView(imageview);

inputStream.close();
}catch(FileNotFoundException ex)
{
Log.e(TAG_BROWSE_PICTURE, ex.getMessage(), ex);
}catch(IOException ex)
{
Log.e(TAG_BROWSE_PICTURE, ex.getMessage(), ex);
}
}
}
}

接下来,当用户单击发送按钮时,我创建电子邮件 Intent 。

public void sendReport(Context context) {
EditText nameField = (EditText)findViewById(R.id.EditTextName);
EditText emailField = (EditText)findViewById(R.id.EditTextEmail);
EditText locationField = (EditText)findViewById(R.id.EditTextLocation);
EditText dateField = (EditText)findViewById(R.id.EditTextDate);
EditText bodyField = (EditText)findViewById(R.id.EditTextBody);

if(!nameField.getText().toString().matches("") && !emailField.getText().toString().matches("") && !locationField.getText().toString().matches("") && !dateField.getText().toString().matches("") && !bodyField.getText().toString().matches("")) {
PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().putString("report_email", emailField.getText().toString()).commit();
PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().putString("report_name", nameField.getText().toString()).commit();

String emailBody = "Name: "+nameField.getText()+"\n\n";
emailBody += "Location: "+locationField.getText()+"\n\n";
emailBody += "Time: "+dateField.getText()+"\n\n";
emailBody += "Description: "+bodyField.getText();

Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);

// set the type to 'email'
emailIntent.setType("text/plain");
String to[] = {emailField.getText().toString()};
emailIntent.putExtra(Intent.EXTRA_EMAIL, to);

// the attachment
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, userSelectedImageUriList);

// the mail
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Report");
emailIntent.putExtra(Intent.EXTRA_TEXT, emailBody);

startActivity(Intent.createChooser(emailIntent , "Send using..."));
finish();
} else {
Toast.makeText(this, getString(R.string.field_error), Toast.LENGTH_SHORT).show();
}
}

现在,事情到这里就停止了。显示选择器,但未附加图像。 Gmail 打开,但显示一个提示“无法附加文件”。

完整代码

ReportCard.java

package com.zaewin.reports;

import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;

public class ReportCard extends Activity {
long reportID;
long newRowId;
// Log tag that is used to distinguish log info.
private final static String TAG_BROWSE_PICTURE = "BROWSE_PICTURE";

// Used when request action Intent.ACTION_GET_CONTENT
private final static int REQUEST_CODE_BROWSE_PICTURE = 1;

// Used when request read external storage permission.
private final static int REQUEST_PERMISSION_READ_EXTERNAL = 2;

// Save user selected image uri list.
private ArrayList<Uri> userSelectedImageUriList = null;

// Currently displayed user selected image index in userSelectedImageUriList.
private int currentDisplayedUserSelectImageIndex = 0;

@Override
public void onBackPressed() {
saveReport(ReportCard.this);
finish();
}

// create an action bar button
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.reportmenu, menu);
return super.onCreateOptionsMenu(menu);
}

// handle button activities
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.deleteButton:
new AlertDialog.Builder(this)
.setTitle(R.string.delete)
.setMessage(R.string.delete_prompt)
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Bundle bundle = getIntent().getExtras();
Boolean deletestatus = deleteReport(getApplicationContext(), bundle.getInt("reportID"));

if(deletestatus == true) {
CharSequence text = getString(R.string.delete_success);
Toast toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT);
toast.show();
finish();
} else {
CharSequence text = getString(R.string.delete_fail);
Toast toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT);
toast.show();
}
}})
.setNegativeButton(android.R.string.no, null).show();
return true;

case R.id.saveButton:
saveReport(getApplicationContext());
return true;

case R.id.sendButton:
sendReport(getApplicationContext());
return true;

default:
// If we got here, the user's action was not recognized.
// Invoke the superclass to handle it.
return super.onOptionsItemSelected(item);

}
}

@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.report_view);
setTitle(R.string.report_card);

Bundle bundle = getIntent().getExtras();
if(bundle != null) {
reportID = bundle.getInt("reportID");
loadReport(reportID);
} else {
setDefaults();
}

final Button button = (Button) findViewById(R.id.buttonAddPicture);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Because camera app returned uri value is something like file:///storage/41B7-12F1/DCIM/Camera/IMG_20180211_095139.jpg
// So if show the camera image in image view, this app require below permission.
int readExternalStoragePermission = ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_EXTERNAL_STORAGE);
if(readExternalStoragePermission != PackageManager.PERMISSION_GRANTED)
{
String requirePermission[] = {Manifest.permission.READ_EXTERNAL_STORAGE};
ActivityCompat.requestPermissions(ReportCard.this, requirePermission, REQUEST_PERMISSION_READ_EXTERNAL);
}else {
openPictureGallery();
}
}
});
}

/* Invoke android os system file browser to select images. */
private void openPictureGallery()
{
// Create an intent.
Intent openAlbumIntent = new Intent();

// Only show images in the content chooser.
// If you want to select all type data then openAlbumIntent.setType("*/*");
// Must set type for the intent, otherwise there will throw android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.GET_CONTENT }
openAlbumIntent.setType("image/*");

// Set action, this action will invoke android os browse content app.
openAlbumIntent.setAction(Intent.ACTION_GET_CONTENT);

// Start the activity.
startActivityForResult(openAlbumIntent, REQUEST_CODE_BROWSE_PICTURE);
}

/* When the action Intent.ACTION_GET_CONTENT invoked app return, this method will be executed. */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode==REQUEST_CODE_BROWSE_PICTURE)
{
if(resultCode==RESULT_OK)
{
// Get return image uri. If select the image from camera the uri like file:///storage/41B7-12F1/DCIM/Camera/IMG_20180211_095139.jpg
// If select the image from gallery the uri like content://media/external/images/media/1316970.
Uri fileUri = data.getData();

// Save user choose image file uri in list.
if(userSelectedImageUriList == null)
{
userSelectedImageUriList = new ArrayList<Uri>();
}
userSelectedImageUriList.add(fileUri);

// Create content resolver.
ContentResolver contentResolver = getContentResolver();

try {
// Open the file input stream by the uri.
InputStream inputStream = contentResolver.openInputStream(fileUri);

// Get the bitmap.
Bitmap imgBitmap = BitmapFactory.decodeStream(inputStream);

ImageView imageview = new ImageView(ReportCard.this);
LinearLayout linearLayout = (LinearLayout)findViewById(R.id.imageHolderLayout);
LinearLayout.LayoutParams params = new LinearLayout
.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

// Add image path from drawable folder.
imageview.setImageBitmap(imgBitmap);
imageview.setLayoutParams(params);
linearLayout.addView(imageview);

inputStream.close();
}catch(FileNotFoundException ex)
{
Log.e(TAG_BROWSE_PICTURE, ex.getMessage(), ex);
}catch(IOException ex)
{
Log.e(TAG_BROWSE_PICTURE, ex.getMessage(), ex);
}
}
}
}

/* After user choose grant read external storage permission or not. */
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode==REQUEST_PERMISSION_READ_EXTERNAL)
{
if(grantResults.length > 0)
{
int grantResult = grantResults[0];
if(grantResult == PackageManager.PERMISSION_GRANTED)
{
// If user grant the permission then open choose image popup dialog.
openPictureGallery();
}else
{
Toast.makeText(getApplicationContext(), "You denied read external storage permission.", Toast.LENGTH_LONG).show();
}
}
}
}

public void setDefaults() {
EditText emailField = (EditText)findViewById(R.id.EditTextEmail);
emailField.setText(PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getString("report_email", ""), TextView.BufferType.EDITABLE);

EditText nameField = (EditText)findViewById(R.id.EditTextName);
nameField.setText(PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getString("report_name", ""), TextView.BufferType.EDITABLE);

Calendar c = Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
String formattedDate = df.format(c.getTime());

EditText dateField = (EditText)findViewById(R.id.EditTextDate);
dateField.setText(formattedDate, TextView.BufferType.EDITABLE);
}

public void loadReport(long reportID) {
ReportDbHelper mDbHelper = new ReportDbHelper(getBaseContext());
SQLiteDatabase db = mDbHelper.getReadableDatabase();

// Define a projection that specifies which columns from the database
// you will actually use after this query.
String[] projection = {
ReportContract.ReportEntry._ID,
ReportContract.ReportEntry.COLUMN_NAME,
ReportContract.ReportEntry.COLUMN_EMAIL,
ReportContract.ReportEntry.COLUMN_LOCATION,
ReportContract.ReportEntry.COLUMN_DATE,
ReportContract.ReportEntry.COLUMN_BODY
};

// Filter results WHERE "title" = 'My Title'
String selection = ReportContract.ReportEntry._ID + " = ?";
String[] selectionArgs = { Long.toString(reportID) };

// How you want the results sorted in the resulting Cursor
String sortOrder = ReportContract.ReportEntry.COLUMN_NAME + " DESC";

Cursor cursor = db.query(
ReportContract.ReportEntry.TABLE_NAME, // The table to query
projection, // The columns to return
selection, // The columns for the WHERE clause
selectionArgs, // The values for the WHERE clause
null, // don't group the rows
null, // don't filter by row groups
sortOrder // The sort order
);


//List itemIds = new ArrayList<>();
while(cursor.moveToNext()) {
EditText emailField = (EditText)findViewById(R.id.EditTextEmail);
emailField.setText(cursor.getString(cursor.getColumnIndexOrThrow(ReportContract.ReportEntry.COLUMN_EMAIL)), TextView.BufferType.EDITABLE);

EditText nameField = (EditText)findViewById(R.id.EditTextName);
nameField.setText(cursor.getString(cursor.getColumnIndexOrThrow(ReportContract.ReportEntry.COLUMN_NAME)), TextView.BufferType.EDITABLE);

EditText dateField = (EditText)findViewById(R.id.EditTextDate);
dateField.setText(cursor.getString(cursor.getColumnIndexOrThrow(ReportContract.ReportEntry.COLUMN_DATE)), TextView.BufferType.EDITABLE);

EditText locationField = (EditText)findViewById(R.id.EditTextLocation);
locationField.setText(cursor.getString(cursor.getColumnIndexOrThrow(ReportContract.ReportEntry.COLUMN_LOCATION)), TextView.BufferType.EDITABLE);

EditText bodyField = (EditText)findViewById(R.id.EditTextBody);
bodyField.setText(cursor.getString(cursor.getColumnIndexOrThrow(ReportContract.ReportEntry.COLUMN_BODY)), TextView.BufferType.EDITABLE);
}
cursor.close();
db.close();
}

public long saveReport(Context context) {
EditText nameField = (EditText)findViewById(R.id.EditTextName);
EditText emailField = (EditText)findViewById(R.id.EditTextEmail);
EditText locationField = (EditText)findViewById(R.id.EditTextLocation);
EditText dateField = (EditText)findViewById(R.id.EditTextDate);
EditText bodyField = (EditText)findViewById(R.id.EditTextBody);

ReportDbHelper mDbHelper = new ReportDbHelper(context);
SQLiteDatabase db = mDbHelper.getWritableDatabase();

// Create a new map of values, where column names are the keys
ContentValues values = new ContentValues();
values.put(ReportContract.ReportEntry.COLUMN_NAME, nameField.getText().toString());
values.put(ReportContract.ReportEntry.COLUMN_EMAIL, emailField.getText().toString());
values.put(ReportContract.ReportEntry.COLUMN_LOCATION, locationField.getText().toString());
values.put(ReportContract.ReportEntry.COLUMN_DATE, dateField.getText().toString());
values.put(ReportContract.ReportEntry.COLUMN_BODY, bodyField.getText().toString());

CharSequence text;
try {
if(reportID == 0) {
newRowId = db.insert(ReportContract.ReportEntry.TABLE_NAME, null, values);
text = getString(R.string.save_success);
} else {
String where = ReportContract.ReportEntry._ID + " = ?";
String[] whereArgs = new String[]{String.valueOf(reportID)};

newRowId = db.update(ReportContract.ReportEntry.TABLE_NAME, values, where, whereArgs);
text = getString(R.string.update_success);
}
Toast toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
toast.show();
//finish();
} catch(android.database.sqlite.SQLiteException ex) {
text = getString(R.string.save_error);
Toast toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
toast.show();
}
db.close();

return newRowId;
}

public boolean deleteReport(Context context, Integer reportID) {
ReportDbHelper mDbHelper = new ReportDbHelper(context);
SQLiteDatabase db = mDbHelper.getWritableDatabase();
Boolean status = db.delete(ReportContract.ReportEntry.TABLE_NAME, ReportContract.ReportEntry._ID + "=" + reportID, null) > 0;
db.close();
return status;
}

public void sendReport(Context context) {
EditText nameField = (EditText)findViewById(R.id.EditTextName);
EditText emailField = (EditText)findViewById(R.id.EditTextEmail);
EditText locationField = (EditText)findViewById(R.id.EditTextLocation);
EditText dateField = (EditText)findViewById(R.id.EditTextDate);
EditText bodyField = (EditText)findViewById(R.id.EditTextBody);

if(!nameField.getText().toString().matches("") && !emailField.getText().toString().matches("") && !locationField.getText().toString().matches("") && !dateField.getText().toString().matches("") && !bodyField.getText().toString().matches("")) {
PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().putString("report_email", emailField.getText().toString()).commit();
PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().putString("report_name", nameField.getText().toString()).commit();

String emailBody = "Ditt namn: "+nameField.getText()+"\n\n";
emailBody += "Plats: "+locationField.getText()+"\n\n";
emailBody += "Tidpunkt: "+dateField.getText()+"\n\n";
emailBody += "Beskrivning: "+bodyField.getText();

Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);

ArrayList<Uri> uris = new ArrayList<Uri>();
for (Uri file : userSelectedImageUriList)
{
File fileIn = new File(file.toString());
fileIn.setReadable(true, false);
Uri u = Uri.fromFile(fileIn);
uris.add(u);
}

// set the type to 'email'
emailIntent.setType("text/plain");
String to[] = {emailField.getText().toString()};
emailIntent.putExtra(Intent.EXTRA_EMAIL, to);

// the attachment
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);

// the mail
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Rapport från Hamnarbetarappen");
emailIntent.putExtra(Intent.EXTRA_TEXT, emailBody);

startActivity(Intent.createChooser(emailIntent , "Skicka med..."));
finish();
} else {
Toast.makeText(this, getString(R.string.field_error), Toast.LENGTH_SHORT).show();
}
}
}

report_view.xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ScrollView01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:scrollbars="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp">
<EditText
android:id="@+id/EditTextName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/report_name"
android:inputType="textPersonName" >
</EditText>
<EditText
android:id="@+id/EditTextEmail"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/report_email"
android:inputType="textEmailAddress" >
</EditText>
<EditText
android:id="@+id/EditTextLocation"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/report_location" >
</EditText>
<EditText
android:id="@+id/EditTextDate"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/report_date"
android:inputType="datetime" >
</EditText>
<EditText
android:id="@+id/EditTextBody"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/report_description"
android:inputType="textMultiLine"
android:lines="5" >
</EditText>
<LinearLayout
android:id="@+id/relativeLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="5dp">
<Button
android:id="@+id/buttonAddPicture"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/blue_button"
android:drawableRight="@drawable/ic_action_camera"
android:padding="10dp"
android:text="@string/report_takepicture"
android:textAlignment="center"
android:textColor="@color/actionbar_text" />
</LinearLayout>
<LinearLayout
android:id="@+id/imageHolderLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginBottom="5dp">
</LinearLayout>
</ScrollView>

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.zaewin.reports" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="22" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:required="true" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:required="true" />
<uses-permission android:name="android.permission.INTERNET" android:required="true"/>

<application android:theme="@style/CustomActionBarTheme" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:allowBackup="true">
<activity android:label="ReportCard" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" android:name=".ReportCard">
<meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".ReportList" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
</activity>
</application>
</manifest>

最佳答案

我已经解决了。选择图像后,它们将被放入 onActivityResult 中的 ArrayList“userSelectedImageUriList”中。

我只是将此列表添加到 Intent 中,而不是在 sendReport 方法中解析此列表。

工作方法如下:

public void sendReport(Context context) {
EditText nameField = (EditText)findViewById(R.id.EditTextName);
EditText emailField = (EditText)findViewById(R.id.EditTextEmail);
EditText locationField = (EditText)findViewById(R.id.EditTextLocation);
EditText dateField = (EditText)findViewById(R.id.EditTextDate);
EditText bodyField = (EditText)findViewById(R.id.EditTextBody);

if(!nameField.getText().toString().matches("") && !emailField.getText().toString().matches("") && !locationField.getText().toString().matches("") && !dateField.getText().toString().matches("") && !bodyField.getText().toString().matches("")) {
PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().putString("report_email", emailField.getText().toString()).apply();
PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().putString("report_name", nameField.getText().toString()).apply();

String emailBody = "Name: "+nameField.getText()+"\n\n";
emailBody += "Location: "+locationField.getText()+"\n\n";
emailBody += "Time: "+dateField.getText()+"\n\n";
emailBody += "Description: "+bodyField.getText();

Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);

// set the type to 'email'
emailIntent.setType("text/plain");
String to[] = {emailField.getText().toString()};
emailIntent.putExtra(Intent.EXTRA_EMAIL, to);

// the attachment - ArrayList populated in onActivityResult
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, userSelectedImageUriList);

// the mail
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Report);
emailIntent.putExtra(Intent.EXTRA_TEXT, emailBody);

startActivity(Intent.createChooser(emailIntent , "Send with..."));
//finish();
} else {
Toast.makeText(this, getString(R.string.field_error), Toast.LENGTH_SHORT).show();
}
}

关于java - 带有多个附件的 Android 电子邮件 Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51559115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com