我已经注册了我的应用,以便在this post之后的其他应用中接收文件(任何类型,而不仅仅是图片)。
我已经实现了已解决的解决方案,但我找不到检索数据流“文件名”的方法。 作为一个例子来自Uri:
内容://下载/ all_downloads / 5
我可以将流输出,但我对生成它的原始文件的名称一无所知。
有没有办法检索它?
答案 0 :(得分:4)
在大多数情况下,这将解决您的问题:
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;
}
答案 1 :(得分:2)
有没有办法检索它?
通常,不,因为可能没有名称,部分原因可能是文件没有。您可以在内容上获得InputStream
,但这并不意味着InputStream
背后有文件。
某些特定提供商(例如,MediaStore
)可能存在某些特定的黑客攻击,以尝试确定与某些数据Uri
相关联的文件名,但此类黑客可能不可靠。
答案 2 :(得分:0)
的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();
}
}