收藏
回答

如何解决[其他应用打开]微信聊天中的文件时, 跳转到自己的app后 无法获取到文件名称 ?

使用微信聊天的时候分享一些模型文件, 然后通过微信的其他应用打开, 跳转到自己的app去展示模型, 但是在打开过程中会出现通过微信的uri 无法获取到文件的真实名称, 文件名称变成了一串乱码, 虽然后缀正确,

1、通过uri获取文件名称、路径的方法

public static void getFileFromUri(Uri uri, Context context) {
    if (uri == null) {
        return;
    }
    String filePath;
    String fileName;
    String[] filePathColumn = {MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.DISPLAY_NAME};
    ContentResolver contentResolver = context.getContentResolver();
    Cursor cursor = null;
    try {
        cursor = contentResolver.query(uri, filePathColumn, null, null, null);

        if (cursor != null) {
            cursor.moveToFirst();
            try {
                fileName = cursor.getString(cursor.getColumnIndex(filePathColumn[1]));
            } catch (Exception e) {
                fileName = "";
            }
            try {
                filePath = cursor.getString(cursor.getColumnIndex(filePathColumn[0]));
            } catch (Exception e) {
                filePath = "";
            }
            cursor.close();
            Log.i("", String.format("%s-%s", filePath, fileName));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

2、通过调试发现微信会有两种uri传递, 如果文件名称是一串编码的, 就无法获取到

正常可以获取到name的uri:

接收的uri->content://com.tencent.mm.external.fileprovider/record/record2/sub10/510213/11/PRS2012-BT3040%E9%80%9A%E7%94%A8%E5%88%80%E5%BA%93%E6%94%AF%E6%9E%B6.STEP

cursor-name->PRS2012-BT3040通用刀库支架.STEP

cursor-path-> 

无法获取到实际名称的uri:


接收的uri->content://com.tencent.mm.external.fileprovider/c2c/opendata/79/42/797081705d8bd6513ebcb6e68f248e2f_8751236847546629642_m.step

cursor-name->797081705d8bd6513ebcb6e68f248e2f_8751236847546629642_m.step

cursor-path-> 

接收的uri->content://com.tencent.mm.external.fileprovider/c2c/opendata/79/94/797081705d8bd6513ebcb6e68f248e2f_6883161294787092994_m.step

cursor-name->797081705d8bd6513ebcb6e68f248e2f_6883161294787092994_m.step

cursor-path-> 

该如何操作,才能获取到文件的真实名称?









最后一次编辑于  03-18
回答关注问题邀请回答
收藏

2 个回答

  • 社区技术运营专员--许涛
    社区技术运营专员--许涛
    03-18

    你好,安卓还是iOS

    03-18
    有用
    回复 2
    • 飞
      03-18
      android端出现的问题
      03-18
      回复
    • 社区技术运营专员--许涛
      社区技术运营专员--许涛
      03-19回复
      复现问题时麻烦在手机微信那里上传下日志: 我->设置->帮助与反馈右上角有个上报日志的入口,麻烦提供一下微信号,时间点,bundleid、identifier、appid和opensdk的调用时间点(可以社区私信提供)和open帐号后台移动应用签名包名截图,私信后请在评论区回复
      03-19
      回复
  • 智能回答 智能回答 本次回答由AI生成
    03-18
    有用
登录 后发表内容