在 onActivityResult() 之后从保管箱或驱动程序获取文件扩展名

Getting a file extension from dropbox or driver after onActivityResult()

我使用此代码上传文件:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        final String path = getPath(data.getData());
        final String fileExt = path.substring(path.lastIndexOf(".") + 1);
    }
}

此代码适用于 SDCard 中的 select 文件。但是,如果我在第 4 行从 DriveDropbox select 文件,我会收到错误消息。

谁都知道为什么会这样。

This code work fine for select file from SDCard.

不一定。毕竟,文件不必有扩展名。 README 是一个有效的文件名,它没有文件扩展名。

But if I select file from Drive or Dropbox on line 4 I get error

当然可以。 Uri 不需要文件扩展名。例如, 是一个 Uri,它没有文件扩展名。

如果data.getData().getScheme() returns file,欢迎您尝试您的算法,但是README.

会失败

如果 data.getData().getScheme() returns content,您可以使用 getContentResolver().getType(data.getData()) 获取内容的 MIME 类型。然后您可以尝试使用 MimeTypeMap 来识别文件扩展名,尽管 MimeTypeMap 不会处理所有可能的 MIME 类型。

总的来说,您需要修改您的计划,这样您就不需要文件扩展名了。