主要用到的技术:
一:录音及转化机制及录音暂停的实现,及获取录音大小的优化。(顺带的研究了一下科大讯飞和云知声关于语音转化文字准确度方面的测试)
ram转化为mp3.格式及文件上传。关于移植的时候注意事项,obj和jni要和移植过来的文件名一致的,
// 将 buffer 内容取出,进行平方和运算
for (int i = 0; i < buffer.length; i++) {
// 这里没有做运算的优化,为了更加清晰的展示代码
v += buffer[i] * buffer[i];
}
// 平方和除以数据总长度,得到音量大小。可以获取白噪声值,然后对实际采样进行标准化。
// 如果想利用这个数值进行操作,建议用 sendMessage 将其抛出,在 Handler
// 里进行处理。 (Math.abs((int)(v /(float)readSize)/10000)
// double dB = 10*Math.log10(v/(double)readSize);
for (int i = 0; i < buffer.length; i++) {
// 这里没有做运算的优化,为了更加清晰的展示代码
v += buffer[i] * buffer[i];
}
// 平方和除以数据总长度,得到音量大小。可以获取白噪声值,然后对实际采样进行标准化。
// 如果想利用这个数值进行操作,建议用 sendMessage 将其抛出,在 Handler
// 里进行处理。 (Math.abs((int)(v /(float)readSize)/10000)
// double dB = 10*Math.log10(v/(double)readSize);
二:js与webviwe交互下载,及下载监听,
交互开始结束,出现错误的处理;
web.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if (seestudio != null) {关于界面调转之后停止前一个页面的的录音播放。
seestudio.stop();
}
if (studio != null) {
studio.stop();
}
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
isSz = true;
// bar.setVisibility(View.GONE);
if(url.contains(strUrl)){
lastUrl = url;
}
super.onPageFinished(view, url);
}
@Override
public void onReceivedError(final WebView view, int errorCode,
String description, String failingUrl) {//关于没有网络的错误的时候加一个处理,加载一个本地的html.并且js端调本地的方法实现刷新
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if (seestudio != null) {关于界面调转之后停止前一个页面的的录音播放。
seestudio.stop();
}
if (studio != null) {
studio.stop();
}
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
isSz = true;
// bar.setVisibility(View.GONE);
if(url.contains(strUrl)){
lastUrl = url;
}
super.onPageFinished(view, url);
}
@Override
public void onReceivedError(final WebView view, int errorCode,
String description, String failingUrl) {//关于没有网络的错误的时候加一个处理,加载一个本地的html.并且js端调本地的方法实现刷新
实现刷新的方法[(public void reLoad(){
web.loadUrl(lastUrl);]
})
view.loadUrl("file:///android_asset/index/reload.html");
super.onReceivedError(view, errorCode, description, failingUrl);
}
});
web.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
content.setText(title);
super.onReceivedTitle(view, title);
}
web.loadUrl(lastUrl);]
})
view.loadUrl("file:///android_asset/index/reload.html");
super.onReceivedError(view, errorCode, description, failingUrl);
}
});
web.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
content.setText(title);
super.onReceivedTitle(view, title);
}
三:activity后台类似qq微信,无法杀死进程的。就是在destroy();的时候加一个通知实现重启这个activity;还有(其他一些什么优先级什么的)(你可以在手机进程中看一下qq和微信都是有两个进程在同时运行,一个干掉之后过一会就会重新出现,就像一个循环)。
四:交互的时候关于界面刷新,在线程中实现。
只要有下面代码就不会出现改变原生界面的时候,有时页面不会变化的效果。
Handler handlerInterface = new Handler();
handlerInterface.post(new Runnable() {
@Override
public void run() {
title1.setVisibility(View.GONE);
}
});
@Override
public void run() {
title1.setVisibility(View.GONE);
}
});