問題タブ [scoped-storage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Android Q: ギャラリーから画像を取得して処理する
非常に基本的な質問のように思えますが、特に Android Q.
ギャラリーから画像を取得して圧縮し、サーバーに送信したいだけです。しかし、Android Q の Scoped Storage のせいで、思ったよりも大変です。最初に、コードで何をしたかを説明します。
まず、画像を選択するインテントを送信します。
正常に動作し、 onActivityResult メソッドで画像を取得できます
さて、問題は、この画像をファイル形式でアクセスするにはどうすればよいかということです。そのため、さらに処理/圧縮できます。
私が試した次のこと:
これは私が持っているパスです:
次の方法で、そこからファイルを作成しました。
以下は、画像を圧縮してアップロードするための私のカスタムロジックです。
このカスタム ロジックには、次のように画像のサンプリングと回転を処理するメソッドがあります。
しかし、 context.contentResolver.openInputStreamを使用してストリームを開こうとすると 、次のエラーが発生します。
Android 10 では、外部ストレージからファイルに直接アクセスする権限がないため、これを取得していることはわかっています。
Android 10で外部ストレージの画像をファイルとして使用するにはどうすればよいですか。
注:必要な権限はすべて持っているので、それは問題ではありません
android - Android 10で写真を撮り、結果を写真に保存する方法は?
Google は Android 10 に Scoped Storage を導入しました。ドキュメントによると、MediaStore API を使用することで、アクセス許可を要求せずにパブリック ディレクトリに書き込むことができます。
Android 10 より前では、写真を撮ってピクチャに保存する必要がある場合、コードは次のようになります。
Pictures 内にファイルを直接作成し、ファイル uri を takePhotoIntent エクストラに入れます。インテントを開始して写真を撮る間、元のサイズの写真が Pictures ディレクトリに保存されます。
しかし、今は Android 10 をターゲットにしています。ドキュメントによると、写真を Pictures ディレクトリに保存するために WRITE_EXTERNAL_STORAGE 権限を要求する必要はありません。
許可がなければ、ファイルを作成してファイルの uri を取得し、それをインテント エクストラに入れることはできません。では、元のサイズの写真を保存するにはどうすればよいでしょうか。