From 524abed53193c67683a363ce0f12fe4aa98323a0 Mon Sep 17 00:00:00 2001
From: lmw <125975490@qq.com>
Date: 星期二, 28 五月 2024 15:28:55 +0800
Subject: [PATCH] 行程录音,接送机

---
 app/src/main/java/com/future/driver/base/MyApplication.kt          |   11 +
 app/src/main/java/com/future/driver/ui/main/GetOrderFragment.kt    |    4 
 app/src/main/java/com/future/driver/ui/main/MainActivity.kt        |  108 ++++++++++++++++--
 app/src/main/java/com/future/driver/base/BaseEvent.java            |    3 
 app/src/main/java/com/future/driver/utils/AudioRecordUtils.java    |   10 
 app/src/main/java/com/future/driver/ui/to_city/TripCityActivity.kt |   31 +++++
 app/src/main/java/com/future/driver/ui/main/TripActivity.kt        |   58 +++++----
 app/src/main/java/com/future/driver/netUtls/Api.java               |    1 
 app/src/main/java/com/future/driver/ui/main/OrderOverActivity.kt   |    1 
 app/build.gradle                                                   |    6 
 app/src/main/java/com/future/driver/ui/UiUtil.kt                   |    3 
 app/src/main/java/com/future/driver/utils/OSSUtil.java             |   66 +++++++++++
 12 files changed, 251 insertions(+), 51 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index 07fe27f..8c45b6c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -24,8 +24,8 @@
         applicationId "com.future.driver"
         minSdkVersion 21
         targetSdkVersion 29
-        versionCode 4
-        versionName "3.0.1"
+        versionCode 1
+        versionName "1.0"
         multiDexEnabled true
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         ndk {
@@ -35,7 +35,7 @@
         applicationVariants.all { variant ->
             // 更新至Android Studio 3.3 gradle 4.10.1
             variant.outputs.all {
-                outputFileName = "fuban_driver-${defaultConfig.versionName}-${new Date().format("yyyy-MM-dd" , TimeZone.getTimeZone("GMT+08")) }.apk"
+                outputFileName = "future_driver-${defaultConfig.versionName}-${new Date().format("yyyy-MM-dd" , TimeZone.getTimeZone("GMT+08")) }.apk"
             }
         }
         manifestPlaceholders = [
diff --git a/app/src/main/java/com/future/driver/base/BaseEvent.java b/app/src/main/java/com/future/driver/base/BaseEvent.java
index 157f966..d407de5 100644
--- a/app/src/main/java/com/future/driver/base/BaseEvent.java
+++ b/app/src/main/java/com/future/driver/base/BaseEvent.java
@@ -50,6 +50,9 @@
     public static final int FACE_SUC = 10030; // 人脸失败
     public static final int FACE_FAILED = 10031; // 人脸成功
 
+    public static final int START_RECORD = 10032; //开始录音任务
+    public static final int FINISH_RECORD = 10033; //结束录音任务
+
 
     private String msg;
     private int code;
diff --git a/app/src/main/java/com/future/driver/base/MyApplication.kt b/app/src/main/java/com/future/driver/base/MyApplication.kt
index 04e2c9b..51c5660 100644
--- a/app/src/main/java/com/future/driver/base/MyApplication.kt
+++ b/app/src/main/java/com/future/driver/base/MyApplication.kt
@@ -141,7 +141,7 @@
                                     val act = activities[activities.size - 1]
 //                                    MyApplication.getTTsManager().setVideoText("收到新的订单")
                                     when (orderSimpleData.orderType) {
-                                        1,2 -> {
+                                        1,2,7 -> {
                                             (act as MyBaseActivity).showOrder(
                                                 orderSimpleData.orderId.toString(),
                                                 orderSimpleData.orderType.toString(),
@@ -162,7 +162,7 @@
                                 if (orderSimpleData.status == 2) {
                                     val act = activities[activities.size - 1]
                                     when (orderSimpleData.orderType) {
-                                        1, 2 -> {
+                                        1, 2,7 -> {
                                             (act as MyBaseActivity).toDorderAct(
                                                 orderSimpleData.orderId.toString(),
                                                 orderSimpleData.orderType.toString()
@@ -195,7 +195,7 @@
                                     )
                                 val act = activities[activities.size - 1]
                                 when (orderSimpleData.orderType) {
-                                    1, 2 -> {
+                                    1, 2 ,7-> {
                                         (act as MyBaseActivity).showOrder(
                                             orderSimpleData.orderId.toString(),
                                             orderSimpleData.orderType.toString(),
@@ -391,6 +391,11 @@
         var aMapLocation: AMapLocation? = null
         var currentOrderId: String = ""
         var currentOrderType: String = ""
+
+        var recordOrderType = "" //当前录音的订单类型
+        var recordOrderId = "" //当前录音的订单id
+        var isRecording = false //当前是否在录音
+
         var orderStatueViews: MutableList<OrderStatueView> =
             mutableListOf()
         var testHeartNunm = 0
diff --git a/app/src/main/java/com/future/driver/netUtls/Api.java b/app/src/main/java/com/future/driver/netUtls/Api.java
index d6f5a0c..d0aa790 100644
--- a/app/src/main/java/com/future/driver/netUtls/Api.java
+++ b/app/src/main/java/com/future/driver/netUtls/Api.java
@@ -79,6 +79,7 @@
     public static String queryCityOrderInfo = "api/orderCrossCity/queryOrderInfo"; //api/orderCrossCity/queryOrderInfo 获取订单跨城详情
     public static String setOrderCrossCitySort = "api/orderCrossCity/setOrderCrossCitySort"; ///api/orderCrossCity/setOrderCrossCitySort 修改订单顺序(跨城)
     public static String setEnd = "api/order/specail"; //改目的地
+    public static String tape = "api/order/tape"; //提交录音
 
     /**
      * 消息
diff --git a/app/src/main/java/com/future/driver/ui/UiUtil.kt b/app/src/main/java/com/future/driver/ui/UiUtil.kt
index 31f0af5..0c16b13 100644
--- a/app/src/main/java/com/future/driver/ui/UiUtil.kt
+++ b/app/src/main/java/com/future/driver/ui/UiUtil.kt
@@ -22,6 +22,9 @@
             6 -> {
                 return "包车"
             }
+            7 -> {
+                return "接送机/站"
+            }
         }
         return ""
     }
diff --git a/app/src/main/java/com/future/driver/ui/main/GetOrderFragment.kt b/app/src/main/java/com/future/driver/ui/main/GetOrderFragment.kt
index afa9932..c295de2 100644
--- a/app/src/main/java/com/future/driver/ui/main/GetOrderFragment.kt
+++ b/app/src/main/java/com/future/driver/ui/main/GetOrderFragment.kt
@@ -117,7 +117,7 @@
             if (!data.remark.isNullOrEmpty()) {
                 tv_remark.text = data.remark
             }
-            if (orderType == "1") {
+            if (orderType == "1"||orderType == "7") {
                 tv_money.gone()
             }
             if (orderType == "5" || orderType == "4") {
@@ -204,7 +204,7 @@
                 "2" -> {
                     this.startActivity<TripActivity>("orderId" to orderId, "orderType" to orderType)
                 }
-                "1" -> {
+                "1","7" -> {
                     this.startActivity<TripActivity>("orderId" to orderId, "orderType" to orderType)
                 }
                 "3" -> {
diff --git a/app/src/main/java/com/future/driver/ui/main/MainActivity.kt b/app/src/main/java/com/future/driver/ui/main/MainActivity.kt
index f1b5833..ac6d2b0 100644
--- a/app/src/main/java/com/future/driver/ui/main/MainActivity.kt
+++ b/app/src/main/java/com/future/driver/ui/main/MainActivity.kt
@@ -6,8 +6,8 @@
 import android.os.Handler
 import android.os.Looper
 import android.provider.Settings
+import android.util.Log
 import android.widget.Toast
-import androidx.core.app.ActivityCompat
 import cn.sinata.rxnetty.NettyClient
 import cn.sinata.xldutils.utils.*
 import com.amap.api.location.AMapLocation
@@ -30,8 +30,10 @@
 import com.future.driver.ui.main.event.MineEventActivity
 import com.future.driver.ui.mine.MineActivity
 import com.future.driver.ui.mine.MsgActivity
+import com.future.driver.utils.AudioRecordUtils
 import com.future.driver.utils.Cache.CacheKey
 import com.future.driver.utils.DateUtil
+import com.future.driver.utils.OSSUtil
 import com.future.driver.utils.download.DownloadUtil
 import com.google.gson.Gson
 import com.lljjcoder.style.citylist.Toast.ToastUtils
@@ -42,8 +44,8 @@
 import org.jetbrains.anko.startActivity
 import org.jetbrains.anko.toast
 
-
-class MainActivity : MyBaseActivity(), AMapLocationListener {
+class MainActivity : MyBaseActivity(), AMapLocationListener,
+    AudioRecordUtils.OnAudioStatusUpdateListener {
 
     val mainFragment by lazy {
         MainFragment()
@@ -55,23 +57,34 @@
         setContentView(R.layout.activity_main)
     }
 
+    private var recorder:AudioRecordUtils? = null  //录音器
+    private val VOICE_LENGTH = 1000L*60*5 //实际5分钟一个片段
+//    private val VOICE_LENGTH = 1000L*15 //测试15秒一个片段
+
     override fun initView() {
         MyApplication.canPlayVoice = true
 //        var packageName = "com.android.providers.downloads";
 //        var intent =  Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
 //    intent.setData(Uri.parse("package:" + packageName));
 //    startActivity(intent);
-        if (CacheKey.getKeyStr(Const.REFUSE_LOCATION).isNotEmpty()&&!RxPermissions(this).isGranted(Manifest.permission.ACCESS_FINE_LOCATION)){
+        if (CacheKey.getKeyStr(Const.REFUSE_LOCATION).isNotEmpty()&&!RxPermissions(this).isGranted(
+                Manifest.permission.ACCESS_FINE_LOCATION
+            )){
             toast("没有定位权限,您将无法收到新订单推送")
         }else{
             if (!RxPermissions(this).isGranted(Manifest.permission.ACCESS_FINE_LOCATION)){
-                DialogUtil.getDelAndSureDialog(this,"去授权","否","《未来出行司机》需要获取您的当前位置信息,用于查询当前城市是否开通服务,我们会将您的位置实时上传至后端为您匹配和推送附近订单。如果拒绝定位权限,您将无法正常接单。",{
-                }){
+                DialogUtil.getDelAndSureDialog(
+                    this,
+                    "去授权",
+                    "否",
+                    "《未来出行司机》需要获取您的当前位置信息,用于查询当前城市是否开通服务,我们会将您的位置实时上传至后端为您匹配和推送附近订单。如果拒绝定位权限,您将无法正常接单。",
+                    {
+                    }){
                     val subscribe =
                         RxPermissions(this).request(Manifest.permission.ACCESS_FINE_LOCATION).subscribe {
                             if (!it){
                                 toast("没有定位权限,您将无法收到新订单推送")
-                                CacheKey.putKeyStr(Const.REFUSE_LOCATION,"1")
+                                CacheKey.putKeyStr(Const.REFUSE_LOCATION, "1")
                             }
                         }
                 }
@@ -96,7 +109,7 @@
         override fun orderInfo(data: OrderSimpleData?) {
             data?.let {
                 when(it.orderType){
-                    1,2,3 -> {
+                    1, 2, 3 -> {
                         if (it.status == 10 || it.status == 12) {
                             Handler(Looper.getMainLooper()).post {
                                 mainFragment?.refresh()
@@ -112,7 +125,7 @@
 
     private fun checkGps() {
         if (!AMapKit.isLocServiceEnable(this)){
-            DialogUtil.getDelAndSureDialog(this,"查看定位","退出","您暂未开启手机定位GPS,是否前往开启?",{
+            DialogUtil.getDelAndSureDialog(this, "查看定位", "退出", "您暂未开启手机定位GPS,是否前往开启?", {
                 onBackPressed()
             }){
                 val intent = Intent()
@@ -163,7 +176,7 @@
         mainFragment?.refresh()
     }
 
-    fun beOnDuty(b:Boolean){
+    fun beOnDuty(b: Boolean){
         if (b){
             avv_anim.visible()
             tv_up_avv.visible()
@@ -274,7 +287,7 @@
                     }else{
                         var map= getMapByAny()
                         map["type"] = bean[0].id
-                        callNet(Api.work,map) {
+                        callNet(Api.work, map) {
                             toast("上班成功")
                             beOnDuty(true)
                             EventBus.getDefault().post(BaseEvent(BaseEvent.START_CAR))
@@ -325,16 +338,87 @@
             BaseEvent.FACE_FAILED -> {
                 tv_face.visible()
             }
+            BaseEvent.START_RECORD -> {
+                if (!MyApplication.isRecording)
+                    startRecord()
+            }
+            BaseEvent.FINISH_RECORD -> {
+                recorder?.stopRecord()
+            }
         }
     }
 
     override fun onLocationChanged(p0: AMapLocation?) {
         if (p0?.errorCode == 0) {
             MyApplication.aMapLocation = p0
-            CacheKey.putKeyStr("location",Gson().toJson(p0))
+            CacheKey.putKeyStr("location", Gson().toJson(p0))
         }
     }
 
+    private fun startRecord(){
+        if (recorder == null){
+            recorder = AudioRecordUtils(getExternalFilesDir(null)?.path+"/")
+            recorder?.setOnAudioStatusUpdateListener(this)
+        }
+        if (RxPermissions(this).isGranted(Manifest.permission.RECORD_AUDIO)&&RxPermissions(this).isGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE)){
+            Log.e("mmp","订单${MyApplication.recordOrderId} 开始录音...")
+            recorder?.startRecord()
+        }
+        else
+            toast("缺少录音相关权限")
+    }
+
+    private fun updateVoice(filePath: String) {
+        val ossUtil = OSSUtil(this)
+        ossUtil.uploadSingleWithSize(filePath, object : OSSUtil.OSSUploadCallBack() {
+            override fun onFinishWithSize(url: String?, size: Long) {
+                super.onFinishWithSize(url, size)
+                Log.e("mmp","录音保存路径:${url},大小:${size/1024}kb")
+                val mapByAny = getMapByAny()
+                mapByAny["fileFormat"] = "caf"
+                mapByAny["fileLink"] = url
+                mapByAny["fileSize"] = size/1024
+                mapByAny["orderId"] = MyApplication.recordOrderId
+                mapByAny["orderType"] = MyApplication.recordOrderType
+                callNet(false,Api.tape,mapByAny){
+
+                }
+            }
+
+            override fun onFial(message: String?) {
+                super.onFial(message)
+                runOnUiThread {
+                    Toast.makeText(this@MainActivity, "录音上传失败,请检查网络", Toast.LENGTH_SHORT).show()
+                }
+            }
+        })
+    }
+
+    override fun onUpdate(db: Double, time: Long) {
+        MyApplication.isRecording = true
+        if (time >= VOICE_LENGTH) {
+            Log.e("mmp","订单${MyApplication.recordOrderId} 录音片段完成")
+            recorder?.stopRecord() //结束录音
+        }
+    }
+
+    override fun onStop(filePath: String) {
+        MyApplication.isRecording = false
+        Thread {
+            updateVoice(filePath)
+        }.start()
+        if (MyApplication.currentOrderId.isNotEmpty()){//行程未结束 继续录制下一段
+            Log.e("mmp","订单${MyApplication.recordOrderId} 开始下一片段录音")
+            recorder?.startRecord()
+        }
+    }
+
+    override fun onStartPlay() {
+    }
+
+    override fun onFinishPlay() {
+    }
+
     override fun onDestroy() {
         super.onDestroy()
         MyApplication.canPlayVoice = false
diff --git a/app/src/main/java/com/future/driver/ui/main/OrderOverActivity.kt b/app/src/main/java/com/future/driver/ui/main/OrderOverActivity.kt
index c645c29..2e07b92 100644
--- a/app/src/main/java/com/future/driver/ui/main/OrderOverActivity.kt
+++ b/app/src/main/java/com/future/driver/ui/main/OrderOverActivity.kt
@@ -42,6 +42,7 @@
         ll_order_cancel.gone()
         MyApplication.currentOrderType = ""
         MyApplication.currentOrderId = ""
+        EventBus.getDefault().post(BaseEvent(BaseEvent.FINISH_RECORD))
         ll_pay_result.gone()
         tv_show_pay_over.gone()
     }
diff --git a/app/src/main/java/com/future/driver/ui/main/TripActivity.kt b/app/src/main/java/com/future/driver/ui/main/TripActivity.kt
index 3c6eeb3..a6aed92 100644
--- a/app/src/main/java/com/future/driver/ui/main/TripActivity.kt
+++ b/app/src/main/java/com/future/driver/ui/main/TripActivity.kt
@@ -102,8 +102,8 @@
         MyApplication.addOrderView(object : MyApplication.OrderStatueView {
             override fun orderInfo(data: OrderSimpleData?) {
                 data?.let {
-                    when(it.orderType){
-                        1,2,3 -> {
+                    when (it.orderType) {
+                        1, 2, 3,7 -> {
                             if (it.status == 10 || it.status == 12) {
                                 Handler(Looper.getMainLooper()).post {
                                     toast("用户已取消订单")
@@ -198,9 +198,9 @@
                         moveCamera(aMap, carMarker!!.position)
                     }
                     5, 6 -> {
-                        if (endMarker == null){
+                        if (endMarker == null) {
                             moveCamera(aMap, carMarker!!.position)
-                        }else{
+                        } else {
                             moveCamera(aMap, carMarker!!.position, endMarker!!.position)
                         }
                     }
@@ -230,9 +230,9 @@
                     }
 
                     5, 6 -> {
-                        if (endMarker == null){
+                        if (endMarker == null) {
                             toast("暂无终点")
-                        }else{
+                        } else {
                             startActivity<GPSNaviActivity>(
                                 "start" to carMarker!!.position,
                                 "end" to endMarker!!.position
@@ -259,13 +259,13 @@
                             toast("只能在预约时间的半小时内出行")
                             return@let
                         }
-                        if (it.data.orderState == 4&& !rxPermissions.isGranted(Manifest.permission.RECORD_AUDIO)&& !rxPermissions.isGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE)){
+                        if (it.data.orderState == 4&& (!rxPermissions.isGranted(Manifest.permission.RECORD_AUDIO) || !rxPermissions.isGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE))){
                             DialogUtil.getDelAndSureDialog(this,"去授权","取消","根据平台规则,为了保证司乘安全,我们将会对行程进行录音,因此需要获取录音和文件存储权限",{
                             }){
                                 rxPermissions.request(Manifest.permission.RECORD_AUDIO,Manifest.permission.WRITE_EXTERNAL_STORAGE).subscribe {
                                     if (it){
 
-                                    }else{
+                                    } else {
                                         toast("请前往应用设置页面打开录音和文件存储权限")
                                     }
                                 }
@@ -281,9 +281,9 @@
                             return@let
                         }
                         it.data.orderState++
-                        callStatue(it.data.orderState,{
+                        callStatue(it.data.orderState, {
                             showStatueMapUI(it)
-                            if (it.data.orderState == 5){
+                            if (it.data.orderState == 5) {
                                 showRecordDialog()
                             }
                         }) {
@@ -292,12 +292,12 @@
                     }
                     5, 6 -> {
                         it.data.orderState = 6
-                        when(orderType){
+                        when (orderType) {
                             "2" -> {
                                 showMoneyTypeDialog()
                             }
-                            "1" -> {
-                                callStatue(6,{
+                            "1","7" -> {
+                                callStatue(6, {
                                     startActivity<MajorSureMoneyActivity>(
                                         "orderId" to orderId,
                                         "orderType" to orderType
@@ -331,7 +331,7 @@
         view.tv_view_two_base.gravity = Gravity.CENTER
         view.view_hint_close_base.visibility = View.INVISIBLE
         view.tv_count_timer.visible()
-        val timer = object:CountDownTimer(3000,1000){
+        val timer = object:CountDownTimer(3000, 1000){
             override fun onTick(millisUntilFinished: Long) {
                 view.tv_count_timer.text = "${(millisUntilFinished/1000)+1}S"
             }
@@ -343,6 +343,7 @@
         onlySureDialog.setOnDismissListener {
             timer.cancel()
         }
+        EventBus.getDefault().post(BaseEvent(BaseEvent.START_RECORD))
     }
 
     private fun callStatue(i: Int, click: () -> Unit, clickFail: () -> Unit) {
@@ -352,7 +353,7 @@
         map["state"] = i
         map["lat"] = MyApplication.getLocation().latitude
         map["lon"] = MyApplication.getLocation().longitude
-        callNet(Api.process, map,{
+        callNet(Api.process, map, {
             click()
         }) {
             clickFail()
@@ -370,7 +371,7 @@
         pop.contentView.tv_ok.setOnClickListener {
             pop.dismiss()
             if (payType == 1) {
-                callStatue(6,{
+                callStatue(6, {
                     startActivity<FillOutActivity>("orderId" to orderId, "orderType" to orderType)
                     finish()
                 }) {
@@ -383,7 +384,7 @@
                     map["orderId"] = orderId
                     map["orderType"] = orderType
                     map["type"] = payType
-                    callStatue(6,{
+                    callStatue(6, {
                         callNet(Api.confirmFees, map) {
                             finish()
                             startActivity<OrderOverActivity>(
@@ -484,6 +485,8 @@
     private fun callOrder() {
         MyApplication.currentOrderId = orderId
         MyApplication.currentOrderType = orderType
+        MyApplication.recordOrderId = orderId
+        MyApplication.recordOrderType = orderType
         var map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
@@ -506,7 +509,7 @@
                 tv_end_address.text = it.data.endAddress
                 tv_change_end.gone()
             }
-            if (orderType == "1"){
+            if (orderType == "1"||orderType == "7"){
                 tv_red_money.gone()
             }
             tv_red_money.text = it.data.tipMoney.toString() + "元红包"
@@ -532,7 +535,7 @@
             view.iv_img.setImageResource(R.mipmap.end_point)
             endMarker = addMarker(aMap, it.data.endLat, it.data.endLon, view, "")
         }else if (endMarker?.position?.latitude == 0.0){
-            endMarker?.position = LatLng(orderBean.data.endLat,orderBean.data.endLon)
+            endMarker?.position = LatLng(orderBean.data.endLat, orderBean.data.endLon)
         }
         endMarker?.isVisible = false
         if (carMarker == null) {
@@ -572,7 +575,7 @@
         val carView = createView(R.layout.item_map_market, this)
         carView.iv_img.setImageResource(R.mipmap.car_trip)
         carView.tv_hint.visible()
-        carView.tv_hint.setColorBuild(this,content,R.color.main_yellow_qia,4,content.length)
+        carView.tv_hint.setColorBuild(this, content, R.color.main_yellow_qia, 4, content.length)
         return carView
     }
 
@@ -582,7 +585,7 @@
         tv_Right.visible()
         when (it.data.orderState) {
             2, 3 -> {
-                if (it.data.reassign == 1){
+                if (it.data.reassign == 1) {
                     tv_Right.gone()
                 }
                 iv_to_gd.visible()
@@ -600,7 +603,7 @@
             }
             4 -> {
                 iv_to_gd.gone()
-                if (it.data.reassign == 1){
+                if (it.data.reassign == 1) {
                     tv_Right.gone()
                 }
                 closeLine()
@@ -625,6 +628,9 @@
                 changeCarFive(true)
                 setTitleText("服务中")
                 slide_btn.changeButtonText("送达该乘客")
+                if (!MyApplication.isRecording){
+                    EventBus.getDefault().post(BaseEvent(BaseEvent.START_RECORD))
+                }
             }
         }
     }
@@ -717,17 +723,17 @@
                 mapByAny["lon"] = lon
                 mapByAny["endAddress"] = name
                 mapByAny["orderId"] = orderId
-                callNet(Api.setEnd,mapByAny){
+                callNet(Api.setEnd, mapByAny) {
                     orderBean.data.endAddress = name
                     orderBean.data.endLat = lat
                     orderBean.data.endLon = lon
                     tv_end_address.text = name
                     tv_change_end.gone()
-                    if (byChangeEnd){
+                    if (byChangeEnd) {
                         orderBean.data.orderState++
-                        callStatue(orderBean.data.orderState,{
-                            showStatueMapUI(orderBean)
+                        callStatue(orderBean.data.orderState, {
                             showRecordDialog()
+                            showStatueMapUI(orderBean)
                         }) {
                             orderBean.data.orderState--
                         }
diff --git a/app/src/main/java/com/future/driver/ui/to_city/TripCityActivity.kt b/app/src/main/java/com/future/driver/ui/to_city/TripCityActivity.kt
index 39fd2ae..515773b 100644
--- a/app/src/main/java/com/future/driver/ui/to_city/TripCityActivity.kt
+++ b/app/src/main/java/com/future/driver/ui/to_city/TripCityActivity.kt
@@ -1,8 +1,10 @@
 package com.future.driver.ui.to_city
 
 import android.os.Bundle
+import android.os.CountDownTimer
 import android.os.Handler
 import android.os.Looper
+import android.view.Gravity
 import android.view.View
 import androidx.recyclerview.widget.LinearLayoutManager
 import cn.sinata.xldutils.utils.*
@@ -41,6 +43,7 @@
 import io.reactivex.schedulers.Schedulers
 import kotlinx.android.synthetic.main.activity_trip_city.*
 import kotlinx.android.synthetic.main.dialog_select_pay_type.view.*
+import kotlinx.android.synthetic.main.dialog_sure_and_del.view.*
 import kotlinx.android.synthetic.main.item_city_over.*
 import kotlinx.android.synthetic.main.item_city_over.view.*
 import kotlinx.android.synthetic.main.item_map_market.view.*
@@ -95,6 +98,10 @@
         setTitleText("已完成")
         tv_Right.text = "申请改派"
         orderId = intent.getStringExtra("orderId")
+
+        MyApplication.recordOrderId = orderId
+        MyApplication.recordOrderType = orderType
+
         recycler_view_order_list.layoutManager = LinearLayoutManager(this)
         recycler_view_order_list.adapter = tripItemAdapter
         callOrder()
@@ -325,6 +332,7 @@
             iv_move.gone()
             iv_to_gd.gone()
             cl_over_view.visible()
+            EventBus.getDefault().post(BaseEvent(BaseEvent.FINISH_RECORD))
             recycler_view_money.layoutManager = LinearLayoutManager(this)
             recycler_view_money.adapter = overAdapter
             orderBean?.let {
@@ -345,6 +353,27 @@
             }
         }
         return b
+    }
+
+    private fun showRecordDialog(){
+        val onlySureDialog = DialogUtil.getOnlySureDialog(this, "即将开始行程,\n行程中平台自动开启录音") {}
+        val view = DialogUtil.getView(onlySureDialog)
+        view.tv_view_two_base.gravity = Gravity.CENTER
+        view.view_hint_close_base.visibility = View.INVISIBLE
+        view.tv_count_timer.visible()
+        val timer = object: CountDownTimer(3000, 1000){
+            override fun onTick(millisUntilFinished: Long) {
+                view.tv_count_timer.text = "${(millisUntilFinished/1000)+1}S"
+            }
+
+            override fun onFinish() {
+                view.tv_sure_base.callOnClick()
+            }
+        }.start()
+        onlySureDialog.setOnDismissListener {
+            timer.cancel()
+        }
+        EventBus.getDefault().post(BaseEvent(BaseEvent.START_RECORD))
     }
 
     private fun getAllByOrder(): String? {
@@ -734,6 +763,8 @@
                 changeCarFive(true)
                 setTitleText("服务中")
                 slide_btn.changeButtonText("送达乘客$orderPosition")
+                if (!MyApplication.isRecording)
+                    EventBus.getDefault().post(BaseEvent(BaseEvent.START_RECORD))
             }
         }
     }
diff --git a/app/src/main/java/com/future/driver/utils/AudioRecoderUtils.java b/app/src/main/java/com/future/driver/utils/AudioRecordUtils.java
similarity index 96%
rename from app/src/main/java/com/future/driver/utils/AudioRecoderUtils.java
rename to app/src/main/java/com/future/driver/utils/AudioRecordUtils.java
index 199523f..a79c484 100644
--- a/app/src/main/java/com/future/driver/utils/AudioRecoderUtils.java
+++ b/app/src/main/java/com/future/driver/utils/AudioRecordUtils.java
@@ -13,7 +13,7 @@
 
 import cn.sinata.xldutils.utils.TimeUtils;
 
-public class AudioRecoderUtils {
+public class AudioRecordUtils {
 
     //文件路径
     private String filePath;
@@ -22,7 +22,7 @@
 
     private MediaRecorder mMediaRecorder;
     private final String TAG = "fan";
-    public static final int MAX_LENGTH = 1000 * 60;// 最大录音时长1000*60*10;
+    public static final int MAX_LENGTH = 1000 * 600;// 最大录音时长十分钟,实际行程设置为5分钟上传一次
 
     private OnAudioStatusUpdateListener audioStatusUpdateListener;
     private MediaPlayer mMediaPlayer;
@@ -30,12 +30,12 @@
     /**
      * 文件存储默认sdcard/record
      */
-    public AudioRecoderUtils() {
+    public AudioRecordUtils() {
         //默认保存路径为/sdcard/record/下
         this(Environment.getExternalStorageDirectory() + "/record/");
     }
 
-    public AudioRecoderUtils(String filePath) {
+    public AudioRecordUtils(String filePath) {
 
         File path = new File(filePath);
         if (!path.exists())
@@ -105,7 +105,7 @@
             mMediaRecorder = null;
 
             audioStatusUpdateListener.onStop(filePath);
-            filePath = "";
+//            filePath = ""; //这行代码会引起连续录音文件为空的bug
 
         } catch (RuntimeException e) {
             if (mMediaRecorder != null) {
diff --git a/app/src/main/java/com/future/driver/utils/OSSUtil.java b/app/src/main/java/com/future/driver/utils/OSSUtil.java
index 257748c..b320a6c 100644
--- a/app/src/main/java/com/future/driver/utils/OSSUtil.java
+++ b/app/src/main/java/com/future/driver/utils/OSSUtil.java
@@ -15,6 +15,7 @@
 import com.alibaba.sdk.android.oss.internal.OSSAsyncTask;
 import com.alibaba.sdk.android.oss.model.PutObjectRequest;
 import com.alibaba.sdk.android.oss.model.PutObjectResult;
+import com.future.driver.base.MyApplication;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -122,6 +123,56 @@
         mTasks.add(task);
     }
 
+    private void uploadVoice(final String url, final OSSUploadCallBack callBack) {
+        String recordOrderId = MyApplication.Companion.getRecordOrderId();
+        String recordOrderType = MyApplication.Companion.getRecordOrderType();
+        final String objectKey = "driver/record/" +recordOrderType+"_"+recordOrderId+"_"+url.substring(url.lastIndexOf("/")+1);
+        PutObjectRequest put = new PutObjectRequest(bucketName, objectKey, url);
+        put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
+            long temp = 0;
+            @Override
+            public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
+                CURRENT_SIZE += currentSize - temp;
+                temp = currentSize;
+                callBack.onSizeProgress(CURRENT_SIZE, TOTAL_SIZE);
+            }
+        });
+
+        OSSAsyncTask<PutObjectResult> task = mOss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
+            @Override
+            public void onSuccess(PutObjectRequest request, PutObjectResult result) {
+                mActivity.runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        URLs.add(mOss.presignPublicObjectURL(bucketName, objectKey));
+                        callBack.onFinishWithSize(URLs.get(0),CURRENT_SIZE);
+                        mTasks.clear();
+                    }
+                });
+
+            }
+
+
+            @Override
+            public void onFailure(PutObjectRequest request, ClientException
+                    clientException, ServiceException serviceException) {
+                // 请求异常
+                if (clientException != null) {
+                    clientException.printStackTrace();
+                    // 本地异常如网络异常等
+                    callBack.onFial("网络异常");
+                }
+                if (serviceException != null) {
+                    serviceException.printStackTrace();
+                    // 服务异常
+                    callBack.onFial("服务器异常");
+                }
+
+            }
+        });
+        mTasks.add(task);
+    }
+
 
     /**
      * 单文件上传
@@ -137,6 +188,17 @@
         }
         TOTAL_COUNT = single.size();
         upload(single, true, callBack);
+    }
+
+
+    /**
+     * 单文件上传
+     *
+     * @param url      the url
+     * @param callBack the call back
+     */
+    public void uploadSingleWithSize(String url, OSSUploadCallBack callBack) {
+        uploadVoice(url,  callBack);
     }
 
     /**
@@ -158,6 +220,10 @@
         public void onFinish(String url) {
 
         }
+        //单张上传成功
+        public void onFinishWithSize(String url,Long size) {
+
+        }
 
         //批量上传成功
         public void onFinish(ArrayList<String> urls) {

--
Gitblit v1.7.1