import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.media.Ringtone;
+import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Environment;
import android.os.RemoteCallbackList;
/**
* 发送语音消息,微聊的,注意转码
*
+ * @param duration
* @param remoteNum
* @param content 声音地址
* @param voiceId 数据库里的_id,用于更新状态
*/
- public void sendVoice(String remoteNum, String content, String voiceId) {
+ public void sendVoice(int duration, String remoteNum, String content, String voiceId) {
File file = new File(content);
if (!file.exists()) {
//TODO:直接删除数据库记录
//如果remoteNum为空,那么是群聊
ICLogger.d("remote id == > " + remoteNum);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ String cmd;
if (TextUtils.isEmpty(remoteNum)) {
+ cmd = cmdMap.get(CMD_TYPE.TK);
//发送消息
- String cmd = cmdMap.get(CMD_TYPE.TK);
int tkLength = cmd.length();
String header = genHeader(tkLength, cmd);
StringBuilder sb = new StringBuilder();
bos.write(result);
//追加结尾
bos.write(CMDEND.getBytes());
- mConnection.send(cmd, bos.toByteArray());
- bos.reset();
- bos.close();
} else {
//单聊
- String cmd = cmdMap.get(CMD_TYPE.TKOne);
+ cmd = cmdMap.get(CMD_TYPE.TKOne);
int tkLength = cmd.length();
String header = genHeader(tkLength, cmd);
StringBuilder sb = new StringBuilder();
}
//头部构造好了,添加逗号
sb.append(CMDSPLIT);
-
+ //添加APP账号
+ sb.append(remoteNum);
+ sb.append(CMDSPLIT);
+ //秒数
+ ICLogger.d("duration == > " + duration);
+ sb.append(duration);
+ sb.append(CMDSPLIT);
+ //加入数据
+ bos.write(sb.toString().getBytes());
+ //数据包数据
+ bos.write(result);
+ //结尾数据
+ bos.write(CMDEND.getBytes());
}
-
+ //发送数据
+ mConnection.send(cmd, bos.toByteArray());
+ bos.reset();
+ bos.close();
//更新数据库状态
ContentValues contentValues = new ContentValues();
contentValues.put("state", 5);
int frameCount = 0;
int packedPos = -1;
// 初始数据值
- byte[] datas = new byte[1];
+ byte[] data = new byte[1];
while (pos <= length) {
randomAccessFile.seek(pos);
- if (randomAccessFile.read(datas, 0, 1) != 1) {
+ if (randomAccessFile.read(data, 0, 1) != 1) {
duration = length > 0 ? ((length - 6) / 650) : 0;
break;
}
- packedPos = (datas[0] >> 3) & 0x0F;
+ packedPos = (data[0] >> 3) & 0x0F;
pos += packedSize[packedPos] + 1;
frameCount++;
}
cmdMap.put(CMD_TYPE.FIND, "FIND");
cmdMap.put(CMD_TYPE.REMIND, "REMIND");
cmdMap.put(CMD_TYPE.TK, "TK");
+ cmdMap.put(CMD_TYPE.TKOne, "TKOne");
cmdMap.put(CMD_TYPE.PHL, "PHL");
cmdMap.put(CMD_TYPE.wdstart, "wdstart");
cmdMap.put(CMD_TYPE.bldstart, "bldstart");
//数据格式:[XT*YYYYYYYYYYYYYYY*LEN*TKOne,App 账号,秒数,AMR 格式音频数据]
String cmdStr = new String(totalByte);
String[] split = cmdStr.split(",");
+ //处理返回的结果
+ //TODO:
String header = split[0];
//账号
- String count = split[1];
+ String remoteId = split[1];
//秒数
String duration = split[2];
//数据包,对数据进行切割
new File(dir),
"receive_" + System.currentTimeMillis() + ".amr");
//插入到数据库中
- voiceIn2Db(amrFilepath, FZDDatabaseHelper.MessageType.VOICE);
+ message2Db(remoteId, amrFilepath, FZDDatabaseHelper.MessageType.VOICE);
//返回结果
mConnection.send(TKOne("1"));
} catch (Exception e) {
// ICLogger.d("playVoice: ERROR ");
//}
//包存到数据库中,这是群聊的内容,没有联系人的
- voiceIn2Db(amrFilepath, FZDDatabaseHelper.MessageType.VOICE);
+ // 群聊没有remoteId
+ message2Db("", amrFilepath, FZDDatabaseHelper.MessageType.VOICE);
//回复服务器状态
mConnection.send(TK("1"));
- //通知有消息到
- //TODO:
} catch (Exception e) {
e.printStackTrace();
//失败
}
}
- private void voiceIn2Db(String amrFilepath, int type) {
- //计算文件时长
- int amrDuration = 0;
+ private void message2Db(String remoteId, String amrFilepath, int type) {
try {
- File file = new File(amrFilepath);
- amrDuration = getAmrDuration(file);
+ //通知有消息到
+ Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
+ Ringtone ringtone = RingtoneManager.getRingtone(mRuntime.getContextProxy().context, uri);
+ ringtone.play();
} catch (Exception e) {
e.printStackTrace();
}
+ //计算文件时长
+ int amrDuration = 0;
+ if (type == FZDDatabaseHelper.MessageType.VOICE) {
+ try {
+ File file = new File(amrFilepath);
+ amrDuration = getAmrDuration(file);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
ContentResolver resolver = mRuntime.getContextProxy().getResolver();
ContentValues contentValues = new ContentValues();
//路径
//接受还是发送,1表示来信
contentValues.put("in_or_out", 1);
//对方号码是没有的
- contentValues.put("remote_num", "");
+ contentValues.put("remote_num", remoteId);
contentValues.put("create_time", System.currentTimeMillis());
contentValues.put("update_time", System.currentTimeMillis());
resolver.insert(Uri.parse(FZDMessageProvider.MESSAGES), contentValues);
//解析数据
String textData = Util.decodeUnicode2Utf8(data);
ICLogger.d("message data == > " + textData);
- voiceIn2Db(textData, FZDDatabaseHelper.MessageType.TEXT);
+ message2Db("", textData, FZDDatabaseHelper.MessageType.TEXT);
//入数据库
mConnection.send(MESSAGE());
}