はじめに
DreamHanksのMOONです。
前回は「Permission」について説明しました。
16. 【Android/Kotlin】Permission(権限設定)
今回は機器のギャラリーから写真を取得し、画面に表示していきます。
前回はストレージアクセス権限を許可することについて見ましたので、今回はアクセス権限を使ってギャラリーのイメージを持ってきてみます。
ギャラリーからイメージを取得
Activityを作成
前回のActivityで追加されたコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
private val REQUEST_GALLERY_TAKE = 2 //ギャラリーを開くためのメソッド private fun openGalleryForImage() { //ギャラリーに画面を遷移するためのIntent val intent = Intent(Intent.ACTION_PICK) intent.type = "image/*" startActivityForResult(intent, REQUEST_GALLERY_TAKE) } // onActivityResultにイメージ設定 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) when (requestCode){ 2 -> { if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_GALLERY_TAKE){ //選択された写真にImageViewを変更 storage_iv.setImageURI(data?.data) // handle chosen image } } } } |
①ギャラリーを開くためのメソッドを追加
②「onActivityResult」メソッドを使ってギャラリーから選択されたイメージをImageViewに設定
全体コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
package com.example.practiceapplication import android.Manifest import android.app.Activity import android.content.Intent import android.content.pm.PackageManager import android.os.Bundle import android.widget.Button import android.widget.ImageView import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat class PermissionActivity : AppCompatActivity() { private val REQUEST_GALLERY_TAKE = 2 private val RECORD_REQUEST_CODE = 1000 private lateinit var storage_iv: ImageView private lateinit var storage_btn: Button override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_storage) storage_iv = findViewById<ImageView>(R.id.storage_iv) storage_btn = findViewById<Button>(R.id.storage_btn) setupPermissions() //EditTextのクリックイベントを設定 storage_btn.setOnClickListener { openGalleryForImage() } } //ギャラリーを開くためのメソッド private fun openGalleryForImage() { //ギャラリーに画面を遷移するためのIntent val intent = Intent(Intent.ACTION_PICK) intent.type = "image/*" startActivityForResult(intent, REQUEST_GALLERY_TAKE) } // onActivityResultにイメージ設定 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) when (requestCode){ 2 -> { if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_GALLERY_TAKE){ //選択された写真にImageViewを変更 storage_iv.setImageURI(data?.data) // handle chosen image } } } } //パーミッションのチェックを設定するためのメソッド private fun setupPermissions() { val permission = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) if (permission != PackageManager.PERMISSION_GRANTED) { makeRequest() } } //パーミッションをリクエストするためのメソッド private fun makeRequest() { ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), RECORD_REQUEST_CODE) } //パーミッションの許可の結果による実行されるメソッド override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) { when(requestCode){ RECORD_REQUEST_CODE ->{ if (grantResults.isEmpty() || grantResults[0] != PackageManager.PERMISSION_GRANTED) { Toast.makeText(applicationContext, "デバイス内の写真やメディアへのアクセスが許可されませんでした。", Toast.LENGTH_SHORT).show() }else{ Toast.makeText(applicationContext, "デバイス内の写真やメディアへのアクセスが許可されました。", Toast.LENGTH_SHORT).show() } return } } } } |
レイアウトのxmlを作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".PermissionActivity" android:gravity="center"> <ImageView android:layout_width="300dp" android:layout_height="300dp" android:id="@+id/storage_iv" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/storage_btn" android:text="ストレージ"/> </LinearLayout> |
アプリ起動
※アプリがストレージのアクセス権限について許可されていると仮定
・初期の画面
・ストレージボタンをクリックした場合(ギャラリー画面)
・ギャラリーからイメージを一つクリックした場合(昨日の写真中に一つを選択)
終わりに
今回は機器のギャラリーから写真を取得し、画面に表示しました。
次回はカメラで写真を撮り、その写真を画面に表示していきます。
コメント