afilechooser モジュールを使用して、ユーザーのデバイスからファイルを選択しています。デバイスには、内部ストレージと外部ストレージの両方があります。内部ストレージからファイルを選択すると、パスが正しく返され、URI は次のようになります。
Uri =content://com.android.externalstorage.documents/document/primary%3Amyfile.txt
ただし、外部 SD カードからファイルを選択すると afilechooser が失敗し、URI は次のようになります。
Uri = content://com.android.externalstorage.documents/document/3935-6562%3Amyfile.txt
だから私は afilechooser getPath メソッドのコードを見ていましたが、次の条件があります:
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
プライマリを含む代わりに「3935-6562」が含まれているため、パスを取得していないことがわかります。これをテストする別の条件を記述できますが、疑問に思っています。このデバイスでは「3935-6562」ですが、別のデバイスでも同じ番号ですか? デバイスによって異なる場合、どうすれば動作するようにできますか? また、「3935-6562」がすべてのデバイスで同じである場合、Environment.getExternalStorageDirectory() は外部ではなく内部の sd パスを返すように見えるため、どのようにパスを取得しますか?
前もって感謝します。私はまだこのことを学んでいるので、できるだけ簡単にしてください。