我已经注册了我的应用程序,以便在这篇文章之后从其他应用程序接收文件(任何类型,而不仅仅是图像)。
我已经实现了已回答的解决方案,但我找不到检索数据流的“文件名”的方法。作为来自 Uri 的示例,例如:
内容://下载/all_downloads/5
我可以取出流,但我对生成它的原始文件的名称一无所知。
有没有办法找回它?
我已经注册了我的应用程序,以便在这篇文章之后从其他应用程序接收文件(任何类型,而不仅仅是图像)。
我已经实现了已回答的解决方案,但我找不到检索数据流的“文件名”的方法。作为来自 Uri 的示例,例如:
内容://下载/all_downloads/5
我可以取出流,但我对生成它的原始文件的名称一无所知。
有没有办法找回它?
在大多数情况下,这将解决您的问题:
Uri intentData = intent.getData();
if (intentData != null) {
String filePath;
if("content".equals(intent.getScheme()))
{
filePath = getFilePathFromContentUri(intentData);
}
else
{
filePath = intentData.getPath();
}
}
private String getFilePathFromContentUri(Uri selectedUri) {
String filePath;
String[] filePathColumn = {MediaColumns.DATA};
Cursor cursor = getContentResolver().query(selectedUri, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
filePath = cursor.getString(columnIndex);
cursor.close();
return filePath;
}
有没有办法找回它?
一般来说,不,因为可能没有名称,部分原因是可能没有文件。您可能能够获得InputStream
内容,但这并不意味着InputStream
.
对于某些特定的提供者(例如,MediaStore
)可能存在一些特定的黑客攻击来尝试确定与某些数据相关联的文件名Uri
,尽管这样的黑客攻击可能不可靠。
onCreate()
Intent intent1 = getIntent();
String action = intent1.getAction();
String type = intent1.getType();
if (Intent.ACTION_SEND.equals(action) && type != null) {
this.handleSend(intent1);
}
void handleSend(Intent intent) {
try {
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
imageShare.setImageURI(imageUri);
} catch (Exception e) {
e.printStackTrace();
}
}