5

我在使用隐式意图在 android 中编辑文件时遇到了一个问题,它得到了解决,它花了很多时间和排列组合来解决它,但最后我还是有疑问,问题得到了解决,但我想知道为什么解决的问题没有解决。

如果您对此有任何线索,请告诉我。

来到我的问题。

  1. 我有一个活动。我在活动中有一个按钮。我想打开存储在“/mnt/sdcard/xxx/log.txt”位置的预先存在的日志文件(这是一个文本文件示例 log.txt)

  2. 以下是我编写的隐式意图代码,我最终得到了一个异常“未找到活动”

code1:我尝试过并遇到异常

Uri uri = Uri.parse("file:///sdcard/xxx/log.txt");
Intent viewTestLogFileIntent = new Intent(Intent.ACTION_EDIT,uri);
viewTestLogFileIntent.setType("text/plain");

code2:我尝试过并遇到异常

Uri uri = Uri.parse("file:///sdcard/xxx/log.txt");
Intent viewTestLogFileIntent = new Intent(Intent.ACTION_EDIT);
viewTestLogFileIntent.setData(uri);
viewTestLogFileIntent.setType("text/plain");

code3:我尝试过并且工作正常

Uri uri = Uri.parse("file:///sdcard/xxx/log.txt");
Intent viewTestLogFileIntent = new Intent(Intent.ACTION_EDIT);
viewTestLogFileIntent.setDataAndType(uri,"text/plain");

我有两个疑问是

  1. 首先,我的文件位于 /mnt/sdcard/xxx/log.txt 这我可以在 Eclipse 的 DDMS 视图中的文件系统中清楚地看到,但是当我将 uri 中的文件链接作为“文件: ///sdcard/xxx/log.txt" 我从路径中跳过 /mnt

  2. code1 和 code2 有什么问题?我在 code3 中设置的数据和类型是什么,我设置相同的数据和类型,但分别使用不同的方法,如 setData() 和 setType()。为什么它们(代码 2 和代码 1)不起作用?为什么code3工作?

4

2 回答 2

13

请参阅setType(String type)类中方法的 Javadoc Intent

...
此方法会自动清除以前设置的任何数据(例如通过 setData(Uri))。
...

于 2013-02-05T10:10:08.873 回答
2

如果要同时设置 URI 和 MIME 类型,请不要调用 setData() 和 setType(),因为它们都会使对方的值无效。始终使用 setDataAndType() 来设置 URI 和 MIME 类型。

于 2014-07-13T20:43:02.803 回答