在 Android Studio 中:
此應用程式必須使用 COMTRADE 檔案。COMTRADE 檔案是 *.cfg *.dat 和 *.rio 檔案。例如,(user.cfg、user.dat 和 user.rio)。主檔案是 *.cfg 檔案,所以用戶必須通過 SAF 瀏覽才能找到 *.cfg 檔案,當用戶選擇此檔案時,應用程式必須自動加載其他檔案(*.dat 和 *.rio)。
我不能<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>用于 30 級的 android
所以我必須使用存盤訪問框架,通過下面的代碼用戶瀏覽 *.cfg 檔案并選擇像 user.cfg 這樣的檔案
if(SDK_INT >= Build.VERSION_CODES.R)
{
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
Act.startActivityForResult(intent, 111);
}
else
{...}
然后 SAF 回傳該 user.cfg 檔案的 URI,并且應用程式沒有要加載的其他檔案的任何 URI。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 111)
{
if (resultCode == Activity.RESULT_OK)
{
if (data != null)
{
try
{
Uri uri = null;
uri = data.getData();
InputStreamReader inputStreamReader = new InputStreamReader(getContentResolver().openInputStream(uri));
BufferedReader br = new BufferedReader(inputStreamReader);
// I want URI of user.dat how?
InputStreamReader inputStreamReader1 = new InputStreamReader(getContentResolver().openInputStream(uri1));
BufferedReader br1 = new BufferedReader(inputStreamReader1);
....
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
}
}
請幫助我,我該怎么做?謝謝。
uj5u.com熱心網友回復:
請幫助我,我該怎么做?
您不能這樣做,至少通過使用ACTION_OPEN_DOCUMENT,除非您要求用戶依次打開您的三個檔案中的每一個。僅僅因為用戶選擇了一個.cfg檔案并不意味著您對任何其他檔案(包括與其相鄰的檔案)擁有任何權利。
您可以嘗試使用ACTION_OPEN_DOCUMENT_TREE并讓用戶選擇包含所需檔案的檔案樹。從那里,您可以:
- 用于
DocumentFile.fromTreeUri()獲取DocumentFile表示樹的 - 呼叫
listFiles()它DocumentFile以獲取該樹的直接內容,以DocumentFile物件串列的形式 - 呼叫
getName()其中的每一個以獲取它們的顯示名稱,然后查看哪些名稱具有您想要的檔案擴展名和匹配的基本名稱(foo.cfg和foo.rio和foo.dat) - 對于您想要使用的那些,請呼叫
getUri()以DocumentFile獲取Uri使用ContentResolver并openInputStream()閱讀內容
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/411104.html
標籤:
