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

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

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

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Android

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

0回答

2201閲覧

Androidアプリ内でPDFを作成しGmailに添付したい

sszkks

総合スコア15

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Android

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2019/11/17 04:37

実現したいこと:

画面内のボタンを押下したタイミングで下記の処理を実行
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

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問