فهرست منبع

优化群留言自动播放,通话模式默认为普通电话

weizhengliang 2 سال پیش
والد
کامیت
17c470030e

+ 4 - 0
home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchHome2Activity.kt

@@ -43,6 +43,7 @@ import com.wdkl.ncs.android.middleware.logic.presenter.home.WatchHomeActivityPre
 import com.wdkl.ncs.android.middleware.model.ServerIpInfo
 import com.wdkl.ncs.android.middleware.model.dos.AppVersionDO
 import com.wdkl.ncs.android.middleware.model.dos.ChannelDO
+import com.wdkl.ncs.android.middleware.model.dos.ChannelImDO
 import com.wdkl.ncs.android.middleware.model.dos.PartSettingDO
 import com.wdkl.ncs.android.middleware.model.dto.TcpSeverDTO
 import com.wdkl.ncs.android.middleware.model.vo.DeviceVO
@@ -59,6 +60,7 @@ import com.wdkl.rtc.util.JanusConstant
 import io.reactivex.Observable
 import kotlinx.android.synthetic.main.watch_activity_home2.*
 import kotlinx.android.synthetic.main.watch_activity_register.*
+import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
 
@@ -653,6 +655,8 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
         Constants.allowVoiceMsg = true
         tv_im_count.text = "" + WdKeepAliveService.channelImList.size
 
+        EventBus.getDefault().post(MessageEvent("im_done", Constants.EVENT_IM_PLAY_DONE))
+
         //返回主界面时重置呼叫状态
         /*if (!Constants.showFloatWindow) {
             DeviceChannel.calling = false

+ 8 - 10
home/src/main/code/com/wdkl/ncs/android/component/home/service/WdKeepAliveService.kt

@@ -169,11 +169,13 @@ class WdKeepAliveService : AbsWorkService() {
     }
 
     private fun startPlayChannelIm() {
-        if (null == playThread) {
-            playThread = ImPlayThread()
-            playThread!!.start()
-        } else if (!playThread!!.isAlive) {
-            playThread!!.start()
+        synchronized(this) {
+            if (null == playThread) {
+                playThread = ImPlayThread()
+                playThread!!.start()
+            } else if (!playThread!!.isAlive) {
+                playThread!!.start()
+            }
         }
     }
 
@@ -968,11 +970,7 @@ class WdKeepAliveService : AbsWorkService() {
                         if (!MediaPlayHelper.getInstance().isMediaPlaying && channelImList.size > 0) {
                             val channelIm = channelImList[0]
                             SoundPoolManager.getInstance().playSound(4)
-                            MediaPlayHelper.getInstance().playUrlMusic(
-                                ApiManager.urlManager.device_url + channelIm.audioPath,
-                                1f,
-                                false
-                            )
+                            MediaPlayHelper.getInstance().playUrlMusic(ApiManager.urlManager.device_url + channelIm.audioPath, 1f, false)
                             sendChannelImRead(channelIm)
 
                             channelImList.remove(channelIm)

+ 13 - 1
home/src/main/code/com/wdkl/ncs/android/component/home/util/MediaPlayHelper.java

@@ -32,6 +32,7 @@ public class MediaPlayHelper {
     private String mUrl;
     private float mVolume;
     private boolean mLoop;
+    private boolean play;
 
     /**
      * 播放res资源
@@ -134,11 +135,13 @@ public class MediaPlayHelper {
             mediaPlayer.setVolume(mVolume, mVolume);
             mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
             mediaPlayer.start();
+            play = true;
             mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                 @Override
                 public void onCompletion(MediaPlayer player) {
 //                    playMusicComplete();
                     stopMusicNow();
+                    play = false;
                 }
             });
             mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@@ -147,11 +150,13 @@ public class MediaPlayHelper {
                     //playMusicError();
                     stopMusicNow();
                     releaseMediaSession();
+                    play = false;
                     return false;
                 }
             });
 //            initMediaSession();
         } catch (Exception e) {
+            play = false;
             //playMusicError();
             e.printStackTrace();
         }
@@ -169,6 +174,7 @@ public class MediaPlayHelper {
             mediaPlayer.setLooping(mLoop);
             mediaPlayer.setVolume(mVolume, mVolume);
             mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
+            play = true;
             mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                 @Override
                 public void onPrepared(MediaPlayer player) {
@@ -182,20 +188,24 @@ public class MediaPlayHelper {
                 public void onCompletion(MediaPlayer player) {
                     //playMusicComplete();
                     //stopMusicNow();
+                    play = false;
                     EventBus.getDefault().post(new MessageEvent("im_done", Constants.EVENT_IM_PLAY_DONE));
                 }
             });
             mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
                 @Override
                 public boolean onError(MediaPlayer player, int what, int extra) {
+                    Log.e(TAG, "media play error...");
                     //playMusicError();
                     stopMusicNow();
+                    play = false;
                     EventBus.getDefault().post(new MessageEvent("im_done", Constants.EVENT_IM_PLAY_DONE));
                     return false;
                 }
             });
             mediaPlayer.prepareAsync();
         } catch (Exception e) {
+            play = false;
             //playMusicError();
             e.printStackTrace();
         }
@@ -215,6 +225,7 @@ public class MediaPlayHelper {
                 e.printStackTrace();
             }
         }
+        play = false;
         mediaPlayer = null;
         releaseMediaSession();
     }
@@ -231,13 +242,14 @@ public class MediaPlayHelper {
                 e.printStackTrace();
             }
         }
+        play = false;
         mediaPlayer = null;
         releaseMediaSession();
     }
 
     public boolean isMediaPlaying() {
         if (mediaPlayer != null) {
-            return mediaPlayer.isPlaying();
+            return mediaPlayer.isPlaying() || play;
         }
         return false;
     }

+ 2 - 2
middleware/src/main/code/com/wdkl/ncs/android/middleware/common/Constants.kt

@@ -46,9 +46,9 @@ class Constants {
         //手机通话方式
         var phoneType = CommunicationEnum.MOBILE_PHONE.value()
         //分机通话方式
-        var bedPhoneType = CommunicationEnum.NET_WORK.value()
+        var bedPhoneType = CommunicationEnum.MOBILE_PHONE.value()
         //主机通话方式
-        var nursePhoneType = CommunicationEnum.NET_WORK.value()
+        var nursePhoneType = CommunicationEnum.MOBILE_PHONE.value()
 
         var phoneDataVO: InteractionVO? = null
 

+ 1 - 1
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/channel/DeviceChannel.java

@@ -144,7 +144,7 @@ public class DeviceChannel {
                 break;
             case PHONE:
                 //普通电话
-                if (tcpModel.getAction() == TcpAction.PhoneAction.DATA) {
+                if (tcpModel.getAction() == TcpAction.PhoneAction.DATA && tcpModel.getData() != null) {
                     InteractionVO phoneInteractionVO = new Gson().fromJson(tcpModel.getData().toString(), InteractionVO.class);
                     Constants.Companion.setPhoneDataVO(phoneInteractionVO);
                 }

+ 50 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/utils/ContactHelper.java

@@ -8,6 +8,7 @@ import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
 import android.net.Uri;
+import android.provider.CallLog;
 import android.provider.ContactsContract;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
@@ -17,7 +18,9 @@ import com.wdkl.ncs.android.lib.base.BaseApplication;
 import com.wdkl.ncs.android.middleware.model.ContactItem;
 import com.wdkl.ncs.android.middleware.model.vo.WatchContactVO;
 
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 
@@ -28,6 +31,53 @@ public class ContactHelper {
 
     private static List<WatchContactVO> contacts = new ArrayList<>();
 
+    //获取通话记录
+    public static void getCallLogs(Context context) {
+        Uri callUri = CallLog.Calls.CONTENT_URI;
+        Cursor cursor = null;
+        try {
+            cursor = context.getContentResolver().query(callUri, // 查询通话记录的URI
+                    //columns,  //数据库列选择 不选则获取所有列
+                    null,
+                    null,
+                    null,
+                    CallLog.Calls.DEFAULT_SORT_ORDER  //按照时间逆序排列,最近打的最先显示
+            );
+            Log.i(TAG, "cursor count:" + cursor.getCount());
+            int i = 0;
+            while (cursor.moveToNext() && i < 20) {
+                i++;
+                String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME));  //姓名
+                String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));  //号码
+                long dateLong = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)); //获取通话日期
+                String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(dateLong));
+                //String time = new SimpleDateFormat("HH:mm").format(new Date(dateLong));
+                int duration = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.DURATION));//获取通话时长,值为多少秒
+                int type = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE)); //获取通话类型:1.呼入 2.呼出 3.未接 4.voicemail 5.拒接
+                //String dayCurrent = new SimpleDateFormat("dd").format(new Date());
+                //String dayRecord = new SimpleDateFormat("dd").format(new Date(dateLong));
+                //String phone_account_address = cursor.getString(cursor.getColumnIndex("phone_account_address"));//本机号码可能获取不到(华为、oppo获取不到)
+                //String phone_account_id = cursor.getString(cursor.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ID));//本机sim卡id,即ICCID
+                //String phone_account_hidden = cursor.getString(cursor.getColumnIndex("phone_account_hidden"));
+
+                Log.i(TAG, "Call log: " + "\n"
+                        + "name: " + name + "\n"
+                        + "date: " + date + "\n"
+                        + "phone number: " + number + "\n"
+                        + "duration: " + duration + "\n"
+                        + "type: " + type
+                );
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (cursor != null) {
+                cursor.close();
+            }
+        }
+    }
+
+
     /**
      * 插入手机号
      *