首页
学习
活动
专区
工具
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

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

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

相关·内容

Android使用MediaRecorder类实现视频和音频录制功能

由官方配图可知,MediaRecorder用于录制视频时需要调用一系列API来设置和录制相关配置,而且调用方法顺序是固定,必须按照这个顺序进行API调用才能正确利用手机摄像头实现录像功能。...setOutputFile() – Set the output file, 设置录制好文件存储位置。...date; } /* *创建视频存储文件夹 录制好视频存储在手机外部存储中 录像时间+mp4格式命名 * */ private String getOutputMediaFile() {...; } /* *创建视频存储文件夹 录制好视频存储在手机外部存储中 录像时间+mp4格式命名 * */ private String getOutputMediaFile() { Log.d(TAG...(来自ZaLou.Cn文章:Android动态请求权限工具类(可请求多个,并且功能完善)) 完整代码如下 /** * 运行时权限申请工具类: * 检查用户是否授权——ContextCompat.checkSelfPermission

3.3K21
  • 从零开发一款相机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

    68120

    android MediaRecorder实现录屏时带录音功能

    插入个链接 (上面那个类code码为100) 判断是否有权限 下面重点来了 首先说明一下这个录屏和录音是在服务里面做,所以呢贴一个服务类 这个代码绝对有质量 做了很多处理,下面一行一行解读把 /...private MediaProjection mMediaProjection; //这个类就是我们主要录屏录音类啦 private MediaRecorder mMediaRecorder;...(MediaRecorder.VideoSource.SURFACE); //设置输出编码格式 mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG...= null) { mMediaRecorder.setOutputFile(mRecordFilePath); } else if (mRecordFilePath == null) { mMediaRecorder.setOutputFile...,不足之处请批评指正 总结 到此这篇关于android MediaRecorder录屏时带录音功能实现文章就介绍到这了,更多相关android MediaRecorder录屏带录音内容请搜索ZaLou.Cn

    2.3K20

    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.2K60

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

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

    3.3K62

    Android实现语音播放与录音功能

    语音列表单个播放 复用问题处理 因为安装原生录音不能录mp3格式文件 而mp3格式是安卓和ios公用,所以我们需要是能直接录取mp3文件或者录完格式转成mp3格式 下面添加这个库 能直接录mp3...mMediaRecorder.setOutputFile(file.getAbsolutePath()); // 设置输出文件 // mMediaRecorder.setAudioSource...(MediaRecorder.AudioSource.MIC); // 设置MediaRecorder音频源为麦克风 // mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB...); // 设置音频格式 // mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 设置音频编码为...FendaListInfo.ObjsEntity bean = mDatas.get(position); bean.isSelect = true; mDatas.set(position,bean); } } /** * 适配器图片播放动画处理

    2.8K50

    关于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.4K10

    Android录屏三种解决方案

    录屏过程可以分成两个部分,即通过MediaProjectionManage申请录屏权限,用户允许后开始录制屏幕;然后通过MediaRecorder对音视频数据进行处理。...startActivityForResult方法来传递这个intent,为了能开始屏幕捕捉,activity会提示用户是否允许屏幕捕捉(为了防止开发者做一个木马,来捕获用户私人信息),你可以通过getMediaProjection来获取屏幕捕捉结果...mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mMediaRecorder.setOutputFile(mDstPath...与MediaRecorder类似,都需要先通过MediaProjectionManager获取录屏权限,在回调中进行屏幕数据处理。...mp4文件 * * @param index */ private void encodeToVideoTrack(int index) { // 获取实时帧视频数据 ByteBuffer encodedData

    3.1K21

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

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

    1.3K20

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

    3K30

    浅析Android录屏 MediaRecorder

    MediaRecorder类介绍: MediaRecorder类是Android sdk提供一个专门用于音视频录制,一般利用手机麦克风采集音频,摄像头采集图片信息。...();获取 2、在onActivityResult回调方法中做具体录屏工作 比如:创建MediaRecorder,设置MP4文件路径 创建VirtualDisplay,设置屏幕相关参数 如果不在onActivityResult...生成MP4文件会在sdcard目录下,并且录屏时间为文件名。...REQUEST_CODE_SCREEN) { if (resultCode == Activity.RESULT_OK) { try { // mediaProjection 如果不在权限申请中回调,获取对象为空...总结 到此这篇关于Android录屏 MediaRecorder介绍文章就介绍到这了,更多相关android录屏 mediaRecorder内容请搜索ZaLou.Cn以前文章或继续浏览下面的相关文章希望大家以后多多支持

    5K40

    Android 两种录音方式

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

    7.1K31
    领券