問題タブ [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.
mediastore - SDK-29 の MediaScanner と ScopedStorage
私が取り組んでいるアプリは、File
写真キャプチャのターゲットとして a を使用します。これは、ユーザーが を使用してカメラアプリを選択することにより、外部で実行されますIntent(ACTION_IMAGE_CAPTURE)
。build と target-sdk を 29 にアップグレードして以来、外部ストレージ上のファイルへの自由なアクセスの制限に始まる一連の問題が発生しています。最初の変更は、アプリケーションのプライベート キャッシュ ディレクトリのいずれかを使用することでした。
File.createTempFile("tempImage", ".jpg", context.cacheDir)
またはアプリケーションのプライベート外部ストレージ ディレクトリ:
File.createTempFile("tempImage", ".jpg", context.getExternalFilesDir(Environment.DIRECTORY_PICTURES))
の FileProvider アクセスと組み合わせて使用しますfile_paths.xml
。例:
これらは適切に構成された後はうまく機能しますが、「ギャラリーに保存」機能を実装します。
このアプローチは機能するはずですが、元の画像が保存されている場所 (private-app-dir、cache-dir、external-private) に関係なく機能しません。
Android の SDK-29 には、MediaScanning の変更を必要とする新しい制限がありますか? 特に (潜在的に) プライベートな画像ファイルがスキャンされる方法に関連していますか? MediaScanner
メソッドはほとんどの場合、URI ではなくパスを想定していることに気付きString
ました。そのため、システム コンポーネントであるため、新しい制限は適用されないと思います。