为什么当setData()和setType()不起作用时,android intent的setDataAndType()工作正常?

时间:2012-12-05 08:59:55

标签: android

我在android中使用隐式意图进行文件编辑有一个问题,它已经解决了,它需要花费大量的时间和排列和组合来解决它,但最后我仍然怀疑,问题得到解决但我的任务知道解决问题的原因尚未解决。

如果您对此有任何疑问,请告诉我。

来我的问题。

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

  2. 以下是我写的隐式意图代码,最后我发现了一个例外情况“找不到活动”

  3. 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中为“file:///sdcard/xxx/log.txt”,其中我从路径跳过/ mnt

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

2 个答案:

答案 0 :(得分:9)

请参阅课程setType(String type)中方法Intent的Javadoc:

...
此方法会自动清除之前设置的所有数据(例如,通过setData(Uri))。
...

答案 1 :(得分:0)

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