実現したいこと:
画面内のボタンを押下したタイミングで下記の処理を実行
0. Androidアプリ内でpdfファイルを作成(PdfDocumentを利用)
0. 1で作成したpdfファイルを添付資料としてGmailを起動
課題:
ボタンを押下するとGmailは起動するがpdfが添付されない
試したこと:
1.内部ストレージに保存し、ファイル参照をすることで添付しようとしましたが下記エラーが表示され動作しませんでした。
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.SEND flg=0x1 pkg=com.google.android.gm clip={null T:test} (has extras) } at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1816) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1525) at android.app.Activity.startActivityForResult(Activity.java:4266) at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676) at android.app.Activity.startActivityForResult(Activity.java:4224) at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663) at android.app.Activity.startActivity(Activity.java:4563) at android.app.Activity.startActivity(Activity.java:4531)
2.外部ストレージに保存し、ファイル参照をすることで添付しようとしましたがpdfが破損してしまい添付することができませんでした。
ご助言いただきたい内容
Gmailの起動と同時にpdfを添付する方法をご存知でしたらご助言いただきたいです。
##開発環境
###対象:
0. minSdkVersion 19
0. targetSdkVersion 29
###環境:
AndroidStudio 3.5.1
##ソースコード
Kotlin
1import android.annotation.SuppressLint 2import android.content.Intent 3import android.graphics.Color 4import android.graphics.Paint 5import android.graphics.pdf.PdfDocument 6import android.os.Build 7import android.os.Bundle 8import android.text.TextPaint 9import android.widget.Toast 10import androidx.appcompat.app.AppCompatActivity 11import java.io.FileNotFoundException 12import java.io.FileOutputStream 13import java.io.IOException 14 15 16class SampleActivity : AppCompatActivity() { 17 var page:PdfDocument.Page? = null 18 19 @SuppressLint("ObsoleteSdkInt") 20 override fun onCreate(savedInstanceState: Bundle?) { 21 super.onCreate(savedInstanceState) 22 setContentView(R.layout.activity_mail_send_actvitiy) 23 24// メール送信ボタン押下時の処理 25 send_button.setOnClickListener { 26 val intent = Intent(Intent.ACTION_SEND) 27 28 intent.putExtra(Intent.EXTRA_SUBJECT, "件名テスト") 29 intent.putExtra(Intent.EXTRA_TEXT, "本文テスト") 30 createPdf() 31 intent.putExtra(Intent.EXTRA_STREAM, page.toString()) 32 intent.type = "application/pdf" 33 34 intent.setPackage("com.google.android.gm") 35 startActivity(intent) 36 } 37 } 38 39 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 40 super.onActivityResult(requestCode, resultCode, data) 41 Toast.makeText(this, "@@@$requestCode", Toast.LENGTH_SHORT).show() 42 } 43 44 private fun createPdf() { 45 //PDFに書き込む時に使用するPaintを作成する。 46 val paint = Paint() 47 paint.color = Color.RED 48 paint.textSize = 30f 49 //PdfDocumentをインスタンス化 50 val pdfDocument = PdfDocument() 51 page = pdfDocument.startPage(PdfDocument.PageInfo.Builder(595, 842, 0).create()) 52 var fos: FileOutputStream? = null 53 try { 54 addPage(0) 55 //PDFの書き込みストリームを生成する。 56 fos = FileOutputStream("sample.pdf") 57 //ストリームにPdfDocumentの内容を書き込む 58 pdfDocument.writeTo(fos) 59 //PdfDocumentを閉じる 60 pdfDocument.close() 61 } catch (e: FileNotFoundException) { 62 63 } catch (e: IOException) { 64 65 } finally { 66 if (fos != null) { 67 try { 68 fos.close() 69 } catch (e: IOException) { 70 e.printStackTrace() 71 } 72 73 } 74 } 75 } 76 77 private fun addPage(pageNum: Int) { 78 /** 79 * PageInfoインスタンスを作成するためのビルダーをインスタンス化する。 80 * 幅:720point(10inch) 81 * 高さ:720point(10inch) 82 * ページ番号:pageNum 83 */ 84 val pdfDocument = PdfDocument() 85 val builder = PdfDocument.PageInfo.Builder(595, 842, pageNum) 86 //PageInfoをインスタンス化する。 87 val pageInfo = builder.create() 88 //PageInfoから編集可能なPageインスタンスを取得する。 89 page = pdfDocument.startPage(pageInfo) 90 //Pageにテキストを描画する。 91 page?.canvas?.drawText("こんにちは", 0f, 30f, TextPaint()) 92 //Pageの編集を終了する。 93 pdfDocument.finishPage(page) 94 } 95} 96
あなたの回答
tips
プレビュー