从其他应用程序中检索内容的文件名

时间:2012-12-11 13:49:50

标签: android android-intent

我已经注册了我的应用,以便在this post之后的其他应用中接收文件(任何类型,而不仅仅是图片)。

我已经实现了已解决的解决方案,但我找不到检索数据流“文件名”的方法。 作为一个例子来自Uri:

  

内容://下载/ all_downloads / 5

我可以将流输出,但我对生成它的原始文件的名称一无所知。

有没有办法检索它?

3 个答案:

答案 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();
        }
    }