0
0

ギャラリーに写真を保存

Posted at

Android 9以前で、アプリから端末の標準写真フォルダ(ギャラリーアプリ)に画像を登録するには、以下の手順を行います。

1. 画像を保存する

まず、画像を保存するためのコードを実装します。たとえば、外部ストレージの「Pictures」フォルダに画像を保存する場合、次のようにします。

val filename = "example_image.jpg"
val picturesDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
val file = File(picturesDirectory, filename)

val outputStream: OutputStream = FileOutputStream(file)
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream)
outputStream.flush()
outputStream.close()

2. MediaScannerを使用してギャラリーに画像を登録

保存した画像をギャラリーアプリに認識させるためには、MediaScannerConnectionを使用して画像をスキャンし、メディアデータベースに登録します。

MediaScannerConnection.scanFile(context, arrayOf(file.toString()), null) { path, uri ->
    // スキャン完了時に呼び出される
    Log.d("MediaScanner", "Scanned $path:")
    Log.d("MediaScanner", "-> uri=$uri")
}

このコードは、指定したファイルをスキャンし、標準の写真フォルダ(ギャラリーアプリ)に画像が表示されるようにします。

3. パーミッションのリクエスト

外部ストレージに書き込むためには、以下のパーミッションをAndroidManifest.xmlに追加する必要があります。

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

さらに、Android 6.0以降では実行時にパーミッションをリクエストする必要があるため、以下のコードを追加します。

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
    != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), REQUEST_WRITE_STORAGE)
}

REQUEST_WRITE_STORAGEは任意のリクエストコードです。

これで、画像を端末の標準写真フォルダ(ギャラリーアプリ)に登録することができます。

補足. Intent.ACTION_MEDIA_SCANNER_SCAN_FILE

val mediaScanIntent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE)
val file = File(picturesDirectory, filename)
val contentUri: Uri = Uri.fromFile(file)
mediaScanIntent.data = contentUri
sendBroadcast(mediaScanIntent)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0