首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Android Q/ API29上更新MediaStore上的条目不起作用

在Android Q/ API 29上,更新MediaStore上的条目可能会遇到问题。这是由于Android Q引入了外部存储的新权限策略,即Scoped Storage(分区存储)。Scoped Storage的目的是增强应用数据的隐私保护和安全性。

在以前的Android版本中,应用可以自由访问外部存储上的文件和媒体资源。但是,从Android Q开始,应用默认只能访问其私有目录和公共媒体目录。因此,直接更新MediaStore上的条目可能会失败。

解决这个问题的一种方法是使用新的媒体访问框架(MediaStore API)来操作媒体资源。这个API提供了一套强大的功能来管理媒体文件,包括查询、插入、更新和删除等操作。

以下是解决方案的步骤:

  1. 添加权限:在AndroidManifest.xml文件中,确保已经添加了合适的权限声明。例如,如果您想更新媒体库中的音频文件,需要添加READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限。
  2. 使用MediaStore API:使用MediaStore API来查询和更新媒体库中的条目。例如,如果您想更新某个音频文件的元数据,可以使用以下代码:
代码语言:txt
复制
ContentResolver resolver = getContentResolver();
Uri mediaUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

ContentValues values = new ContentValues();
values.put(MediaStore.Audio.Media.TITLE, "New Title");

String selection = MediaStore.Audio.Media._ID + "=?";
String[] selectionArgs = new String[]{String.valueOf(mediaId)};

resolver.update(mediaUri, values, selection, selectionArgs);
  1. 使用MediaScanner:如果更新条目后在媒体库中不可见,可以使用MediaScanner来刷新媒体库。以下是一个示例:
代码语言:txt
复制
MediaScannerConnection.scanFile(
    context,
    new String[]{filePath},
    null,
    new MediaScannerConnection.OnScanCompletedListener() {
        @Override
        public void onScanCompleted(String path, Uri uri) {
            // 刷新媒体库完成
        }
    }
);

需要注意的是,以上解决方案仅适用于更新媒体库中的条目。对于其他文件或媒体资源的更新,可能需要不同的方法。

腾讯云提供了一系列与媒体相关的云服务,例如云存储 COS(对象存储)、云点播 VOD(音视频点播)、云直播、云音视频通信等。这些服务可以帮助开发者存储、处理和分发媒体资源。您可以访问腾讯云官方网站(https://cloud.tencent.com/)获取更多详细信息和产品介绍。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

AspectJandroid开发

Android运用AOP思想开发,可以快速帮助我们简化横向开发中重复性工作,简单说就是把涉及到众多模块某一类问题进行统一管理比如:性能检测、日志打印手机等。...AspectJ实际是对AOP编程思想一个实践,当然,除了AspectJ以外,还有很多其它AOP实现,例如ASMDex、javassist等,但目前最好、最方便,依然是AspectJ。...} } apply plugin: 'com.android.application' android { compileSdkVersion 26 buildToolsVersion...final def variants = project.android.applicationVariants //全局变量中配置编译项以及,对应log输出 variants.all { variant.../Android-AOPExample 熟悉了一遍 补充:Android-AOPExample例子下载下来,gradle版本再2.3.0及其以上版本编译会出现问题 报错误:No such property

1.3K20

OpenCV Android 应用

OpenCV 介绍 OpenCV是一个基于BSD许可(开源)发行跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统。...移动端上使用 OpenCV 可以完成一系列图像处理工作。 二. OpenCV Android 配置 我项目中使用 OpenCV 版本是 4.x。... Android Studio 中创建一个 Library,将官网下载 OpenCV 导入后,就可以直接调用 OpenCV 中 Java 类方法。...例子两则 3.1 作为二维码识别的兜底方案 Android 原生开发中,二维码识别有老牌 zxing 等开源库。为何还要使用 OpenCV 呢?...总结 OpenCV 是一款功能强大图像处理库。但是它本身体积也较大,移动端使用至少会增加 Android Apk 包 10 M+ 体积(主要取决于 App 要支持多少个 CPU 架构)。

2.2K10
  • eBPFandroid使用

    BCCandroid系统也可以运行,但是要对系统进行一定程度修改,后续可能会写单独文章进行讲解。对于内核开发者我还比较关注怎么自己来实现监控功能,下文也将做简单讲解。 ?...8)中断性能 三、eBPF框架 开始说明之前先解释下eBPF名词,来帮忙更好理解。...1. android系统对eBPF编译支持 目前android编译系统已经对eBPF进行了集成,通过android.bp就能很方便android源代码中编译eBPF字节码。...3)指定监听tracepoint事件。 4)使用bpf_trace_printk函数打印debug信息,会直接打印信息到ftrace中。 5)map中查找指定key。 6)更新指定key值。...Q版本节点信息。

    4.4K10

    ProGuard Android 使用姿势

    减少包体积好处有很多,比如增加用户黏性和满意度,提升下载速度,减少安装时间,以便在终端设备连接用户,尤其是新兴市场。...如果以上还不足以说服您使用 ProGuard,其实移除无用代码和混淆所有名称还有其他更多优化效果: 一些版本 Android 设备,DEX 代码会在安装或者运行时被编译成机器码。...这些警告一个原因就是,您构建路径中没有加入需要依赖 JARs,如使用了 provided (仅编译时)依赖。而有时候, Android 这些代码依赖在运行时并不会被真正调用。...某些情况下,ProGuard 警告确实有助于您发现闪退罪魁祸首和关于您配置其他问题。...tools 目录下(SDK/tools/proguard/proguard-android.txt),但在新版 SDK Tools 和 Android Gradle 插件版本2.2.0+,可以构建时从

    2.6K40

    Android实现HttpServer示例代码

    最近项目中因为要用Android作为一个服务器去做一个实时接收数据功能,所以这个时候就要去做一个Android本地微型服务器。...那么此时我首先想到了spring boot,因为他是一个服务器框架。但是实际我们根本用不到这么大型服务器框架,配置这些都太麻烦。...所以,我又找到了Ijetty、NanoHttpd和AndroidAsync这三个框架,都是比较微型,适用于Android。...; 4)笔者建议,最好处理一下跨域问题,因为是Android有可能和h5联调,所以设置了跨域以后比较方便调试,当然某些场景也可以忽略,看个人需求;方法已经以上代码中写了; 5)当然最后最重要一点肯定是开启和关闭代码了...5)说一下OPTIONS坑点,因为AndroidAsync这个框架中封装返回http状态码只有两种,假如过滤方法中没有包含例如OPTIONS请求方法,实际返回给客户端http状态码是400,

    1.8K21

    Android Q和中端手机:这是我们谷歌IO 2019看到所有东西

    正如预期那样,它运行是纯像素版本Android 9.0 Pie,并保证获得为期三年主要Android更新和安全补丁。...像素3a起价400美元,而较大像素3a XL起价480美元。 ANDROID Q 新版Android一直是谷歌I/O重要组成部分,2019年也不例外。...谷歌正在使安全、数字健康和创新成为Android Q重要组成部分——但我们没有预料到谷歌Android Q中构建了多少新可访问性选项,作为其将移动技术带给尽可能多的人努力一部分。...通过人工智能可访问性是贯穿整个主题一个主要主题,但这一点从来没有比Android Q更明显。谷歌希望利用移动技术尽可能地丰富包括残疾人在内更多人生活。...内置Android Q中,实时字幕将很容易通过音量摇杆访问,实时字幕使用谷歌语音识别功能将字幕放到任何视频——即使通常不会有字幕。

    1.1K40

    页面结构化Android尝试

    导语 :MVP开发模式可以帮助项目结构解耦,但其庞大方法数增加,较为笨重设计对于手Q项目并不很适合。参考之前Web开发经验,提出以页面结构化解耦方式组织代码。...下面讲讲LegoAndroid一次小小尝试 一,MVP简介 ? MVC太过常见这里不啰嗦。实际应用MVC当中,Activity占据打部分工作,View和Controller身份分不清。...Model MVP设计模式中, View:由Activity充当,并且响应生命周期 Model:还是原来数据层,网络,缓存,解析等。...Acitivty轻松了,业务逻辑庞大时候Presnter依然是大胖子。 3. 代码复杂度,学习成本。这玩意不好理解,需要实战中理解。 4. 在手Q项目里,MVP会激增很多方法数, ?...三,Lego页面结构化 前面铺垫这么多,终于到我要吹水时候了。MVC,MVP,还有MVVM等MVX系列设计模式,都是一种大而全统一管理。项目结构中最为关键其实是:分模块! ?

    1.3K60

    如何正确 Android 使用协程 ?

    第一类是 Medium 热门文章翻译,其实我也翻译过: Android 使用协程(一):Getting The Background Android 使用协程(二):Getting started... Android 使用协程(三) :Real Work 说实话,这三篇文章的确加深了我对协程理解。... Android 中,一般是不建议直接使用 GlobalScope 。那么, Android 中应该如何正确使用协程呢?再细分一点,如何直接在 Activity 中使用呢?...我会通过简单示例代码来阐述 Android 协程使用,你也可以跟着动手敲一敲。...协程 Android 使用 GlobalScope 一般应用场景下,我们都希望可以异步进行耗时任务,比如网络请求,数据处理等等。当我们离开当前页面的时候,也希望可以取消正在进行异步任务。

    2.8K30

    页面结构化 Android 尝试

    导语:MVP开发模式可以帮助项目结构解耦,但其庞大方法数增加,较为笨重设计对于手Q项目并不很适合。参考之前Web开发经验,提出以页面结构化解耦方式组织代码。...下面讲讲LegoAndroid一次小小尝试 一,MVP简介 ? MVC太过常见这里不啰嗦。实际应用MVC当中,Activity占据打部分工作,View和Controller身份分不清。...Model MVP设计模式中, View:由Activity充当,并且响应生命周期 Model:还是原来数据层,网络,缓存,解析等。...recentStoryList); public void setSegmentData(String key, Object data,boolean needRefreshUi); /** * 更新数据后刷新界面走回调...在手Q项目里,MVP会激增很多方法数。 ? 三,Lego页面结构化 前面铺垫这么多,终于到我要吹水时候了。MVC,MVP,还有MVVM等MVX系列设计模式,都是一种大而全统一管理。

    1.1K50

    【目标检测】YOLOv5Android部署

    前言 本篇博文用来研究YOLOv5Android上部署例程 主要参考是Pytorch官方提供Demo:https://github.com/pytorch/android-demo-app/tree...,可以相册中选择一张图片,也可以直接进行拍照 实时视频 点击实时视频,可以开启摄像头,直接在摄像预览中显示检测结果 切换模型(我添加功能) 点击切换模型,可以选择不同模型进行检测...'org.pytorch:pytorch_android_torchvision:1.9.0' 这里版本尽量和后面训练用pytorch版本对应,比如后面自己用pytorch版本是1.9.0,这里就写...然后修改ObjectDetectionActivitys,java,这里将mOutputColumnprivate修饰符去掉,使其可以在外部访问: 接下来修改xml界面,activity_main.xml...android.os.Bundle; import android.provider.MediaStore; import android.util.Log; import android.view.View

    2.8K60

    Android 使用Canvas图片绘制文字方法

    AndroidAndroid中 Paint 字体、粗细等属性一些设置 Android SDK中使用Typeface类来定义字体,可以通过常用字体类型名称进行设置,如设置默认黑体: Paint mp...Typeface.BOLD //粗体 * Typeface.BOLD_ITALIC //粗斜体 * Typeface.ITALIC //斜体 * Typeface.NORMAL //常规 但是有时上面那些设置绘图过程中是不起作用...一个小应用,图片绘制文字,以下是绘制文字方法,并且能够实现自动换行,字体自动适配屏幕大小 private void drawNewBitmap(ImageView imageView, String...Bitmap icon = Bitmap.createBitmap(width, hight, Bitmap.Config.ARGB_8888); // 初始化画布绘制图像到icon...canvas.translate(start_x, start_y); staticLayout.draw(canvas); } 以上这篇Android 使用Canvas图片绘制文字方法就是小编分享给大家全部内容了

    4.4K20

    OQL使用UPDLOCK锁定查询结果,安全更新实体数据

    当我们用UPDLOCK来读取记录时可以对取到记录加上更新锁,从而加上锁记录在其它线程中是不能更改只能等本线程事务结束后才能更改。...有时候我需要控制某条记录在我读取后就不许再进行更新,那么我就可以将所有要处理当前记录查询都加上更新锁,以防止查询后被其它事务修改.将事务影响降低到最小。...db.Commit(); 上面的操作,首先在AdoHelper对象开启事务,然后查询投资产品实体时候With方法加上 OQL.SqlServerLock.UPDLOCK 更新锁,接着进行复制业务处理...,然后更新此实体记录,之后还有复杂其它业务操作,最后提交事务。...我们看到,OQL这种更新锁操作,跟直接写SQL语句操作很类似,OQL执行时候也是这样输出SQL语句,这样确保数据记录在并发时候,安全更新

    1.8K10

    sqliteAndroid一个bug:SQLiteCantOpenDatabaseException when nativeExecuteForCursorWindow

    com.company.product.database.sqlite.AbstractCursor.moveToFirst(AbstractCursor.java:258) 先给出结论, 这是sqliteAndroid...系统一个bug,需要建立索引sql语句频繁执行时,会发生这个异常。...网络解决方案: 谷歌搜索SQLiteCantOpenDatabaseException,多是一些执行SQLiteDatabase open()时线程冲突问题,与我们这个问题不同。...即环境变量里没有设置这两个值, 而另外三个目录/var/tmp,/usr/tmp,/tmpAndroid系统里都是应用不可写, 所以会返回0给unixGetTemp, 于是unixGetTemp使用了...unixOpenTempname执行时用一个变量计算临时文件打开次数,也可以发现确实是一打开这样文件就会失败(在打开第一个时候就失败)。

    2K90

    sqliteAndroid一个bug:SQLiteCantOpenDatabaseException when nativeExecuteForCursorWindow

    com.company.product.database.sqlite.AbstractCursor.moveToFirst(AbstractCursor.java:258) 先给出结论, 这是sqliteAndroid...系统一个bug,需要建立索引sql语句频繁执行时,会发生这个异常。...网络解决方案: 谷歌搜索SQLiteCantOpenDatabaseException,多是一些执行SQLiteDatabase open()时线程冲突问题,与我们这个问题不同。...即环境变量里没有设置这两个值, 而另外三个目录/var/tmp,/usr/tmp,/tmpAndroid系统里都是应用不可写, 所以会返回0给unixGetTemp, 于是unixGetTemp使用了...unixOpenTempname执行时用一个变量计算临时文件打开次数,也可以发现确实是一打开这样文件就会失败(在打开第一个时候就失败)。

    85420

    飞书前端提到竞态问题, Android 怎么解决?

    字节这篇文章是从 Web 端视角切入,借鉴意义有限,这篇文章我们从 Android 视角展开讨论。...为了帮助你理解问题,以下列举出更多常见竞态场景: 1、搜索关联词: 搜索输入栏中,随着用户输入显示对应关联词,竞态问题可能会展示旧搜索词关联词; 2、类型切换: 列表流中,点击不同类型选项展示对应类型数据...,保证程序只接收最新状态或时序下响应: 方案 2 - 忽略过期响应: 响应数据结构中增加标识 ID,响应返回后,先检查标识 ID 是否与最新状态 ID 是否相同。...忽略过期响应 第 2 个方案是响应数据结构中增加标识 ID,随后响应返回后,先检查响应中标识 ID 是否与最新状态 ID 是否相同。如果不相同则直接将该响应丢弃。...总结 今天,我们分析了 Android 竞态请求问题,并思考了相应解决方案,最后找到 OkHttp 或 Retrofit 通过 TAG 批量取消请求方法。

    1.3K20
    领券