You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安卓WhatsApp状态保存器开发:SDK权限与查询问题求助

WhatsApp状态保存器开发问题解答

1. SDK 28及以下版本能用ContentResolver.query方法吗?

当然可以。SDK 28及以下还没强制推行分区存储,ContentResolver.query()完全能用,不管是通过MediaStore查询媒体文件,还是配合文件Uri操作都没问题(实际开发里用MediaStore更常见)。

2. SDK 28及以下对应的集合Uri是什么?

如果要查询WhatsApp状态里的图片、视频,常用的集合Uri分两类:

  • 图片文件:MediaStore.Images.Media.EXTERNAL_CONTENT_URI
  • 视频文件:MediaStore.Video.Media.EXTERNAL_CONTENT_URI

查询时可以加筛选条件锁定WhatsApp状态的默认文件夹(Android/media/com.whatsapp/WhatsApp/Media/.Statuses/),代码示例如下:

String selection = MediaStore.MediaColumns.DATA + " LIKE ?";
String[] selectionArgs = new String[]{"%WhatsApp/Media/.Statuses/%"};
Cursor cursor = getContentResolver().query(uri, projection, selection, selectionArgs, null);

3. 怎么获取Android/WhatsApp/文件夹的持久化权限?

SDK 28及以下不用像高版本那样折腾存储访问框架(SAF),只要申请READ_EXTERNAL_STORAGE权限就行:

  • 先在AndroidManifest.xml里声明权限:
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
  • 然后在代码里动态申请(SDK 23及以上必须动态申请):
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE_STORAGE);
    }
    

用户授予权限后,只要没手动去系统设置里撤销,这个权限就一直有效,你可以直接访问Android/WhatsApp/下的所有文件。

另外提一句你之前遇到的筛选后还返回MP4的问题:如果MediaStore的筛选条件没起作用,大概率是路径匹配的问题,得确认MediaColumns.DATA对应的路径和目标文件夹是否完全匹配;或者也可以在查询后,通过Cursor获取文件的MIME类型或后缀名再手动过滤,比如只保留image/jpeg、image/png这类图片类型的文件。

内容的提问来源于stack exchange,提问作者Perfect One

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:53:15