当前位置: 首页 > 知识库问答 >
问题:

如何阅读WhatsApp媒体路径

呼延博易
2023-03-14

我正在创建一个聊天应用程序,在该应用程序中,我从WhatsApp等图库上传图像和视频,但当我尝试选择WhatsApp文件夹已下载的图像时,我得到了以下路径

/storage/emulated/0/WhatsApp/Media/WhatsAppImages/IMG-20180717-WA0024.jpg

但当我读到这篇文章以获得显示图像的真实路径时,我得到了一个例外:

java.io.FileNotFound异常:打开失败:ENOENT(没有这样的文件或目录)

这是我的供应商

<provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>

下面是文件路径

<resources>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="/storage/emulated/0" path="."/>
</paths>

这只发生在WhatsApp媒体上,任何人请告诉我解决方案。

提前谢谢

共有2个答案

唐高卓
2023-03-14

错误抛列'_data'不存在,当我分享视频从Whatsapp到我的应用程序java.lang.IllegalArgument异常:列'_data'不存在

锺离德运
2023-03-14

这里的应用程序id包含您的项目包名称。

哪些是在你的应用程序gradle文件中定义的

 defaultConfig {
        applicationId "<your app Id>"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 25
        versionName '5.8'
        multiDexEnabled true
    }

/////

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="<package name>.fileprovider" // which are defined in app gradle application id
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths_public" />
        </provider>

您的xml文件应该是

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path
        name="external_files"
        path="." />
</paths>

你的java代码是这样的。这里的文件是您试图访问的文件路径

Uri uri = null;
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                    uri = FileProvider.getUriForFile(this, getApplicationContext().getPackageName() +
                            ".provider", file);
                } else {
                    uri = Uri.fromFile(file);
                }

在uri中获得路径后,用这个做任何你想做的事情。

为了获得真正的路径,尝试一下这个方法可能会奏效。

public String getRealPathFromURI(Uri contentURI) {
        String result;
        Cursor cursor = context.getContentResolver().query(contentURI, null,
                null, null, null);

        if (cursor == null) { // Source is Dropbox or other similar local file
            // path
            result = contentURI.getPath();
        } else {
            cursor.moveToFirst();
            try {
                int idx = cursor
                        .getColumnIndex(MediaStore.Images.ImageColumns.DATA);
                result = cursor.getString(idx);
            } catch (Exception e) {
                AppLog.handleException(ImageHelper.class.getName(), e);
                Toast.makeText(context, context.getResources().getString(
                        R.string.error_get_image), Toast.LENGTH_SHORT).show();

                result = "";
            }
            cursor.close();
        }
        return result;
    }
 类似资料:
  • 反向代理是可行的。我怎样才能得到响应体?

  • 我第一次使用pyspark。Spark版本:2.3.0Kafka版本:2.2.0 我有一个Kafka制作人,它以avro格式发送嵌套数据,我正试图在pyspark中编写spark流/结构化流的代码,它将来自Kafka的avro反序列化为数据帧,并进行转换,将其以拼花格式写入s3。我在spark/scala中找到了avro转换器,但pyspark中的支持尚未添加。如何在pyspark中转换相同的值。

  • 我正在为WhatsApp使用Twilio沙箱,当我发送一个图像时,我在webhook中收到的有效负载工作正常,我可以获得图像的url,但不能使用音频文件(语音消息)。 我正面临一个音频问题,如果我从WhatsApp发送语音消息,我的webhook中的有效负载不包括音频URL。 这里是有效载荷: 我希望url媒体如下所示:

  • 欢迎来到Go的世界,让我们开始探索吧! Go是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言。它具有以下特点: 它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序。 Go为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格include文件与库的开头。 Go是静态类型的语言,它的类型系统没有层级。因此用户不需要在定义类型之间的关系上花费时间,这样感觉起来比典型的面向对