目录内包含Android App测试源码,和核心文件 RecordAppJsBridge.java ;目录内 app-debug.apk.zip 为打包好的debug包(40kb,删掉.zip后缀),或者clone后自行用Android Studio
编译打包。本demo为java代码,兼容API Level 15+,已测试Android 9.0。
本Demo是对/app-support-sample/native-config.js配置示例中定义的JsBridge接口的实现。
可以直接copy目录内RecordAppJsBridge.java
使用,此文件为核心文件,其他文件都是没什么价值的;支持新开发WebView界面,或对已有的WebView实例升级支持RecordApp。
注:Android可以不实现此App原生接口,仅IOS App实现原生接口;因为Android可以通过开启WebView的H5录音权限来进行H5录音,不过H5的麦克风获取似乎没有原生来的稳定,具体的H5权限开启请阅读Recorder首页文档中
Android Hybrid App中录音示例
这节。
- 虽然兼容API Level 15+,但实际上17+才是好的选择,因为addJavascriptInterface
- 古董WebView(21-)虽然能正常接收PCM和进行MP3、WAV编码,但对Blob对象的播放不一定能良好支持
通过addJavascriptInterface往WebView注入一个全局对象RecordAppJsBridge
,js中通过window.RecordAppJsBridge
来访问,只有存在这个对象,就代表是在App中;js通过这个对象的request
方法和java进行数据的交互。
java收到js发起的RecordAppJsBridge.request
请求,解析请求数据参数,并调用参数中接口对应的java方法,同步执行完后把数据返回给js,如果方法是异步的,将在异步操作完成后java将调用网页的js方法AppJsBridgeRequest.Call
将数据异步返回。
接口对应的方法使用的AudioRecord
来录音,AudioRecord
使用稳健的44100采样率进行音频采集,我们实时接收PCM数据并进行采样率的转换,然后调用AppJsBridgeRequest.Record
把数据返回给js端即可完成完整的录音功能。
Android端的录音还算完美,比IOS的轻松很多。
android.permission.RECORD_AUDIO
android.permission.MODIFY_AUDIO_SETTINGS
请阅读RecordAppJsBridge.java文件开头的注释文档,可直接copy此文件到你的项目中使用;支持新开发WebView界面,或对已有的WebView实例升级支持RecordApp。
通过修改WebView的UA来让H5、服务器判断是不是在App里面运行的,此方法非常简单而且实用。但有一个致命缺陷,当UA数据很敏感的场景下,虽然方便了我方H5、服务器来识别这个App,但也同时也暴露给了任何在此WebView中发起的请求,不可避免的会将我们的标识信息随请求而发送给第三方(虽然可通过额外编程把信息抹掉,但代价太大了)。IOS不动UA基本上别人的服务器几乎不太可能识别出我们的App,Android神一样的把包名添加到了X-Requested-With请求头中,还能不能讲理了。