Intent.putExtra()提示错误的第三方应用程序

时间:2016-09-06 17:10:53

标签: android android-intent

我将代码从mylist = [ [1, "John", None, "Doe"], [2, "Jane", "group1", "Zee"], [3, "Lex", "group2", "Fee"]] for sublist in mylist: for field in sublist: if field == None: print("None detected in: " + str(sublist)) 迁移到Intent.setDataAndType(),但我无法获得相同的结果。

我还为Android N处理的数据与其他OS级别的处理方式不同。

这是我的代码:

Intent.putExtra()

问题是,无论我发送的文件类型是什么,都会尝试打开错误的应用程序。 例如,这需要打开日历或打开PDF文件的设置。

如果我使用// coming to this method final FileType fileType final File file; final Intent intent = new Intent(Intent.ACTION_SEND); intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) { intent.setAction(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.putExtra(Intent.EXTRA_INTENT, FileProvider.getUriForFile(MyApplication.getAppContext(), MyApplication.getAppContext().getApplicationContext().getPackageName() + ".provider", file)); //intent.setDataAndType(FileProvider.getUriForFile(MyApplication.getAppContext(), MyApplication.getAppContext().getApplicationContext().getPackageName() + ".provider", file), fileType.getMimeType()); } else { intent.putExtra(Intent.EXTRA_INTENT, Uri.fromFile(file)); intent.putExtra(Intent.EXTRA_MIME_TYPES, fileType.getMimeType()); //intent.setDataAndType(Uri.fromFile(file), fileType.getMimeType()); } startActivity(intent); 数据已正确发送到正确的应用程序,但我在大型数据集上遇到Intent.setDataAndType()例外。

有什么建议吗?谢谢。

修改 这就是我想要实现的目标。我从网络下载文件(txt,html,pdf ...),我在本地保存文件然后我想在设备的默认阅读器中打开/读取该文件类型的文件。如果用户没有为该文件类型选择阅读器,则用户将在android默认提示下提示选择可以读取该文件的应用程序。 如果用户没有应用程序来读取此文件类型,我们只会显示一条消息,指出无法在此设备上打开该文件。

1 个答案:

答案 0 :(得分:1)

您仍然需要使用setData(),因为FLAG_GRANT_READ_URI_PERMISSION仅适用于使用setData()设置的URI或通过setClipData()添加的URI - 请注意该类型是自动为您提供的FileProvider

根据EXTRA_INTENT documentation,该附加内容必须只包含Intent个对象,并且仅用于ACTION_CHOOSER