我将代码从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默认提示下提示选择可以读取该文件的应用程序。 如果用户没有应用程序来读取此文件类型,我们只会显示一条消息,指出无法在此设备上打开该文件。
答案 0 :(得分:1)
您仍然需要使用setData()
,因为FLAG_GRANT_READ_URI_PERMISSION
仅适用于使用setData()
设置的URI或通过setClipData()
添加的URI - 请注意该类型是自动为您提供的FileProvider
。
根据EXTRA_INTENT documentation,该附加内容必须只包含Intent
个对象,并且仅用于ACTION_CHOOSER
。