Android 9 ではこの問題に直面していませんでしたが、Android 10 ではレガシー ストレージをオプトアウトしました。しかし、Android 11 では、ダウンロード マネージャーからダウンロードしたファイルを開くことができません。ただし、同じファイルをファイル マネージャーから開くことはできます。
また、そのファイルの所有者を確認しました。私のアプリではなく、com.android.providers.downloads が表示されています。
また、Document/myfolder ディレクトリに pdf ファイルを作成しています。インテントを使用して簡単に開くことができ、私のアプリはそのファイルの所有者です。
また、ダウンロードしたファイルを Document/myfolder ディレクトリに保存している場合でも、そのインテントを使用して開くことはできません。
私の理解によると、Android 11 から、スコープ ストレージが導入され、そのファイルの所有者がそれにアクセスしている場合。READ_EXTERNAL_STORAGE および WRITE_EXTERNAL_STORAGE パーミッションを使用して読み取り/書き込みを許可します。
両方のファイルで、同じインテントを使用しています。
ダウンロードしたファイルの所有者を変更して開くことができるようにする方法、またはそのダウンロードしたファイルを開くことができない正確な理由を知っている人はいますか?
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, PDF_TYPE);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
ここでは PDF_TYPE が正しく、uri も正しいです。
DownloadManager コードもここで正しい小さなスニペットです
.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, subPath.getPath());