提问人:krontor 提问时间:6/26/2023 更新时间:6/26/2023 访问量:27
Android:在 Java 中从应用程序自己的数据目录打开 FileInputStream
Android: open FileInputStream from apps own data directory in Java
问:
我正在开发一个以 Mapsforge 地图为中心的应用程序。
地图可以很好地加载示例应用程序中的相关部分,但用户必须在每次启动时选择地图文件:
private static final int SELECT_MAP_FILE = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
[..]
Intent intent = new Intent(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ?
Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
startActivityForResult(intent, SELECT_MAP_FILE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SELECT_MAP_FILE && resultCode == Activity.RESULT_OK) {
if (data != null) {
Uri uri = data.getData();
openMap(uri);
}
}
}
private void openMap(Uri uri) {
try {
[..]
FileInputStream fis = (FileInputStream) getContentResolver().openInputStream(uri);
MapDataStore mapDataStore = new MapFile(fis);
现在我想用一两行替换所有这些,让我从应用程序自己的数据目录中的已知位置加载地图文件,试了一下
File mapf = new File(this.getFilesDir(), "region.map");
FileInputStream fis = new FileInputStream(File mapf);
或者,即使它编译了,它也不起作用。FileInputStream fis = this.openFileInput("region.map");
从我所读到的内容来看,一个人不应该需要任何权限来访问应用程序自己的数据,那么我缺少什么来获得一个简单的、有效的 FileInputStream?
(目前,它都在 Android Studio 模拟器中进行了测试,并且 region.map 是手动放置在那里的,一旦我可以从那里使用它,我将处理将文件从资产中放置到那里(如果它不存在)。
答: 暂无答案
评论
the user has to choose the map file on each startup:
如果它是相同的映射文件,则不需要。