如何在发送语音聊天时,将我们事先录制好的语音发送出去?
要实现这个功能,用到的自然是xposed。
Android上录音的接口主要是 MediaRecorder、AudioRecorder 还有其他第三方接口。
对于一些聊天软件,如果是调用MediaRecorder接口来录制,那个hook起来就比较简单了。主要介绍这个方法,其他两种接口,有空再补充。
首先要了解MediaRecoder主要方法:
void prepar():准备录制
void start():开始录制
void stop():停止录制
void reset():重置MediaRecorder
void release():释放MediaRecorder占用的资源
void setAudioEncoder(int):设置音频的编码格式
void setAudioSource(int):设置音频的音频源
void setVideoEncoder(int):设置视频的编码格式
void setVideoSource(int):设置视频的视频源
void setOutoutFormat(int):设置记录的媒体文件的输出转换格式
void setOutputFile(String):设置媒体文件输出路径
MediaRecoder在设置录音时,都会设置文件保存路径setOutputFile(path),因此只要将事先录制好的文件,在MediaRecoder录制结束调用stop或者release时,将其保存的文件替换掉即可。代码如下:
findAndHookMethod("android.media.MediaRecorder", lpparam.classLoader, "stop", new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//替换文件
String cpCmd = "cp -f "+recoderTempPath+" "+voicePath;
Runtime.getRuntime().exec(cpCmd);
Thread.sleep(500L);
super.afterHookedMethod(param);
}
});