我正在创建一个处理文本文件的android应用程序。我希望我的用户能够使用电子邮件,Dropbox分享他们的文件......但我也希望他们能够在浏览器中打开它们,如果它们恰好是html文件。
我在单独执行这两个代码时没有任何问题。这些是共享文件的那个:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + path));
startActivity(Intent.createChooser(intent, "Send File"));
这是在浏览器中打开文件的那个:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
intent.setData(Uri.parse("file://" + path);
startActivity(Intent);
我的问题是我不想事先询问用户他想要哪个选项。我希望意图选择器列出两种类型的操作。我尝试使用text / html而不是text / plain,但是当URI以http开头时,浏览器只会监听意图。
关于如何实现这一目标的任何想法?
答案 0 :(得分:1)
在合并两个名册方面,你别无选择,只能自己做。
但是,您当前的两个实现都存在问题:
对于无法处理text/plain
的应用,EXTRA_STREAM
会失败 - 您应该考虑使用Uri
,或许指向ContentProvider
您可以使文件可用,因为对数据Uri
的支持会更常见。
您的第二个将在此浏览器不存在的设备上崩溃。此外,您还假设此浏览器能够在所有版本的Android中始终加载file://
Uri
值,这不是一个安全的假设。如果浏览器作者希望它加载本地文件,他们会在清单中添加对它的支持。如果您没有HTTP URL,请使用WebView
小部件。任何专业级代码都不应在任何地方引用com.android
。