检查 Android MediaRecorder 是否正在录制

2023-12-10

我为 Android 2.2 编写了一些代码,使用 Android MediaPlayer 播放音频文件。在没有深入了解代码细节的情况下,我注意到存在一个名为

isPlaying()

允许您检查 MediaPlayer 当前是否正在播放音频文件。因此,例如,当以下代码片段运行时

Toast.makeText(getApplicationContext(), "Sound playing is: " +
        mediaPlayer.isPlaying(), Toast.LENGTH_SHORT).show();

它显示以下消息

Sound playing is: true / false

取决于是否有声音播放。

然而,当我编写一些代码来使用 Android MediaRecorder 从麦克风录制声音时,我注意到确实有not看起来有一个函数叫做

isRecording()

检查录音是否正在进行中。

所以,我想知道程序员是否有责任通过在代码中嵌入一些逻辑来确定录音是否正在进行中 - 或者是否确实存在一种方法可以做到这一点(检查录音是否正在进行)通过使用 Android API 提供的另一个内置函数。


重要的

我找到了一个很好的解决方法来处理这个问题,您可以立即阅读该解决方法,但我强烈建议您先阅读整个解释。

场景

我试图找到一种方法来确定媒体记录器是否已开始录制,我假设调用start()后记录器上的方法prepare()方法已经足够了,但事实证明,还不够。

在你被我刚才的话冒犯之前,让我解释一下这个场景......

我正在从头开始构建一个简单的录音应用程序,没有库,复制粘贴,所有辛苦的工作。所以我确切地知道我的代码的每一部分在做什么。或者至少我认为我做到了。

直到我决定尝试通过单击按钮开始和停止录音来破坏我的应用程序,就像我在弹钢琴一样。是的,我的停止按钮甚至没有出现,直到媒体记录器的start()方法被调用。

所以我遇到了崩溃,logcat 也欢迎我

java.lang.RuntimeException: stop failed.
    at android.media.MediaRecorder.stop(Native Method)

随着

E/MediaRecorder(15709): stop failed: -1007

所以我在网上阅读并发现调​​用stop()就在之后start() on MediaRecorder导致这个问题。

所以最大的问题是,如何检测现在启用录音机上的“停止”按钮是否安全?

解决方法(一点也不完美,但有效)

MediaRecorder.getMaxAmplitude() // The maximum absolute amplitude measured since the last call, or 0 when called for the first time

如您所见,MediaRecorder.getMaxAmplitude()方法或MediaRecorder.maxAmplitude属性第一次调用时返回 0,之后返回幅度。

因此,不要让用户在通话后立即停止录音MediaRecorder.start()我现在正在等待,直到MediaRecorder.maxAmplitude值大于零,此时我可以确定MediaRecorder初始化、启动、录音,处于调用的状态stop()被允许。您可以通过使用来完成此操作可运行,不断检查直到幅度大于 0。我已经在使用计时器的可运行程序,因此我在其中执行检查。

请注意

When 在模拟器上工作,返回的值MediaRecorder.maxAmplitude始终为 0。因此,您应该使用 Android 设备来检查一切是否按预期工作。

现在,当我第一次开始录制时,我的按钮保持禁用状态不到一秒钟。但如果我停止和开始太快,它们会保持禁用状态更长的时间,并且我会显示“录音开始时请稍候” 给用户的消息。

我希望这个答案对某人有所帮助。

Regards!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查 Android MediaRecorder 是否正在录制 的相关文章

  • React Native 从 JavaScript 代码内部访问 strings.xml

    有没有办法访问当前值android app src main res values strings xml从 JavaScript 代码内部 我想为每个构建放置不同的端点 URL 但我什至无法检测到反应本机代码内的构建类型 而不必求助于 D
  • SearchView过滤ListView

    我已经实现了搜索视图来过滤我的列表视图项目 当我输入任何文本时 它会过滤列表 但当我退出搜索视图时 它不会返回原始列表项 public class PlacesListAdapter extends ArrayAdapter
  • 如何在android中获取Camera2 API的当前曝光

    In android hardware Camera旧的 我使用下面的代码获取当前曝光并获取它Camera Camera Parameters param mCamera getParameters currentExposure para
  • 是否可以将数组或对象添加到 Android 上的 SharedPreferences

    我有一个ArrayList具有名称和图标指针的对象 我想将其保存在SharedPreferences 我能怎么做 注意 我不想使用数据库 无论 API 级别如何 请检查SharedPreferences 中的字符串数组和对象数组 http
  • Android SIP 来电使用带有广播接收器的服务

    大家好 其实我正在尝试创建一个应用程序 支持基于 SIP 通过互联网进行音频呼叫 这里使用本机 sip 我遇到了来电问题 我已经完成了服务的注册部分 但是在接听电话时我无法接听电话 请帮助我 Service file package exa
  • 带有 EditText 和 Spinner 的对话框

    我有一个按钮 单击后会弹出一个对话框 我希望对话框有一个EditText and a Spinner对话框内 我不知道如何设置它的视图 我有一个代码AlertDialog它有效 只是EditText and Spinner我需要将其放入其中
  • 无法访问 com.google.android.gms.internal.zzbfm 的 zzbfm 类文件未找到

    我正在将我的 Android 应用程序项目从GCM to FCM 为此 我使用 Android Studio 中的 Firebase 助手工具 并遵循 Google 开发人员指南中的说明 一切都很顺利 并将我的应用程序代码更改为FCM根据助
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 发布android后更改应用内购买项目的价格

    在 Google Play 上发布后 是否可以更改应用内购买商品的价格 我假设该应用程序也已发布 完整的在线文档位于http developer android com http developer android com也http sup
  • 尝试在 ubuntu 中编译 android 内核时出错

    我正在尝试从源代码编译 Android 内核 并且我已经下载了所有正确的软件包来执行此操作 但由于某种原因我收到此错误 arm linux androideabi gcc error unrecognized command line op
  • Android Studio 0.4.3 Eclipse项目没有gradle

    在此版本之前 在 Android Studio 中按原样打开 Eclipse 项目似乎很容易 无需任何转换 我更喜欢 Android Studio 环境 但我正在开发一个使用 eclipse 作为主要 IDE 的项目 我不想只为这个项目下载
  • Android访问远程SQL数据库

    我可以直接从 Android 程序访问远程 SQL 数据库 在网络服务器上 吗 即简单地打开包含所有必需参数的连接 然后执行 SQL 查询 这是一个私人程序 不对公众开放 仅在指定的手机上可用 因此我不担心第三方获得数据库访问权限 如果是这
  • Android Studio - Windows 7 上的 Android SDK 问题

    我对 Google i o 2013 上发布的最新开发工具 Android Studio 有疑问 我已经成功安装了该程序并且能够正常启动 我可以导入现有项目并对其进行编辑 但是 当我尝试单击 SDK 管理器图标或 AVD 管理器图标时 或者
  • Android向menuItem添加子菜单,addSubMenu()在哪里?

    我想根据我的参数以编程方式将 OptionsMenu 内的子菜单添加到 menuItem 中 我检查了android sdk中的 MenuItem 没有addSubMenu 方法 尽管你可以找到 hasSubMenu 和 getSubMen
  • 增加活动的屏幕亮度

    显然 Android 操作系统中至少有三种不同的技术可以改变屏幕亮度 其中两个在纸杯蛋糕之后不再起作用 而第三个被接受的技术显然有一个错误 我想在单视图活动开始时增加屏幕亮度 然后在活动结束时将亮度恢复为用户设置 没有按钮 没有第二个视图或
  • 在activity_main.xml中注释

    我是安卓新手 据我所知 XML 中的注释与 HTML 中的注释相同 使用 形式 我想在 Android 项目的 Activity main xml 配置文件中写一些注释 但它给了我错误 值得注意的是 我使用的是 Eclipse 但目前 我直
  • 将 Intent 包装在 LabeledIntent 中以用于显示目的

    要求 我的应用程序中有一个 共享 按钮 我需要通过 Facebook 分享 我需要选择是否安装原生 Facebook 应用程序 我们的决定是 如果未安装该应用程序 则将用户发送到 facebook com 进行分享 当前状态 我可以检测何时
  • 将两个文本视图并排放置在布局中

    我有两个文本视图 需要在布局中并排放置 并且必须遵守两条规则 Textview2 始终需要完整显示 如果布局中没有足够的空间 则必须裁剪 Textview1 例子 文本视图1 文本视图2 Teeeeeeeeeeeeeeeeeextview1
  • android sdk 的位置尚未在 Windows 操作系统的首选项中设置

    在 Eclipse 上 我转到 windows gt Android SDK 和 AVD Manager 然后弹出此消息 Android sdk 的位置尚未在首选项中设置 进入首选项 在侧边栏找到 Android 然后会出现一个 SDK 位
  • 如何将 google+ 登录集成到我的 Android 应用程序中?

    大家好 实际上我需要通过我的应用程序从 google 登录人们 现在我阅读了 google 上的文档 其中指出 要允许用户登录 请将 Google Sign In 集成到您的应用中 初始化 GoogleApiClient 对象时 请求 PL

随机推荐

  • 使用python中的循环查找第二小的数字[重复]

    这个问题在这里已经有答案了 我想知道如何找到第二小的数字来自具有 def 函数的用户输入列表 还 WITHOUT使用任何排序函数 导入的模块以及 min 和 max 函数 如何仅使用循环和关系运算符来查找数字 这是我的以下代码 到目前为止我
  • 使用 Google Api 获取文档列表并下载它们?

    您好 我正在使用 android 的 picasa 示例并对其进行修改 但我没有收到任何文档列表 请帮助我发布我修改后的类 其余部分与 picasa 示例中的相同 请帮助 我得到了400 bad request in executeRefr
  • 无法在 Windows 7 上将 PB 10.5 另存为 PDF

    我有一个内置于 10 5 的应用程序 能够在 Windows XP 上使用 SaveAs 成功创建 PDF 当我迁移到 Windows 7 32 位 时 它失败并返回 1 和零长度文件 我已经尝试了我能想到的一切 我尝试了多个版本的 Gho
  • 如何可视化 Neo4j 图 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想在我的 JAVA 应用程序中可视化 Neo4j 嵌入图 我读过 Max De Marzi 的图形可视化博客 但我在 JAVA 中找不到任何内容
  • PHP 中 POST 方法的问题

    问题 表单提交后未定义的 POST 变量 已完成的研究和故障排除 阅读此处的大量问题 几乎所有问题都与表单字段上没有姓名标签有关 我的所有字段都有标签和 ID 配置我的 PHP ini 将 HTTP RAW POST DATA 设置为 1
  • 在 PHP 服务器上签署 .mobileconfig

    谁能告诉我如何使用openssl smime sign signer cert pem inkey key pem certfile ca bundle pem nodetach outform der in profile uns mob
  • Visual Studio 2012 数据库项目中未解决的引用

    有没有办法从我的数据库项目中引用另一个数据库而不直接引用它 例如 我希望能够写出这样的内容 CREATE VIEW View1 AS SELECT X FROM OtherDB dbo Table1 最好的选择是向您的项目添加数据库引用 对
  • 黑莓 - 如何在手机启动时启动我自己的服务?

    我想在手机启动时启动自己的服务实现 如何实现 您只需在黑莓JDE中的项目属性中设置 系统模块 和 自动启动 选项即可 这将在手机启动时启动您的应用程序
  • 从 Facebook 重定向到 iOS 应用程序 - 深层链接

    我无法从 Facebook 帖子重定向到我的 iOS 应用程序 当我点击该帖子时 它会作为网页打开 不知何故 不识别 iOS 标签 也不重定向到应用程序 不确定它是 ios 应用程序还是 html 内容或其他问题 Myapppp plist
  • Swift Objective-C 运行时类命名

    我注意到 Swift 类在 Objective C 运行时被重命名 所以如果我有一个名为 swift 的课程ViewController我的应用程序的名称是TestRuntime当我表演时object getClass self self
  • JavaScript 中用于 URL 捕获的正则表达式

    我不太擅长 Javascript 中的正则表达式 有谁知道捕获 URL 最后部分的有效方法 我有以下网址 http localhost 3000 developers 568d3c3c82eea6e6fb47c236 我需要做的就是捕获开发
  • URL 方案附件 Microsoft Outlook 应用程序

    我正在尝试制作一个应用程序来生成文件并填充所有电子邮件字段 以便用户只需输入正文即可 我还为用户提供了在本机 iOS 电子邮件应用程序和 Microsoft Outlook 应用程序 如果已安装 之间进行选择的可能性 当我实现此操作以准备要
  • 如何在 JavaScript 中查找另一个对象中具有属性的对象

    我有一个包含所有用户的对象 如下所示 var users user1 user2 并且每个用户都有一个 isPlaying 属性 如何获取 isPlaying 为 false 的所有用户 你应该使用Object keys Array pro
  • 简单的 HTML DOM 解析器:如何读取所选选项的值

    我已经读入了这段 HTML 代码 html 我提取了一些正确的信息 但我无法获取 a 的选定选项值select
  • 使用 RBF 核 SVM 时,c 或 gamma 的高值是否会出现问题?

    我正在使用 WEKA LibSVM 来训练术语提取系统的分类器 我的数据不是线性可分的 因此我使用 RBF 内核而不是线性内核 我跟着Hsu 等人的指南 并迭代 c 和 gamma 的几个值 最适合对已知术语进行分类 测试和训练材料当然不同
  • 如何将一行中的图像全部垂直居中对齐,无论高度和宽度如何?

    我正在尝试创建一些并排对齐的流体图像 但也应该在中间垂直对齐 无论高度尺寸是多少 我已将图像设置为最大宽度 100 以便它们保持不变在他们的父母最大宽度内 这样我就可以在较小的屏幕宽度下减小它们的尺寸 然而我的问题是我不确定垂直对齐这些图像
  • 从 PowerShell 按名称运行程序(类似于运行框)

    在 Windows 中我们访问Run box with Windows Key R 然后我们可以按名称运行程序 例如 firefox snippingtool 有没有办法从 PowerShell 中按名称运行程序 gt run firefo
  • 您可以在 JavaScript 中设置和/或更改用户的文本选择吗?

    在 JavaScript 中 有多种方法可以访问用户的文本选择和创建文本选择 或范围 请参阅http www quirksmode org dom range intro html 根据该页面 您可以以编程方式创建一个范围 并访问该范围内的
  • 如何动态连接多个聚合查询的输出?

    我正在构建一个 Postgres 查询 需要对数组中的每个条目调用聚合函数 然后将所有这些聚合值连接在一起 以下是对其中一个聚合的查询 WITH mvtdata AS SELECT ST AsMVTGeom geom ST TileEnve
  • 检查 Android MediaRecorder 是否正在录制

    我为 Android 2 2 编写了一些代码 使用 Android MediaPlayer 播放音频文件 在没有深入了解代码细节的情况下 我注意到存在一个名为 isPlaying 允许您检查 MediaPlayer 当前是否正在播放音频文件