From 66db2477a4855f5452c45f5e5baeae2d8c3e8c05 Mon Sep 17 00:00:00 2001
From: wxr <wxr@hdlchina.com.cn>
Date: 星期四, 14 十一月 2024 14:15:55 +0800
Subject: [PATCH] 增加sip message发送

---
 HDLLinphoneSDKDemoNew/HDLLinphoneSDK/src/main/java/com/hdl/hdllinphonesdk/HDLLinphoneKit.java |  110 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 107 insertions(+), 3 deletions(-)

diff --git a/HDLLinphoneSDKDemoNew/HDLLinphoneSDK/src/main/java/com/hdl/hdllinphonesdk/HDLLinphoneKit.java b/HDLLinphoneSDKDemoNew/HDLLinphoneSDK/src/main/java/com/hdl/hdllinphonesdk/HDLLinphoneKit.java
index 7f0793d..9c240f4 100644
--- a/HDLLinphoneSDKDemoNew/HDLLinphoneSDK/src/main/java/com/hdl/hdllinphonesdk/HDLLinphoneKit.java
+++ b/HDLLinphoneSDKDemoNew/HDLLinphoneSDK/src/main/java/com/hdl/hdllinphonesdk/HDLLinphoneKit.java
@@ -4,6 +4,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
+import android.media.AudioManager;
 import android.media.MediaPlayer;
 import android.os.Build;
 import android.os.IBinder;
@@ -24,11 +25,17 @@
 import org.linphone.core.Address;
 import org.linphone.core.AudioDevice;
 import org.linphone.core.AuthInfo;
+import org.linphone.core.Buffer;
 import org.linphone.core.Call;
 import org.linphone.core.CallParams;
+import org.linphone.core.ChatMessage;
+import org.linphone.core.ChatMessageListener;
+import org.linphone.core.ChatRoom;
+import org.linphone.core.Content;
 import org.linphone.core.Core;
 import org.linphone.core.CoreException;
 import org.linphone.core.Factory;
+import org.linphone.core.ParticipantImdnState;
 import org.linphone.core.ProxyConfig;
 import org.linphone.core.TransportType;
 
@@ -83,6 +90,8 @@
      */
     public int missedCallsTime = 30;
 
+    public AudioManager audioManager;
+
 
     private HDLLinphoneKit() {
 
@@ -96,6 +105,21 @@
 
             }
         }
+    }
+
+    private void initAudioManager(Context context){
+        if(audioManager == null){
+            try{
+                audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+            }catch (Exception exception){
+
+            }
+        }
+    }
+
+    public int getRingerMode()
+    {
+        return audioManager.getRingerMode();
     }
 
     public boolean getMediaPlayerPlayingStatus(){
@@ -178,6 +202,7 @@
         if (!HDLLinphoneService.isReady()) {
             CheckIfNeedstartService();
             InitMediaPlayer(context);
+            initAudioManager(context);
         } else {
         }
     }
@@ -507,7 +532,82 @@
         mLinphoneCore.addProxyConfig(prxCfg);//娣诲姞浠g悊閰嶇疆銆傚鏋滃惎鐢ㄤ簡娉ㄥ唽锛岃繖灏嗗紑濮嬪湪浠g悊涓婃敞鍐屻��
         mLinphoneCore.addAuthInfo(authInfo);//娣诲姞璁よ瘉淇℃伅鍒�,璇ヤ俊鎭墖娈靛皢鍦ㄦ墍鏈夐渶瑕佺殑SIP浜嬪姟涓娇鐢ㄨ韩浠介獙璇�
         mLinphoneCore.setDefaultProxyConfig(prxCfg);//璁剧疆榛樿浠g悊銆�
+
     }
+
+    public void sendSipMessage(String sipAddress, String message) {
+        try {
+            Core mLinphoneCore = HDLLinphoneService.getCore();
+            if (mLinphoneCore == null) {
+                Log.e("Linphone", "Linphone Core 鏈垵濮嬪寲");
+                return;
+            }
+
+            // 瑙f瀽瀵规柟鐨凷IP鍦板潃
+            Address address = mLinphoneCore.interpretUrl(sipAddress);
+
+            // 寤虹珛瀵硅瘽
+            ChatRoom chatRoom = mLinphoneCore.getChatRoom(address);
+
+            // 鍒涘缓娑堟伅
+            ChatMessage chatMessage = chatRoom.createMessageFromUtf8(message);
+
+            // 鐩戝惉娑堟伅鐘舵��
+            chatMessage.addListener(new ChatMessageListener() {
+                @Override
+                public void onFileTransferSendChunk(ChatMessage message, Content content, int offset, int size, Buffer buffer) {
+                    // 鏂囦欢浼犺緭鐨勫垎鍧楀彂閫佸洖璋冿紝鏈娇鐢�
+                }
+
+                @Override
+                public void onMsgStateChanged(ChatMessage message, ChatMessage.State state) {
+                    if (state == ChatMessage.State.Delivered) {
+                        Log.d("Linphone", "娑堟伅宸叉垚鍔熷彂閫�");
+                    } else if (state == ChatMessage.State.NotDelivered) {
+                        Log.d("Linphone", "娑堟伅鍙戦�佸け璐�");
+                    }
+                }
+
+                @Override
+                public Buffer onFileTransferSend(ChatMessage message, Content content, int offset, int size) {
+                    return null;  // 鏂囦欢浼犺緭鍥炶皟锛屾湭浣跨敤
+                }
+
+                @Override
+                public void onEphemeralMessageDeleted(ChatMessage message) {
+                    // 涓存椂娑堟伅鍒犻櫎鍥炶皟锛屾湭浣跨敤
+                }
+
+                @Override
+                public void onEphemeralMessageTimerStarted(ChatMessage message) {
+                    // 涓存椂娑堟伅璁℃椂鍣ㄥ紑濮嬪洖璋冿紝鏈娇鐢�
+                }
+
+                @Override
+                public void onParticipantImdnStateChanged(ChatMessage message, ParticipantImdnState state) {
+                    // 鍙備笌鑰呮秷鎭�氱煡鐘舵�佹敼鍙樺洖璋冿紝鏈娇鐢�
+                }
+
+                @Override
+                public void onFileTransferRecv(ChatMessage message, Content content, Buffer buffer) {
+                    // 鏂囦欢浼犺緭鎺ユ敹鍥炶皟锛屾湭浣跨敤
+                }
+
+                @Override
+                public void onFileTransferProgressIndication(ChatMessage message, Content content, int offset, int total) {
+                    // 鏂囦欢浼犺緭杩涘害鍥炶皟锛屾湭浣跨敤
+                }
+            });
+            // 鍙戦�佹秷鎭�
+            chatMessage.send();
+
+        } catch (Exception e) {
+            Log.e("Linphone", "娑堟伅鍙戦�佸け璐�", e);
+            e.printStackTrace();
+        }
+    }
+
+
 
     /**
      * 鎻愪氦璐﹀彿鍜屽瘑鐮佹敞鍐屽埌鍏ㄨ閫氭湇鍔″櫒
@@ -579,10 +679,14 @@
             if (addressToCall != null) {
                 call = core.inviteAddressWithParams(addressToCall, params);
                 // 璁剧疆澶栨斁
-                for (AudioDevice audioDevice : HDLLinphoneService.getCore().getAudioDevices()) {
-                    if (audioDevice.getType() == AudioDevice.Type.Speaker) {
-                        call.setOutputAudioDevice(audioDevice);
+                try {
+                    for (AudioDevice audioDevice : HDLLinphoneService.getCore().getAudioDevices()) {
+                        if (audioDevice.getType() == AudioDevice.Type.Speaker) {
+                            call.setOutputAudioDevice(audioDevice);
+                        }
                     }
+                }catch (Exception exception){
+                    Log.e("LinphoneError",exception.getMessage());
                 }
             }
         }

--
Gitblit v1.8.0