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

如何处理来自MediaRecorder的setOutputFile以获取Uri Android10

在Android 10及更高版本中,由于隐私和安全的考虑,应用程序无法直接访问其他应用程序的私有文件目录。因此,无法直接使用MediaRecorder的setOutputFile方法来获取Uri。

为了解决这个问题,可以通过使用ContentResolver和ContentValues来创建一个媒体文件,并获取其Uri。以下是处理来自MediaRecorder的setOutputFile以获取Uri的步骤:

  1. 首先,创建一个ContentValues对象,并设置其键值对。键是MediaStore.MediaColumns.DISPLAY_NAME,值是你想要给媒体文件的名称。
  2. 使用ContentResolver的insert方法将ContentValues插入到MediaStore中。这将返回一个表示新创建媒体文件的Uri。
  3. 使用MediaRecorder的setOutputFile方法,将Uri转换为文件路径。可以通过调用Uri的getPath方法来获取文件路径。

下面是一个示例代码,演示如何处理来自MediaRecorder的setOutputFile以获取Uri:

代码语言:txt
复制
import android.content.ContentResolver;
import android.content.ContentValues;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.widget.Toast;

// 在合适的地方调用此方法,例如在录制按钮点击事件中
private void startRecording() {
    // 创建媒体文件的名称
    String fileName = "my_recording.mp4";

    // 创建ContentValues对象,并设置媒体文件的名称
    ContentValues values = new ContentValues();
    values.put(MediaStore.MediaColumns.DISPLAY_NAME, fileName);

    // 获取ContentResolver对象
    ContentResolver resolver = getContentResolver();

    // 在Android 10及更高版本中,使用MediaStore API创建媒体文件
    Uri uri;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        // 设置媒体文件的类型
        values.put(MediaStore.MediaColumns.MIME_TYPE, "video/mp4");

        // 使用ContentResolver的insert方法将ContentValues插入到MediaStore中
        uri = resolver.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
    } else {
        // 在Android 9及更低版本中,使用应用程序的私有目录创建媒体文件
        // 这里省略了相关代码
        return;
    }

    // 将Uri转换为文件路径
    String filePath = uri.getPath();

    // 设置MediaRecorder的输出文件路径
    mediaRecorder.setOutputFile(filePath);

    // 开始录制
    mediaRecorder.start();
}

在上述示例代码中,我们首先创建了一个ContentValues对象,并设置了媒体文件的名称。然后,我们使用ContentResolver的insert方法将ContentValues插入到MediaStore中,返回一个表示新创建媒体文件的Uri。最后,我们将Uri转换为文件路径,并将其设置为MediaRecorder的输出文件路径。

请注意,上述代码仅适用于Android 10及更高版本。对于Android 9及更低版本,由于应用程序可以直接访问私有目录,可以使用传统的文件路径来处理MediaRecorder的setOutputFile。

推荐的腾讯云相关产品:腾讯云对象存储(COS)

  • 概念:腾讯云对象存储(COS)是一种海量、安全、低成本、高可靠的云存储服务,适用于存储和处理任意类型的文件。
  • 分类:云存储服务
  • 优势:高可靠性、低成本、安全性高、支持海量数据存储、可扩展性强
  • 应用场景:网站和应用程序的静态资源存储、大规模数据备份和归档、多媒体内容存储和分发等。
  • 产品介绍链接地址:https://cloud.tencent.com/product/cos

请注意,以上答案仅供参考,具体的实现方式可能因应用程序的需求和环境而有所不同。

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

相关·内容

  • 从零开发一款相机APP 第九篇: Camera2相机 录像功能实现

    本课程内容由 @公众号:小驰笔记出品,欢迎关注公众号,获取更多交流信息~ 欢迎访问个人博客:www.xiaochibiji.com 我们先来看下MediaRecorder状态图: 一、正常录像 把mediaRecorder...该surface是mediaRecorder录像的数据来源。...//1) 创建MediaRecorder对象 mMediaRecorder = new MediaRecorder(); //2) 设置Audio数据来源,这里设置来自MIC mMediaRecorder.setAudioSource...(MediaRecorder.AudioSource.MIC); //3) 设置Video数据来源,这里设置来自SURFACE mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE...3)获取支持的高帧率录像videoSize 从map.getHighSpeedVideoSizes()中获取支持的videoSize,然后选择个合适的size,注意这里的previewSize需要和videoSize

    73620

    Android深入理解JNI(二)类型转换、方法签名和JNIEnv

    除了数组以外,其他的引用数据类型的签名格式都会以“;”结尾。 另外,引用数据类型还具有继承关系,如下所示: ?..._setOutputFile方法对应的JNI层的方法为: frameworks/base/media/jni/android_media_MediaRecorder.cpp ?...如果我们每次编写JNI时都要写方法签名,也会是一件比较头疼的事,幸好Java提供了javap命令来自动生成方法签名。...其中,jclass代表Java类,name代表成员方法或者成员变量的名字,sig为这个方法和变量的签名。我们来查看MediaRecorder框架的JNI层是如何使用上述的两个方法的,如下所示。...注释4出获取Java层的MediaRecorder中名为postEventFromNative的静态方法,并赋值给post_event。其中fields的定义为: ?

    2.3K60

    Android开发笔记(五十七)录像录音与播放

    媒体录制MediaRecorder MediaRecorder是Android自带的录制工具,通过操纵摄像头和麦克风完成媒体录制,既可录制视频,也可单独录制音频。...setMaxFileSize : 设置录制的媒体大小。单位字节。 setOutputFile : 设置输出文件的路径。 以上方法用于设置录像/录音参数。...create : 创建指定Uri的播放器。 setDataSource : 设置播放数据来源。create与setDataSource只需设置其一。 setVolume : 设置音量。...getCurrentPosition : 获取当前播放进度所在的位置。 getDuration : 获取播放时长。 以上方法用于设置播放参数。...监听器需要重写的方法 : onError 录制完毕事件 监听器类名 : MediaRecorder.OnInfoListener 设置监听器的方法 : MediaRecorder.setOnInfoListener

    3.3K62

    关于Camera性能优化的一些建议

    ,如果将onPreviewFrame作为帧回调的监测接口,会发现部分手机上出帧比较慢,例如设置了30fps,但是出帧速度最多20fps,HAL层会将数据同步处理之后才返回。...Camera2支持你设置相机处理的Handler,你可以自己定义HandlerThread来设置Camera2的相机操作Handler。...拍照之前我一直在预览中,如果在用户点击拍照的瞬间,我将指令传递下去,之前预览的那一帧作为拍照的帧来处理,这样的耗时几乎为0,大大降低了拍照的耗时。...操作Camera2调用预览的完整流程: 第一步:获取CameraManager实例 mCameraManager = (CameraManager) mContext.getSystemService(...Context.CAMERA_SERVICE); 第二步:获取特定的摄像头ID mCameraId = String.valueOf(CameraCharacteristics.LENS_FACING_BACK

    2.6K10

    多媒体开发

    Ø 掌握如何使用MediaPlayer播放音乐 Ø 掌握如何使用SoundPool播放音效 Ø 掌握如何使用VideoView播放视频 Ø 掌握如何使用MediaRecorder录制音频 Ø 了解如何使用...其中参数priority目前还没有任何作用,Android建议我们将该参数设为1,以保持和未来版本的兼容性。...在Android Market上大家也能找到大量的视频播放软件,比如UC Player、暴风、QQ影音等。下面我们就使用Android提供的VideoView组件来自己做一个简单的视频播放器。...Ø 调用MediaRecorder对象的setOutputFile()方法设置录制的音频文件的保存位置。 Ø 调用MediaRecorder对象的prepare()方法准备录制。...); mediaRecorder.setOutputFile(file.getAbsolutePath()); mediaRecorder.prepare(); mediaRecorder.start

    7810

    Android开发笔记(一百二十六)自定义音乐播放器

    MediaRecorder/MediaPlayer 在Android手机上面,音频的处理比视频还要复杂,这真是出人意料。...首先是MediaRecorder与MediaPlayer,这对组合即可用于录像,也可单独录制音频。它们处理的音频文件是压缩过的编码文件,通常用于录制和播放音乐,是最经常用到的。...MediaRecorder与MediaPlayer在处理音频和视频时,整体流程是一样的,只有在部分方法的调用上有所差异,下面分别把录音/播音有关的方法列出来。...setMaxFileSize : 设置录制的媒体大小。单位字节。 setOutputFile : 设置输出文件的路径。...getCurrentPosition : 获取当前播放进度所在的位置。 getDuration : 获取播放时长。

    3K30

    ShareREC for Android全系统录屏原理解析

    文 / 余勋杰 前言 自安卓4.4开始,系统提供了内置的录屏功能,用户可以在adb下执行screenrecord命令,以指定码率、帧率、分辨率和时长来录制屏幕。...MediaRecorder将以h264/aac为编码格式,将录制的结果以mp4格式存储在sd卡的test.mp4中。...而这些应用内的录屏方式,其抓取模块只能抓取到像素数据,考虑到编码模块在ShareREC内是一个通用的模块,故而全系统录屏也将抓图输出处理为像素数据输出。...上面的例子并不演示如何获取硬件编码器支持的颜色格式类型,具体的实现方式可以搜索一下,不难找。...,我们要给它输入数据,需要先获取其输入缓存队列,然后在空闲的位置复制像素数据。

    1.4K20

    Android 录音功能直接拿去用

    (MediaRecorder.OutputFormat.MPEG_4); //录音文件保存的格式,这里保存为 mp4 mRecorder.setOutputFile(mFilePath)...f.isDirectory()); } 设置好了文件的名字和保存路径之后,对 mRecorder 进行一系列参数的设置,这个 mRecorder 是 MediaRecorder 的一个实例,专门用于录音的存储...mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); //录音文件保存的格式,这里保存为 mp4 mRecorder.setOutputFile...mStartingTimeMills,这里主要是为了记录录音的时长,等到录音结束后再获取一次当前的时间,然后将两个时间进行相减,就能得到录音的具体时长了。...if else 了,直接改变 mStartRecording 的值,然后在 onRecord() 里面进行处理 接下来看下 onRecord 干了什么 private void onRecord

    3.1K31

    Android简易“吹一吹实现”以及录音和播放示例

    最近在做一些跟传感器相关的东西,有注意到以前腾讯微博以前出过一个吹一吹交互,虽然和传感器无关,但是感觉也比较有兴趣,就写了一个拙劣的demo,因为接触媒体文件操作比较少,顺带写了一个录音和播放的例子,总结了一下一些小坑的地方...主要思路和坑的地方 主要的思路是通过MediaRecorder提供的getMaxAmplitude()函数,获取一段时间内输入的音频最大幅值来进行检测,所以除了吹的动作,其他声音也会被录进来。...一看到这个网站后面是htm,仿佛就明白了这个网站的框架… 这个东西坑的地方在于Mediaplayer和MediaRecorder这两个东西stop和start的顺序经常是严格被限制的,在退出时如果没有成功释放资源...mediaRecorder.setOutputFile(PATH_NAME); mediaRecorder.prepare(); mediaRecorder.start...论坛上有人说这个东西在4.4以下的系统就容易出现,但是我也只能感觉不明觉厉,我一开始用的是MediaPlayer.create(this,Uri.parse(PATH_NAME))来创建MediaPlayer

    1.2K40

    Android 两种录音方式

    MediaRecorder已经集成了录音、编码、压缩等,并支持少量的录音音频格式,但是这也是他的缺点,支持的格式过少并且无法实时处理音频数据。...AudioRecord:主要实现对音频实时处理以及边录边播功能,相对MediaRecorder比较专业,输出是PCM语音数据,如果保存成音频文件,是不能够被播放器播放的,所以必须先写代码实现数据编码以及压缩...在录音过程中,应用所需要做的就是通过后面三个类方法中的一个去及时地获取 AudioRecord 对象的录音数据。...缓冲区大小:音频数据写入缓冲区的总数,可以通过AudioRecord.getMinBufferSize获取最小的缓冲区。(将音频采集到缓冲区中然后再从缓冲区中读取)。...使用起来会麻烦一些,但优点也是显而易见的,AudioRecorder 录音时直接操纵硬件获取音频流数据,该过程是实时处理,可以用代码实现各种音频的封装,同时也可实现暂停功能。

    7.3K31

    Android平台摄像头麦克风视音频采集录像之MediaRecorder还是SmartPublisher

    ​技术背景在 Android 中录制摄像头采集的数据到 MP4 文件,我们可以用系统自带的MediaRecorder,也可以用第三方成熟的摄像头采集录制库,本文就两种方案,做个大概的梳理。...技术比较我们先说MediaRecorder的技术实现,再探讨下SmartPublisher的录制模块。...(width, height);mediaRecorder.setVideoFrameRate(frameRate);mediaRecorder.setOutputFile(outputFilePath.../RTMP H.265(hevc)录制到MP4文件; 支持采集端(推送端)录像过程中,暂停录像、恢复录像;从开始录像,到录像结束均有event callback上来,网络堵塞、音视频同步均做了非常友好的处理...本文以大牛直播SDK的Camera2的采集demo为例,获取到视音频数据,回调到上层,分别调用投递接口投递到底层模块:先说摄像头数据采集处理:@Overridepublic void onCameraImageData

    15610

    Android6.0源码分析之录音功能(一)

    毕竟现 在语音通话、直播亦或者是语音助手比较流行,其中其实最基础的还是对录音的一些处理,所以还是有必要研究一下的。...录音的保存也涉及到往手机中写数据,以及以何种格式写数据,比如当前流行的直播,音频流的传输到底以何种格式,手机可以 播放什么样的格式,这些都会涉及。但是手机的原生系统应用录音机不支持文件的播放。...,aac,wav 7>,显示录音文件列表 其实总的来说也就是录音然后以某种格式保存的功能,只是在录音的过程中需要根据不同情况对UI进行一个更新。...,recordButton录音,中止,继续 对于录音按钮的点击处理逻辑如下: ?...所以在 对录音的两个简单的暂停或者继续进行分析后,接下里就开始分析开始录音的 操作。也就是说我们学会了当对象存在时如何操作对象后,就来研究一下如何去新建一个对象。

    1.5K80

    干货 | 携程Android 10适配踩坑指南

    ,未申请存储权限,通过ContentResolver查询不到文件Uri,即使通过其他方式获取到文件Uri,读取或创建文件会抛出异常; MediaStore API不能够访问其他应用创建的非媒体文件(pdf...setRequireOriginal(Uri uri)接口更新图片Uri 2.3.2 访问数据 MediaStore.Files应用分区存储模式下,MediaStore.Files 集合只能够获取媒体文件信息...Android10要求的media集合目录。...(即从Android 10开始,普通应用已经无法获取设备的真正mac地址,标识设备已经无法使用mac地址) 3.3 如何标识设备唯一性 3.3.1 Google解决方案:如果您的应用有追踪非登录用户的需求...Android 11 依然致力于让用户畅享最新科技,并始终确保将安全和隐私放在首位,帮助用户管理敏感数据和文件的访问权限。此外还对平台的关键区域做出了强化,以保持操作系统的弹性和安全性。

    3.3K77
    领券