質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.39%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

0回答

1244閲覧

android studio 添付メール送信時のトースト表示について

rockey_7625

総合スコア25

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2021/01/30 02:42

編集2021/01/30 15:39

android studioで写真を送信できる簡単なメール送信アプリを開発したのですが、このアプリでトースト表示を行っています。
トースト表示はできているのですが1点確認したいことがあるのです。
写真などの添付画像をメールに添付して送信すると、送信ボタンを押した直後にトーストが送信完了と表示さるのですが、実際のメール送信は添付写真がありある程度容量があるので本当にトーストが送信完了と表示された時は送信が完了しているのでしょうか?
また、できればメール送信中⇒メール送信完了のようにトーストを段階を踏んで表示させたいのですが
このような事は可能でしょうか?
お手数ですがアドバイスお願いいたします。
宜しくお願いいたします。

MainActivity.java import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import android.Manifest; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.ContentValues; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import java.text.SimpleDateFormat; import java.util.Date; public class MainActivity extends Activity { private String TAG = "MainActivity"; private int CAMERA_REQUEST_CODE = 101; private int CAMERA_PERMISSION_REQUEST_CODE = 102; private Uri imageUri; private String gPath = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE }, 1000); findViewById(R.id.camera).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA)) { takePicture(); } else { ActivityCompat.requestPermissions(MainActivity.this, new String[]{ Manifest.permission.CAMERA }, CAMERA_PERMISSION_REQUEST_CODE); } } }); } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { if (requestCode == CAMERA_PERMISSION_REQUEST_CODE) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { takePicture(); } } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == CAMERA_REQUEST_CODE) { Bitmap bitmap = getBitmapFromUri(); if (bitmap != null) { ((ImageView) findViewById(R.id.cameraImage)).setImageBitmap(bitmap); Button sendbutton = findViewById(R.id.send_button); sendbutton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Picture_send pic_send = new Picture_send(); pic_send.path = gPath; pic_send.start(); showsimpletoast(); } }); } } Button button = (Button) findViewById(R.id.reset); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ((ImageView)MainActivity.this.findViewById(R.id.cameraImage)).setImageDrawable(null); } }); } private void showsimpletoast() { Toast toast = Toast.makeText(this, "メール送信完了", Toast.LENGTH_LONG); toast.show(); } private void takePicture() { ContentValues content = new ContentValues(); content.put(MediaStore.Images.Media.TITLE, "UseCameraActivityPhoto_" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpg"); content.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, content); try { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE_SECURE); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(takePictureIntent, CAMERA_REQUEST_CODE); } catch (ActivityNotFoundException e) { Toast.makeText(this,"アプリ無し。", Toast.LENGTH_SHORT).show(); } } private Bitmap getBitmapFromUri() { String path = null; if (imageUri != null) { Cursor cur = getContentResolver().query(imageUri, new String[]{ MediaStore.MediaColumns.DATA }, null, null, null); try { if (cur != null && cur.moveToFirst()) { path = cur.getString(0); gPath = path; } } finally { cur.close(); } } return BitmapFactory.decodeFile(path, new BitmapFactory.Options()); } }
Picture_send.java import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Address; import javax.mail.Message; import javax.mail.Multipart; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility; public class Picture_send extends Thread{ String path = null; public void run() { try { Properties props = new Properties(); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.transport.protocol", "smtp"); props.put("mail.smtp.ssl.trust", "*"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.connectiontimeout", "10000"); props.put("mail.smtp.timeout", "10000"); Session session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("********@yahoo.co.jp", "*********"); } }); Message message = new MimeMessage(session); message.setFrom(new InternetAddress("********@yahoo.co.jp", "***")); message.setReplyTo(new Address[]{new InternetAddress("********@yahoo.co.jp")}); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("********@yahoo.co.jp")); message.setSubject("写真"); MimeBodyPart messageBodypart = new MimeBodyPart(); messageBodypart.setText("写真"); MimeBodyPart takepicture = new MimeBodyPart(); FileDataSource fds = new FileDataSource(path); takepicture.setDataHandler(new DataHandler(fds)); takepicture.setFileName(MimeUtility.encodeWord(fds.getName())); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodypart); multipart.addBodyPart(takepicture); message.setHeader("Content-Transfer-Encoding", "base64"); message.setContent(multipart); Transport.send(message); } catch (Exception e ) { System.out.print("例外!\r\n"); e.printStackTrace(); } finally { } System.out.print("end: main\r\n"); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/01/30 19:53

スレッドを開始した直後にトーストを表示しているので、送信される前に表示されていると思います。 送信完了した時にトーストを表示したいなら、送信スレッドの処理が完了した時に、UI スレッドに制御を戻してトーストを表示する必要があるかと。 また、トーストの表示を送信中から送信完了に切り替えるには、Toast インスタンスを保持して setText して show すればいいようです。
rockey_7625

2021/01/31 02:27

アドバイス誠にありがとうございます。 すいませんが、もう1点ご教授頂けないでしょうか 送信中のトーストはメール送信ボタンを押して送信完了するまではずっと表示させたままとしたいのですが 普通のトーストの使い方で行うと数秒で送信中のトーストが消えるような気がするのですが。。。。 実現させるにはトーストの連続表示を行う必要がありますか? また、何かサンプルコードがあれば是非ご教授頂きたいです。】
hoshi-takanori

2021/01/31 02:35

トーストをずっと表示させることはできないと思います。連続表示させるくらいならスナックバーにすべきでは。
rockey_7625

2021/01/31 02:57

ずっと表示はできないのですね。 ご指摘のスナックバー等も検討してみたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.39%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問