Отправка электронной почты с вложением - PullRequest
0 голосов
/ 29 октября 2018

Добрый день. Я пытаюсь сделать приложение, которое позволяет выбрать изображение (из галереи в любом месте, где есть изображения) и отправить его по электронной почте. Поиск со всех сторон, но вы не можете отправить изображение, отправка только текст прост ... но с изображением становится сложным. Я прилагаю код, который я считаю наиболее вероятным. Это не моя собственность, тогда я оставляю ссылку создателя. https://www.javacodegeeks.com/2013/10/send-email-with-attachment-in-android.html

MainActivity.java

public class MainActivity extends Activity implements OnClickListener {

   EditText editTextEmail, editTextSubject, editTextMessage;
   Button btnSend, btnAttachment;
   String email, subject, message, attachmentFile;
   Uri URI = null;
   private static final int PICK_FROM_GALLERY = 101;
   int columnIndex;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          editTextEmail = (EditText) findViewById(R.id.editTextTo);
          editTextSubject = (EditText) findViewById(R.id.editTextSubject);
          editTextMessage = (EditText) findViewById(R.id.editTextMessage);
          btnAttachment = (Button) findViewById(R.id.buttonAttachment);
          btnSend = (Button) findViewById(R.id.buttonSend);

          btnSend.setOnClickListener(this);
          btnAttachment.setOnClickListener(this);
   }

   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          if (requestCode == PICK_FROM_GALLERY && resultCode == RESULT_OK) {
                 /**
                  * Get Path
                  */
                 Uri selectedImage = data.getData();
                 String[] filePathColumn = { MediaStore.Images.Media.DATA };

                 Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
                 cursor.moveToFirst();
                 columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                 attachmentFile = cursor.getString(columnIndex);
                 Log.e("Attachment Path:", attachmentFile);
                 URI = Uri.parse("file://" + attachmentFile);
                 cursor.close();
          }
   }

   @Override
   public void onClick(View v) {

          if (v == btnAttachment) {
                 openGallery();

          }
          if (v == btnSend) {
                 try {
                       email = editTextEmail.getText().toString();
                       subject = editTextSubject.getText().toString();
                       message = editTextMessage.getText().toString();

                       final Intent emailIntent = new Intent(
                                     android.content.Intent.ACTION_SEND);
                       emailIntent.setType("plain/text");
                       emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
                                     new String[] { email });
                       emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
                                     subject);
                       if (URI != null) {
                              emailIntent.putExtra(Intent.EXTRA_STREAM, URI);
                       }
                       emailIntent
                                     .putExtra(android.content.Intent.EXTRA_TEXT, message);
                       this.startActivity(Intent.createChooser(emailIntent,
                                     "Sending email..."));

                 } catch (Throwable t) {
                       Toast.makeText(this,
                                     "Request failed try again: " + t.toString(),
                                     Toast.LENGTH_LONG).show();
                 }
          }

   }

   public void openGallery() {
          Intent intent = new Intent();
          intent.setType("image/*");
          intent.setAction(Intent.ACTION_GET_CONTENT);
          intent.putExtra("return-data", true);
          startActivityForResult(
                       Intent.createChooser(intent, "Complete action using"),
                       PICK_FROM_GALLERY);

   }}

activity_main.xml

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
tools:context=".MainActivity" >

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="5dp"
    android:padding="5dp" >

    <EditText
        android:id="@+id/editTextTo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_margin="5dp"
        android:hint="Email Address!"
        android:inputType="textEmailAddress"
        android:singleLine="true" />

    <EditText
        android:id="@+id/editTextSubject"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/editTextTo"
        android:layout_margin="5dp"
        android:hint="Subject"
        android:singleLine="true" />

    <EditText
        android:id="@+id/editTextMessage"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_below="@id/editTextSubject"
        android:layout_margin="5dp"
        android:gravity="top|left"
        android:hint="type message here!"
        android:inputType="textMultiLine" />

    <Button
        android:id="@+id/buttonSend"
        android:layout_width="80dp"
        android:layout_height="50dp"
        android:layout_below="@id/editTextMessage"
        android:layout_margin="5dp"
        android:text="Send" />

    <Button
        android:id="@+id/buttonAttachment"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="attachment" />
</RelativeLayout>

AndroidManifest

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Я думаю, что ошибка возникает, когда вы пытаетесь получить адрес файла. В этой части:

 Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };
        Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
        cursor.moveToFirst();
        columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        attachmentFile = cursor.getString(columnIndex);
        Log.e("Attachment Path:", attachmentFile);
        URI = Uri.parse("file://" + attachmentFile);
        cursor.close();

Я надеюсь, что вы можете помочь мне с этой проблемой или помочь мне в создании другого кода. Мне нужно, чтобы пользователь выбрал изображение, которое он хочет отправить, и оно было отправлено по электронной почте. Извините, если что-то не так написано. Английский не мой родной язык.

...