在 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();
}
}
}
}
}
}
请帮助我,我该怎么做?谢谢。