我正在尝试使用我的应用从外部存储打开文件。 我正在使用Share via功能。
我的代码导出
File filelocation = new File(sPath);
Uri path = Uri.fromFile(filelocation);
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("vnd.android.cursor.dir/email");
emailIntent.putExtra(Intent.EXTRA_STREAM, path);
String mystring = ctx.getResources().getString(R.string.Import_rule);
emailIntent.putExtra(Intent.EXTRA_TEXT, mystring);
导入功能
if (Intent.ACTION_SEND.equals(in.getAction()))
{
uri = (Uri) in.getParcelableExtra(Intent.EXTRA_STREAM);
uri.getPath();
}
当我尝试获取uri.getPath()
时,我发现不同设备版本存在差异。
:devicve:
file:///storage/emulated/0/Download/DeviceList.zip
在Android 6.0设备中
content://0@media/external/file/1147
我不知道为什么不同版本的URI方案有所不同?
我该如何解决这个问题?
您能告诉我如何从内容中读取并保存为文件
答案 0 :(得分:1)
自Android 1.0以来,我不知道为什么不同版本的URI方案不同?
content
一直是一个有效的方案。由于更好的安全性,它多年来一直是优选的。它将来会变得非常重要,如Android N is beginning to ban file
Uri
values。
此外,请注意,方案的更改与Android OS版本没什么关系。它更多地与您用于触发ACTION_SEND
Intent
的应用版本有关。
我该如何解决这个问题?
支持他们两个。
您能告诉我如何从内容中读取并保存为文件
Use ContentResolver
and openInputStream()
获取InputStream
指向的内容Uri
。然后,使用Java I / O将该数据复制到本地文件。