我在网上搜索过其他有类似问题的人。我发现了类似的错误消息,但没有人看到找到任何答案。这似乎是 Cordova 2.x 系列和 3.x 系列的常见错误消息。当我尝试使用 Cordova 的 org.apache.cordova.media 插件录制音频时出现此错误。具体来说,创建一个媒体对象后,运行startRecord(),然后当我执行stopRecord()时,也就是发生错误的时候。
function recordJournalAudio() {
var mediaRecFile = 'journalEntry-' + app.nextJournalID + '.amr';
if (!app.recording) {
app.mediaRec = new Media(mediaRecFile, function() {
console.log("recordAudio():Audio Success");
},
function(err) {
console.log("recordAudio():Audio Error: "+ err.code);
}
);
$("#recordJournalAudioBtn").button("option", "theme", "b");
// Record audio
app.mediaRec.startRecord();
app.recording = true;
}
if (app.recording) {
app.mediaRec.stopRecord(); //THIS IS WHERE THE ERROR OCCURS
$("#recordJournalAudioBtn").button("option", "theme", "a");
}
}
有人对如何解决这个问题有建议吗?
最佳答案
William - 这是插件内实现的错误/错误。我在为自己的项目寻找解决方案时遇到了您的问题。
问题在于,最初会创建一个临时文件来写入音频,然后在完成录制后将其移动并重命名。使用的 File.renameTo() 函数不会从内部写入 SD(反之亦然)。我出于自己的目的重写了该函数,据我所知,它运行良好。下面是更新后的函数。
https://github.com/apache/cordova-plugin-media/blob/master/src/android/AudioPlayer.java
org.apache.cordova.media > AudioPlayer.java 第 32 行(添加)
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.BufferedInputStream;
import java.io.FileNotFoundException;
org.apache.cordova.media > AudioPlayer.java 第 139 行(替换)
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
this.audioFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + file;
}
else {
this.audioFile = "/data/data/" + handler.cordova.getActivity().getPackageName() + "/cache/" + file;
}
//this.audioFile = file;
org.apache.cordova.media > AudioPlayer.java 第168行(替换整个函数)
public void moveFile(String file) {
/* this is a hack to save the file as the specified name */
File newf = new File(file);
String folder = newf.getParent();
if (folder == null) folder = "";
File CheckDirectory;
CheckDirectory = new File(folder);
if (!CheckDirectory.exists())
{
CheckDirectory.mkdir();
}
String logMsg = "renaming " + this.tempFile + " to " + file;
Log.d(LOG_TAG, logMsg);
InputStream in = null;
try {
in = new BufferedInputStream(new FileInputStream(this.tempFile));
} catch (FileNotFoundException e) {
//e.printStackTrace();
Log.e(LOG_TAG, "FAILED to open INPUT stream: " + logMsg);
}
OutputStream out = null;
try {
out = new FileOutputStream(file);
} catch (FileNotFoundException e) {
//e.printStackTrace();
Log.e(LOG_TAG, "FAILED to open OUTPUT stream: " + logMsg);
}
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len; try {
while ((len = in.read(buf)) > 0) out.write(buf, 0, len);
in.close();
out.close();
} catch (IOException e) {
//e.printStackTrace();
Log.e(LOG_TAG, "FAILED COPY: " + logMsg);
}
}
如果这也能解决您的问题,请告诉我。
关于android - Cordova 3.5.0 - 重命名/存储/模拟/0/tmprecording.3gp 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24845284/
当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba
我正在为一个类赋值,它在rspec测试中使用了column_types方法。it"Userdatabasestructureinplace"doexpect(User.column_names).toinclude"password_digest","username"expect(User.column_types["username"].type).toeq:stringexpect(User.column_types["password_digest"].type).toeq:stringexpect(User.column_types["created_at"].type).t
我在尝试使用Nokogiri构建XML文档时遇到了一个小问题。我想将我的元素之一称为“文本”(请参阅下面粘贴代码的最底部)。通常,要创建一个新元素,我会执行类似以下的操作xml.text--但它似乎是.text是Nokogiri已经用来做其他事情的方法。因此,当我写这行时xml.textNokogiri没有创建名为的新元素但只是写了意味着成为元素内容的文本。我怎样才能让Nokogiri实际制作一个名为的元素??builder=Nokogiri::XML::Builder.newdo|xml|xml.TEI("xmlns"=>"http://www.tei-c.org/ns/1.0"
我在一个简单的RailsAPI中有以下Controller代码:classApi::V1::AccountsControllerehead:not_foundendendend问题在于,生成的json具有以下格式:{id:2,name:'Simpleaccount',cash_flows:[{id:1,amount:34.3,description:'simpledescription'},{id:2,amount:1.12,description:'otherdescription'}]}我需要我生成的json是camelCase('cashFlows'而不是'cash_flows'
如果我生成一个名为"product"的脚手架,当我使用它们编写我的应用程序时,它们之间有什么区别?@products,@product,@Product,@Products,产品,Product、product和products(我很确定这些并没有全部用到,但它至少应该让我知道我在做什么'指的是)。对于@/capitalization/plurality的每个组合的含义,我似乎找不到简单的解释。将不胜感激。 最佳答案 你可以阅读Rubystyleguide和Railsstyleguide,您会得到问题的答案。
在我的应用程序中我有classUserincludeUser::FooendUser::Foo定义在app/models/user/foo.rb现在我正在使用一个定义了自己的Foo类的库。我收到此错误:warning:toplevelconstantFooreferencedbyUser::FooUser仅引用具有完整路径的Foo,User::Foo,而Foo实际上从来没有指的是Foo。这是怎么回事?更新:才想起我之前遇到过同样的问题,在问题1中看到这里:HowdoIrefertoasubmodule's"fullpath"inruby? 最佳答案