🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

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

Q&A

解決済

1回答

4056閲覧

最新版APIから廃止された関数の代替関数について

adk

総合スコア12

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

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

1グッド

0クリップ

投稿2019/10/10 01:25

編集2019/10/11 00:00

現状、ギャラリーから画像を読み込むとそれを別の場所に保存し、表示するという関数を作っています。

その中で、最新版のAPIで廃止された関数を使っているのですが、これを廃止されていない関数に書き換えたいです。
(現状のコードでも最新APIでなければ動くことは動きます。)

関数は2つあり、1つはMediaStore.Images.Media.DATA、もう一つはEnvironment.getExternalStoragePublicDirectory についてです。

1.MediaStore.Images.Media.DATAについて

MainActivity

1val cr = contentResolver 2val columns = arrayOf(MediaStore.Images.Media.DATA) 3val c = cr.query(data!!.data!!, columns, null, null, null) 4c!!.moveToFirst() 5val original = File((c.getString(0)))

でギャラリーから選択した画像のファイル情報を取り出しています。この中のMediaStore.Images.Media.DATAが廃止関数なので、
別のやり方でギャラリーからファイル情報を取り出したいです。

2.Environment.getExternalStoragePublicDirectory について

MainActivity

1val mediaStorageDir = File(Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_PICTURES), "savedPictures")

で選択したギャラリー画像を保存するフォルダの情報を取得しています。
場所としてはストレージ直下のPictureフォルダの中にフォルダを作り、その中にファイルを保存したいです。
(/storage/emulatede/0/Pictures/savedPictures)

この場所のファイル情報を別関数で取得したいです。
現状、ContextやIntentを使うやり方を模索していますが、アプリフォルダ内の「Picture」フォルダ内の
情報を取得するやり方しか見つけられていません。
applicationContext.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
返り値:/storage/emulated/0/Android/data/アプリ名/files/Pictures

詳細は下記コードです(言語はKotlinです)

MainActivity

1fun PictureSelect(){ 2 val i = Intent() 3 i.type = "image/*" // 画像のみが表示されるようにフィルターをかける 4 i.action = Intent.ACTION_GET_CONTENT 5 startActivityForResult(i, REQUEST_CODE_GALLERY) 6 Toast.makeText(applicationContext, "画像選択の画面です", Toast.LENGTH_LONG).show() 7 } 8 9public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 10 if (resultCode == Activity.RESULT_OK) { 11 REQUEST_CODE_GALLERY // ギャラリーの場合 12 -> try { 13 14 15 16 //廃止された関数1.MediaStore.Images.Media.DATA。 17 //この下から val original =...までの操作を代替関数でできないか模索中。 18 //公式リファレンスではcontentResolverを直に触るとよいと書いているがそのやり方が分からない。 19 val cr = contentResolver 20 val columns = arrayOf(MediaStore.Images.Media.DATA) 21 val c = cr.query(data!!.data!!, columns, null, null, null) 22 c!!.moveToFirst() 23 val original = File((c.getString(0))) 24 25 26 27 28 29 //廃止された関数2.Environment.getExternalStoragePublicDirectory 30 val mediaStorageDir = File(Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_PICTURES), "savedPictures") 31 //返り値は/storage/emulatede/0/Pictures/savedPictures。 32 //別の廃止されてない関数でここに行きたい。 33 34 //以下はこれまでに試した関数 35 val mediaStorageDir2 = Environment.getRootDirectory().getPath() 36 //返り値:/system 37 val mediaStorageDir3 = Environment.getDataDirectory().getPath() 38 //返り値:/data 39 val mediaStorageDir4=applicationContext.getExternalFilesDir(Environment.DIRECTORY_PICTURES) 40 //返り値:/storage/emulated/0/Android/data/アプリ名/files/Pictures 41 //内部ストレージの中に保存。PCと繋いで画像を取り出すのが難しいのでここには保存したくない。 42 43 44 45 46 47 48 if (!mediaStorageDir.exists() and !mediaStorageDir.mkdir()) { 49 return 50 } 51 //以下、ギャラリーから選んだファイルをコピーして保存。名前はsavedPicture.JPGに統一。 52 val savePath=mediaStorageDir.getPath() + separator + "savedPicture.JPG" 53 val saveFile:File = File(savePath) 54 original.copyRecursively(saveFile, true) 55 56 var degree=getRotateDegree(savePath) 57 val options = BitmapFactory.Options() 58 options.inJustDecodeBounds=false 59 options.inSampleSize = 4 60 var bitmap = BitmapFactory.decodeFile(savePath, options); 61 62 var matrix = Matrix() 63 matrix.postRotate(degree.toFloat()); 64 65 var rotatedImage = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); 66 var out = FileOutputStream(karipath); 67 rotatedImage.compress(Bitmap.CompressFormat.JPEG, 100, out); 68 val imgView = findViewById<ImageView>(R.id.ImageView) 69 imgView?.setImageBitmap(rotatedImage) 70 } catch (e: Exception) { 71 e.printStackTrace() 72 } 73 } 74 75 } 76 } 77
kakajika👍を押しています

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

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

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

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

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

jimbe

2019/10/10 03:17

使用言語はタグがありますので, 追加して頂けますか.
adk

2019/10/10 03:44

>>追記しました。ご指摘ありがとうございます。
退会済みユーザー

退会済みユーザー

2019/10/10 11:38

公式リファレンスには、代替の関数が書いてありましたが、具体的にわからないことは何でしょうか
adk

2019/10/11 00:01

>>ご指摘ありがとうございます。 本文にわからないことの詳細を追記しました。
guest

回答1

0

ベストアンサー

AndroidQでバグっちゃってる感じでしょうか。下記が参考になりそうです。

Android QのScoped storageによる変更

Android Q のプライバシーに関する変更点: 対象範囲別ストレージ

投稿2019/10/28 05:01

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

adk

2019/10/30 23:43

ありがとうございます。 ご紹介のサイトを参考に別の方法を試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問