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

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

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

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

Kotlin

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

Q&A

0回答

454閲覧

[Android] 画像の保存 即時に反映

matcha777

総合スコア6

Android

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

Kotlin

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

0グッド

0クリップ

投稿2020/09/19 06:56

編集2020/09/19 13:12

Android で 画像を保存し、Files by Google などのファイル管理アプリ でその画像を確認できるようにしたいです。

現状、 以下のコードで画像を外部ストレージに保存することができたのですが、スマホを再起動しないと、Files by Google では確認できない状態です。

スマホを再起動せずに、画像を保存して即時に Files に反映させるにはどうすればよいでしょうか?

:開発環境
Android Studio 4.0

※以下に、処理とレイアウトのコードを載せています。

・処理

kotlin

1 2class SaveImagePage : AppCompatActivity() { 3 4 private val REQUEST_PERMISSION = 1000 5 6 private var outputBmp: Bitmap? = null 7 8 override fun onCreate(savedInstanceState: Bundle?) { 9 super.onCreate(savedInstanceState) 10 setContentView( R.layout.save_image_page) 11 val myToolbar: Toolbar = findViewById(R.id.my_toolbar) 12 setSupportActionBar(myToolbar) 13 14 val outputString = intent.extras?.get(ChooseTypePage.OUTPUT) as String 15 val outputBytes = Base64.getDecoder().decode(outputString) 16 outputBmp = resizeBitmap(BitmapFactory.decodeByteArray(outputBytes, 0, outputBytes!!.size)) 17 18 val imageView = findViewById<ImageView>(R.id.outputImage) 19 imageView.setImageBitmap(outputBmp) 20 } 21 22 private fun resizeBitmap(before: Bitmap): Bitmap { 23 val height = ChooseTypePage.originalHeight 24 val width = ChooseTypePage.originalWidth 25 26 return Bitmap.createScaledBitmap(before, width, height,true) 27 } 28 29 fun clickSaveButton(view: View) { 30 checkPermission(); 31 } 32 33 fun clickRetryButton(view: View) { 34 val intent = Intent(this@SaveImagePage, SelectImagePage::class.java) 35 startActivity(intent) 36 } 37 38 private fun checkPermission() { 39 // 既に許可している 40 if (ActivityCompat.checkSelfPermission( 41 this, 42 Manifest.permission.WRITE_EXTERNAL_STORAGE 43 ) 44 == PackageManager.PERMISSION_GRANTED 45 ) { 46 setUpWriteExternalStorage() 47 } else { 48 requestLocationPermission() 49 } 50 } 51 52 private fun setUpWriteExternalStorage() { 53 // 外部ストレージに画像を保存する 54 try { 55 val resolver = applicationContext.contentResolver 56 57 val values = ContentValues().apply { 58 put(MediaStore.Images.Media.TITLE, "image.jpg") 59 put(MediaStore.Images.Media.DISPLAY_NAME, "image.jpg") 60 put(MediaStore.Images.Media.MIME_TYPE, "image/jpg") 61 } 62 val url = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values) 63 Log.i("url: ", url.toString()) 64 if (url != null) resolver.openOutputStream(url).use { output -> 65 Log.i("outputBmp:", outputBmp.toString()) 66 outputBmp?.compress(Bitmap.CompressFormat.JPEG, 50, output) 67 } 68 69 val toast = Toast.makeText(this, "画像が保存されました", Toast.LENGTH_SHORT) 70 toast.show() 71 72 } catch (e: IOException) { 73 e.printStackTrace() 74 } 75 } 76 77 private fun requestLocationPermission() { 78 if (ActivityCompat.shouldShowRequestPermissionRationale( 79 this, 80 Manifest.permission.WRITE_EXTERNAL_STORAGE 81 ) 82 ) { 83 ActivityCompat.requestPermissions( 84 this@SaveImagePage, 85 arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), 86 REQUEST_PERMISSION 87 ) 88 } else { 89 val toast = Toast.makeText(this, "許可してください", Toast.LENGTH_SHORT) 90 toast.show() 91 ActivityCompat.requestPermissions( 92 this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), 93 REQUEST_PERMISSION 94 ) 95 } 96 } 97 98 override fun onRequestPermissionsResult( 99 requestCode: Int, permissions: Array<String?>, grantResults: IntArray 100 ) { 101 if (requestCode == REQUEST_PERMISSION) { 102 // 使用が許可された 103 if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 104 setUpWriteExternalStorage() 105 } else { 106 // それでも拒否された時の対応 107 val toast = Toast.makeText(this, "何もできません", Toast.LENGTH_SHORT) 108 toast.show() 109 } 110 } 111 } 112}

 
・レイアウト

xml

1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" 6 xmlns:app="http://schemas.android.com/apk/res-auto"> 7 8 <androidx.appcompat.widget.Toolbar 9 android:id="@+id/my_toolbar" 10 android:layout_width="match_parent" 11 android:layout_height="?attr/actionBarSize" 12 android:background="?attr/colorPrimary" 13 android:text="@string/app_name" 14 android:theme="@style/ThemeOverlay.AppCompat.ActionBar" 15 app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 16 17 <ImageView 18 android:id="@+id/outputImage" 19 android:layout_width="200dp" 20 android:layout_height="300dp" 21 android:layout_marginTop="30dp" 22 android:layout_gravity="center" 23 app:srcCompat="@drawable/ic_baseline_error_24" /> 24 25 <Button 26 android:id="@+id/save_button" 27 android:layout_width="200dp" 28 android:layout_height="wrap_content" 29 android:layout_marginTop="60dp" 30 android:layout_gravity="center" 31 android:onClick="clickSaveButton" 32 android:text="@string/save_button" 33 android:textSize="20sp" /> 34 35 <Button 36 android:id="@+id/retry_button" 37 android:layout_width="200dp" 38 android:layout_height="wrap_content" 39 android:layout_marginTop="60dp" 40 android:layout_gravity="center" 41 android:onClick="clickRetryButton" 42 android:text="@string/retry_button" 43 android:textSize="20sp" /> 44 45</LinearLayout>

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問