0

我在我的应用程序中设置了一个文件“导入 - 导出”过程(使用 gmail 客户端),允许用户在彼此之间甚至只是在设备之间共享 kml 文件。请阅读用户所经历的步骤以最好地理解。

归档过程:
1) 用户将地标添加到地图。
2) 用户使用用户定义的名称将 kml 格式的地标保存在 /sdcard 上(比如说“Saved.kml”)。
3) 用户通过 gmail 附件“导出”Saved.kml。

处理中的文件:
1) 用户将 gmail 附件保存到设备上的下载文件夹。
2) 用户选择“导入 KML”并从列表中选择 Saved.kml。
3)一切都很完美!地标出现在地图上,就像导出/预期的一样!

除了一个主要缺陷...这仅在您使用相同的设备进行导入/导出时才有效。我有两个设备;Nexus 7 和 LG Motion,它在其中任何一个上都运行良好。但我无法让它在两者之间发挥作用,我开始感到非常沮丧。这是我尝试过的:

清单更改:
android:sharedUserId="com.xxx.xxx"
android:sharedUserLabel="@string/sharedUserLabel"

Runtime.getRuntime().exec("chmod 444 Saved.kml"); //(需要支持Android 4级)

甚至在解析 Saved.kml 之前尝试过这个 -- importFileIn.renameTo(importFileOut); 并且文件被重命名但仍然无法解析。

adb shell 显示:-rw-rw-r-- root sdcard_rw 867 2013-02-28 10:39 Saved.kml -rw-rw-r-- root sdcard_rw 867 2013-02-28 11:44 SavedRenamed.kml

我使用了“adb push”,它在推送的文件上显示了完全相同的用户 ID/权限,但仍然无法加载。

当我发现这一点时,我正处于发布前的最后一分钟测试阶段。在同一台设备上进行测试从来没有一个问题......请帮忙。

4

2 回答 2

0

对不起,伙计们,通过 Stack Overflow 提出这个问题让我输入了我一直在思考的所有内容,最终让我相信这不是文件权限问题。通过使用 Log.i,我打印出异常并发现这实际上是“找不到文件”错误。这当然是完全不同的事情!路径错误,问题解决!谢谢你对我的耐心。

于 2013-02-28T19:40:23.323 回答
0

更具体地说,尝试提供帮助:
我正在从设备“下载”文件夹中的文件中提取数据。
在 Nexus 7 上,这是:“/storage/emulated/0/Download”。
在 LG Motion 上,这是:“/sdcard/Download”。
通过使用 "root.getAbsolutePath() + "/download" 我的问题得到了解决。

于 2013-03-02T14:30:29.973 回答