parse tkone cmd.
authorTrillGates <williamtrillgates@gmail.com>
Tue, 6 Apr 2021 10:52:04 +0000 (18:52 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Tue, 6 Apr 2021 10:52:04 +0000 (18:52 +0800)
app/src/main/java/com/enqualcomm/support/provider/FZDMessageProvider.java
app/src/main/java/com/enqualcomm/support/service/WeTalkMsgObserver.java
app/src/main/java/com/ic/protocols/protocol_fzd.java

index 300d51f..0d3a5fb 100644 (file)
@@ -124,6 +124,8 @@ public class FZDMessageProvider extends ContentProvider {
         synchronized (mLock) {
             int match = sUriMatcher.match(uri);
             if (match == MATH_CODE_TABLE) {
+                SQLiteDatabase writableDatabase = mDatabase.getWritableDatabase();
+                int update = writableDatabase.update(FZDDatabaseHelper.tMessage, values, selection, selectionArgs);
                 //如果是状态变化的话通知UI监听的地方
                 //让UI查询一下新的状态
                 if (values != null) {
@@ -135,8 +137,7 @@ public class FZDMessageProvider extends ContentProvider {
                                 Uri.parse(MESSAGES_ITEM + "/" + selectionArgs[0]), null);
                     }
                 }
-                SQLiteDatabase writableDatabase = mDatabase.getWritableDatabase();
-                return writableDatabase.update(FZDDatabaseHelper.tMessage, values, selection, selectionArgs);
+                return update;
             }
             return 0;
         }
index cd04a6f..e49c8b7 100644 (file)
@@ -42,11 +42,12 @@ public class WeTalkMsgObserver extends ContentObserver {
                 //对方的ID,如果这个为null,那么则是群聊
                 //否则是单聊
                 String remoteNum = query.getString(query.getColumnIndex("remote_num"));
+                int duration = query.getInt(query.getColumnIndex("duration"));
                 ICLogger.d("content --- > " + content);
                 query.close();
                 //交给fzd协议吧,让它去发送消息
                 protocol_fzd fzd = protocolAPIHelper.getProtocolfzd_handler();
-                fzd.sendVoice(remoteNum, content, lastPathSegment);
+                fzd.sendVoice(duration, remoteNum, content, lastPathSegment);
             }
         });
     }
index 4b6c506..85356cc 100644 (file)
@@ -7,6 +7,8 @@ import android.content.ContentValues;
 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;
@@ -72,11 +74,12 @@ public class protocol_fzd {
     /**
      * 发送语音消息,微聊的,注意转码
      *
+     * @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:直接删除数据库记录
@@ -109,9 +112,10 @@ public class protocol_fzd {
                 //如果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();
@@ -129,12 +133,9 @@ public class protocol_fzd {
                     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();
@@ -146,9 +147,24 @@ public class protocol_fzd {
                     }
                     //头部构造好了,添加逗号
                     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);
@@ -195,14 +211,14 @@ public class protocol_fzd {
             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++;
             }
@@ -311,6 +327,7 @@ public class protocol_fzd {
         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");
@@ -487,9 +504,11 @@ public class protocol_fzd {
             //数据格式:[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];
             //数据包,对数据进行切割
@@ -503,7 +522,7 @@ public class protocol_fzd {
                     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) {
@@ -559,11 +578,10 @@ public class protocol_fzd {
             //    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();
             //失败
@@ -571,15 +589,25 @@ public class protocol_fzd {
         }
     }
 
-    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();
         //路径
@@ -593,7 +621,7 @@ public class protocol_fzd {
         //接受还是发送,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);
@@ -1253,7 +1281,7 @@ public class protocol_fzd {
         //解析数据
         String textData = Util.decodeUnicode2Utf8(data);
         ICLogger.d("message data == > " + textData);
-        voiceIn2Db(textData, FZDDatabaseHelper.MessageType.TEXT);
+        message2Db("", textData, FZDDatabaseHelper.MessageType.TEXT);
         //入数据库
         mConnection.send(MESSAGE());
     }