【问题标题】:Android Intent ACTION_GET_CONTENT does not return extension of fileAndroid Intent ACTION_GET_CONTENT 不返回文件扩展名
【发布时间】:2016-04-19 06:21:38
【问题描述】:

我正在尝试通过调用意图 ACTION_GET_CONTENT 来获取用户选择的文件的路径。

问题是从文件管理器中选择音频文件时,意图不返回文件的扩展名(我检查过的文件名中有)。在视频或图像的情况下,它工作正常。

代码如下:

意图调用:

Intent intent = getIntent();
if(intent.getAction() == null) {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
        intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    else
        intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("*/*");
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    startActivityForResult(Intent.createChooser(intent, "Select a File to Upload"),CloudConstants.CLOUD_REQUEST_FILE_CHOOSER);

关于结果代码:

    if (data != null) {
    //Get URI Data from Intent - URI is of the file chosen by the User in the
    //File picker
    uriFileURI = data.getData();
    if(uriFileURI != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    final int intFlags = data.getFlags()&(Intent.FLAG_GRANT_READ_URI_PERMISSION|Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContentResolver().takePersistableUriPermission(data.getData(), intFlags);
}
    //Check if URI was returned or not; NULL is returned if file was chosen from
    //via gallery share option
    //In such a case, the URI is retrieved from ClipData object of the Intent
    if (uriFileURI == null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN && data.getClipData().getItemCount() > 0)
        uriFileURI = data.getClipData().getItemAt(0).getUri();
    //Log File URI
    Log.i("CloudMedia", "File Uri: " + String.valueOf(uriFileURI));
    //Generate Absolute File name to publish on Title
    strFileName = getFileInformation(uriFileURI, MediaStore.Files.FileColumns.DISPLAY_NAME);

获取文件信息功能:

public String getFileInformation(Uri strFileURI, String strProjection) {
        Cursor cursorFileId = getContentResolver().query(strFileURI,
                new String[] {
                        strProjection
                }, null, null, null);
        if(cursorFileId.moveToFirst()) {
            return cursorFileId.getString(cursorFileId.getColumnIndex(strProjection));
        } else
            return null;
    }

所以strFileName 不包含所选音频文件的扩展名。 我也想要音频文件扩展名。

【问题讨论】:

    标签: java android android-intent


    【解决方案1】:
                Uri selectedImage = data.getData();
                String[] filePathColumn = { MediaStore.Images.Media.DATA };
                Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
                cursor.moveToFirst();
                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                String imgFullPath = cursor.getString(columnIndex);
                cursor.close();//String file = uri.toString();
    

    来源http://programmerguru.com/android-tutorial/how-to-pick-image-from-gallery/

    【讨论】:

      【解决方案2】:

      试试这个代码。我使用 android.provider.OpenableColumns.DISPLAY_NAME 而不是 MediaStore.Files.FileColumns.DISPLAY_NAME 并在 getContentResolver().query 中为投影设置 null

      strFileName = getFileInformation(uriFileURI, android.provider.OpenableColumns.DISPLAY_NAME);
      
      public String getFileInformation(Uri strFileURI, String strProjection) {
          Cursor cursorFileId = getContentResolver().query(strFileURI,
                  null, null, null, null);
          if(cursorFileId.moveToFirst()) {
              return cursorFileId.getString(cursorFileId.getColumnIndex(strProjection));
          } else
              return null;
      }
      

      【讨论】:

        猜你喜欢
        • 2019-04-24
        • 1970-01-01
        • 2015-02-27
        • 2015-08-24
        • 2012-09-13
        • 2014-03-02
        • 1970-01-01
        • 2017-06-17
        • 2021-12-03
        相关资源
        最近更新 更多