From d77993fdabc2eece4b5ae442a0b3228ec7644cef Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Fri, 23 Sep 2022 19:24:41 +0800 Subject: [PATCH] =?UTF-8?q?[2.11.0/1.6.0]=20bus=20=E5=8F=B8=E6=9C=BA?= =?UTF-8?q?=E7=AB=AF/=E4=B9=98=E5=AE=A2=E5=B1=8F=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=92=8CUI=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/BusPassengerRouteFragment.java | 5 + .../res/layout/bus_p_stations_common_item.xml | 1 + .../och/bus/bean/BusCloseTaskRequest.java | 2 +- .../BusQueryWriteOffPassengersResponse.java | 13 ++ .../BusWriteOffPassengersQueryRequest.java | 24 ++++ .../mogo/och/bus/bean/WriteOffPassenger.java | 12 ++ .../com/mogo/och/bus/constant/BusConst.kt | 2 + .../com/mogo/och/bus/model/BusOrderModel.java | 113 +++++++++-------- .../mogo/och/bus/net/BusServiceManager.java | 18 +++ .../com/mogo/och/bus/net/IBusApiService.java | 18 ++- .../bus/presenter/BusModelLoopManager.java | 8 +- OCH/mogo-och-bus/src/main/res/raw/bus_di.mp3 | Bin 0 -> 15150 bytes .../common/module/utils/SoundPoolHelper.java | 118 ++++++++++++++++++ 13 files changed, 271 insertions(+), 63 deletions(-) create mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusQueryWriteOffPassengersResponse.java create mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusWriteOffPassengersQueryRequest.java create mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/WriteOffPassenger.java create mode 100644 OCH/mogo-och-bus/src/main/res/raw/bus_di.mp3 create mode 100644 OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/SoundPoolHelper.java diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java index 3d14392c01..29a617b2fd 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java @@ -11,7 +11,9 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.PagerSnapHelper; import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.SnapHelper; import com.amap.api.maps.model.LatLng; import com.elegant.utils.UiThreadHandler; @@ -88,10 +90,13 @@ public class BusPassengerRouteFragment extends mRouteInfoView = findViewById(R.id.bus_p_line_cl); mStationsListRv = findViewById(R.id.bus_p_line_stations_rl); + LinearLayoutManager manager = new LinearLayoutManager(getContext()); mStationsListRv.setLayoutManager(manager); mAdapter = new BusPassengerLineStationsAdapter(getContext(), mStationsList); mStationsListRv.setAdapter(mAdapter); + SnapHelper snapHelper = new PagerSnapHelper(); + snapHelper.attachToRecyclerView(mStationsListRv); mMapArrowIcon = findViewById(R.id.bus_p_arrow_nor); diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_common_item.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_common_item.xml index 9756db9d25..5a70e82c9c 100644 --- a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_common_item.xml +++ b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_common_item.xml @@ -34,6 +34,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="fitXY" + android:layout_marginLeft="12px" android:src="@drawable/bus_p_line_blue" app:layout_constraintLeft_toLeftOf="@+id/bus_p_circle" app:layout_constraintRight_toRightOf="@+id/bus_p_circle" diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusCloseTaskRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusCloseTaskRequest.java index 02c4e1e8f1..d8a11924af 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusCloseTaskRequest.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusCloseTaskRequest.java @@ -3,7 +3,7 @@ package com.mogo.och.bus.bean; import com.mogo.cloud.passport.MoGoAiCloudClientConfig; /** - * + * 中止/结束任务请求 */ public class BusCloseTaskRequest { diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusQueryWriteOffPassengersResponse.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusQueryWriteOffPassengersResponse.java new file mode 100644 index 0000000000..36a5e3b409 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusQueryWriteOffPassengersResponse.java @@ -0,0 +1,13 @@ +package com.mogo.och.bus.bean; + +import com.mogo.eagle.core.data.BaseData; + +import java.util.List; + +/** + * @author: wangmingjun + * @date: 2021/10/19 + */ +public class BusQueryWriteOffPassengersResponse extends BaseData { + public List data; +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusWriteOffPassengersQueryRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusWriteOffPassengersQueryRequest.java new file mode 100644 index 0000000000..6f07456c78 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusWriteOffPassengersQueryRequest.java @@ -0,0 +1,24 @@ +package com.mogo.och.bus.bean; + +import com.mogo.cloud.passport.MoGoAiCloudClientConfig; + +/** + * 查询核销乘客 + */ +public class BusWriteOffPassengersQueryRequest { + + private String sn; + private int taskId; + private int siteId; + private long verificationTime; + public BusWriteOffPassengersQueryRequest(int taskId, int siteId,long prePassengerTime) { + this.sn = MoGoAiCloudClientConfig.getInstance().getSn(); + this.taskId = taskId; + this.siteId = siteId; + this.verificationTime = prePassengerTime; + } + + public String getSn() { + return sn; + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/WriteOffPassenger.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/WriteOffPassenger.java new file mode 100644 index 0000000000..0e2bebe17d --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/WriteOffPassenger.java @@ -0,0 +1,12 @@ +package com.mogo.och.bus.bean; + +/** + * @author: wangmingjun + * @date: 2022/9/23 + */ +public class WriteOffPassenger { + public String phone; + public String orderNo; + public int passengerSize; + public long writeOffTime; +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt index 867aa2df61..1c8cf2601c 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt @@ -77,7 +77,9 @@ class BusConst { const val ARRIVE_AT_END_STATION_DISTANCE = 10 // 轮询 + const val LOOP_PASSENGER_5S = 5 * 1000L const val LOOP_PASSENGER_2S = 2 * 1000L const val LOOP_PASSENGER_1S = 1 * 1000L + const val LOOP_DELAY_500 = 500L } } \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java index 767438c745..ce6eafa0c5 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java @@ -8,7 +8,6 @@ import android.content.Context; import android.location.Location; import android.os.Handler; import android.os.Message; -import android.text.TextUtils; import androidx.annotation.NonNull; @@ -30,16 +29,16 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListen import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.map.navi.IMogoCarLocationChangedListener2; import com.mogo.module.common.MogoApisHandler; -import com.mogo.och.bus.bean.BusOrderBean; -import com.mogo.och.bus.bean.BusOrdersResponse; +import com.mogo.och.bus.R; +import com.mogo.och.bus.bean.BusQueryWriteOffPassengersResponse; import com.mogo.och.bus.bean.BusRoutePlanningUpdateReqBean; import com.mogo.och.bus.bean.BusRoutesResponse; import com.mogo.och.bus.bean.BusRoutesResult; import com.mogo.och.bus.bean.BusStationBean; import com.mogo.och.bus.bean.QueryLeaveAwayPassengersResponse; +import com.mogo.och.bus.bean.WriteOffPassenger; import com.mogo.och.bus.callback.IBusControllerStatusCallback; import com.mogo.och.bus.callback.IRefreshBusStationsCallback; import com.mogo.och.bus.callback.ISlidePannelHideCallback; @@ -54,23 +53,18 @@ import com.mogo.och.common.module.biz.provider.LoginService; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; import com.mogo.och.common.module.utils.DateTimeUtil; import com.mogo.och.common.module.utils.PinYinUtil; +import com.mogo.och.common.module.utils.SoundPoolHelper; import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.StatusDescriptor; -import com.zhjt.service.chain.ChainLog; -import com.zhjt.service.chain.TracingConstants; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.TimeUnit; -import io.reactivex.Observable; -import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.exceptions.UndeliverableException; import io.reactivex.functions.Consumer; import io.reactivex.plugins.RxJavaPlugins; -import io.reactivex.schedulers.Schedulers; import mogo.telematics.pad.MessagePad; /** @@ -114,11 +108,13 @@ public class BusOrderModel { private LoginService loginService; + private long prePassengerWriteOffTime = 0; //记录最后查询到乘客核销的时间 + private final Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { if ( msg.what == MSG_QUERY_BUS_STATION ) { - BusOrderModel.getInstance().queryBusRoutes(); + queryBusRoutes(); return true; } return false; @@ -509,6 +505,7 @@ public class BusOrderModel { isGoingToNextStation = false; if (o.code == 0){ // 重置成功 queryBusRoutes(); + startOrStopQueryPassengerWriteOff(false); } } @@ -588,12 +585,53 @@ public class BusOrderModel { */ public void queryPassengerWriteOff(){ //todo 查询接口拿到核销乘客波播报 + if ( backgroundCurrentStationIndex > stationList.size() - 1 ) { //到站短时间内调用多次 + CallerLogger.INSTANCE.e( M_BUS + TAG, "数组越界" ); + return; + } + BusServiceManager.getInstance().queryStationWriteOffPassengers(mContext, + currentTaskId, + stationList.get(backgroundCurrentStationIndex).getSiteId(), + prePassengerWriteOffTime, + new IBusServiceCallback(){ + + @Override + public void onSuccess(BusQueryWriteOffPassengersResponse o) { + if (o.code !=0 || o.data == null || o.data.isEmpty()){ + return; + } + List passengers = o.data; + playWriteOffPassengersMsg(passengers); + } + + @Override + public void onFail(String failMsg) { + + } + }); + } + + private void playWriteOffPassengersMsg(List passengers) { + for (int i=0; i< passengers.size();i++){ + WriteOffPassenger passenger = passengers.get(i); + CallerLogger.INSTANCE.e( M_BUS + TAG, "size = " + passenger.passengerSize+ + " time = "+passenger.writeOffTime); + prePassengerWriteOffTime = passenger.writeOffTime; + int passengerNum = passenger.passengerSize; + if (passengerNum > 1){ //多人播报 "x人" + AIAssist.getInstance(mContext).speakTTSVoice(passengerNum + "人"); + }else { //是 1 播放 "滴" + SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(mContext, R.raw.bus_di); + } + } } private void startOrStopQueryPassengerWriteOff(boolean isStart){ if (isStart){ BusModelLoopManager.getInstance().startQueryPassengerWriteOffLoop(); }else { + prePassengerWriteOffTime = 0; + SoundPoolHelper.getSoundPoolHelper().releaseSoundPool(); BusModelLoopManager.getInstance().stopQueryPassengerWriteOffLoop(); } } @@ -601,15 +639,13 @@ public class BusOrderModel { /** * 到站后重置站点状态 */ - private void arriveSiteStation(boolean isRestart) { + private void arriveSiteStation() { if ( backgroundCurrentStationIndex +1 > stationList.size() - 1 ) { //到站短时间内调用多次 CallerLogger.INSTANCE.e( M_BUS + TAG, "数组越界" ); return; } - int arrivedStationIndex = 0; - if (!isRestart){ - arrivedStationIndex = backgroundCurrentStationIndex + 1; - } + int arrivedStationIndex = backgroundCurrentStationIndex + 1; + CallerLogger.INSTANCE.d(M_BUS + TAG,"arriveSiteStation-currentStationIndex = "+ arrivedStationIndex); BusServiceManager.getInstance().arriveSiteStation(mContext , @@ -620,11 +656,9 @@ public class BusOrderModel { @Override public void onSuccess(BaseData o) { CallerLogger.INSTANCE.d(M_BUS + TAG,"arriveSiteStation success"); - if (!isRestart){ - queryBusRoutes(); - //todo 开始轮询到站核销的乘客 - startOrStopQueryPassengerWriteOff(true); - } + queryBusRoutes(); + //5s轮询核销乘客 + startOrStopQueryPassengerWriteOff(true); } @Override @@ -668,20 +702,6 @@ public class BusOrderModel { }); } - private void arrivedBusStationSuccess() { - List site = busRoutesResult.getSites(); - if (site != null && site.size() > 0){ - backgroundCurrentStationIndex ++; - if (refreshBusStationsCallback != null){ - String lineTime = DateTimeUtil.formatLongToString( - busRoutesResult.getTaskTime(), - DateTimeUtil.TAXI_HH_mm); - refreshBusStationsCallback.updateBusTaskStatus(busRoutesResult.getName(),lineTime, - stationList, backgroundCurrentStationIndex ,true); - } - } - } - // /** // * 查询到站下车乘客 // */ @@ -763,18 +783,16 @@ public class BusOrderModel { } } + if (backgroundCurrentStationIndex == 0){ //默认是第一站到站查询 + startOrStopQueryPassengerWriteOff(true); + } + BusStationBean currentStation = stationList.get(backgroundCurrentStationIndex); CallerLogger.INSTANCE.d( M_BUS + TAG, "渲染站点信息服务端currentStationIndex="+backgroundCurrentStationIndex +" isLeaving()="+currentStation.isLeaving()); - //当前站点是始发站,告诉服务端到达始发站。 如果没有这个节点, 服务器不知道始发站到达状态 - // ,订单开始站下在始发站的状态流转有问题 2022.9.23不需要再调用此接口,拿到任务默认就是首站 -// if (backgroundCurrentStationIndex == 0 && !currentStation.isLeaving()){ -// arriveSiteStation(true); -// } - // 美化是否开始 if (FunctionBuildConfig.isDemoMode && (backgroundCurrentStationIndex >= 0 && backgroundCurrentStationIndex <= stationList.size()-1) @@ -923,18 +941,7 @@ public class BusOrderModel { CallerLogger.INSTANCE.d( M_BUS + TAG, "到站====currentStationIndex=" + backgroundCurrentStationIndex); isGoingToNextStation = false; - arriveSiteStation(false); - -// queryStationLeaveAwayPassengers();// 2.11.0不再播报乘客下车 -// UiThreadHandler.postDelayed(new Runnable() {// 先查询下车乘客,再上报到站,便于后台筛查下车订单 -// @Override -// public void run() { -// if (!hadQueryLeaveAwayPassager){ -// arriveSiteStation(false); -// } -// hadQueryLeaveAwayPassager = false; -// } -// },1500); + arriveSiteStation(); } public boolean isGoingToNextStation() { diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.java index c0ed142fde..d99fcc5d26 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.java @@ -13,8 +13,10 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.och.bus.bean.BusCloseTaskRequest; import com.mogo.och.bus.bean.BusQueryLineTaskResponse; import com.mogo.och.bus.bean.BusQueryLinesResponse; +import com.mogo.och.bus.bean.BusQueryWriteOffPassengersResponse; import com.mogo.och.bus.bean.BusRoutePlanningUpdateReqBean; import com.mogo.och.bus.bean.BusRoutesResponse; +import com.mogo.och.bus.bean.BusWriteOffPassengersQueryRequest; import com.mogo.och.bus.bean.CarHeartbeatReqBean; import com.mogo.och.bus.bean.BusOrdersResponse; import com.mogo.och.bus.bean.BusQueryLineStationsRequest; @@ -157,6 +159,22 @@ public class BusServiceManager { .subscribe(getSubscribeImpl(context,callback,"queryStationLeaveAwayPassengers")); } + /** + * 查询当前到站点核销乘客 + * @param context + * @param siteId + * @param callback + */ + public void queryStationWriteOffPassengers(Context context,int taskId,int siteId,long prePassengerTime + , IBusServiceCallback callback){ + mService.queryWriteOffPassengers( MoGoAiCloudClientConfig.getInstance().getServiceAppId() + ,MoGoAiCloudClientConfig.getInstance().getToken() + ,new BusWriteOffPassengersQueryRequest(taskId,siteId,prePassengerTime)) + .subscribeOn( Schedulers.io() ) + .observeOn( AndroidSchedulers.mainThread() ) + .subscribe(getSubscribeImpl(context,callback,"queryStationWriteOffPassengers")); + } + /** diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusApiService.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusApiService.java index c1ef5dd7a6..7eced02c3a 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusApiService.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusApiService.java @@ -1,8 +1,9 @@ package com.mogo.och.bus.net; import com.mogo.eagle.core.data.BaseData; import com.mogo.och.bus.bean.BusCloseTaskRequest; -import com.mogo.och.bus.bean.BusOperationStatusRequest; import com.mogo.och.bus.bean.BusOrdersResponse; +import com.mogo.och.bus.bean.BusQueryWriteOffPassengersResponse; +import com.mogo.och.bus.bean.BusWriteOffPassengersQueryRequest; import com.mogo.och.bus.bean.BusQueryLineTaskResponse; import com.mogo.och.bus.bean.BusQueryLinesResponse; import com.mogo.och.bus.bean.BusRoutePlanningUpdateReqBean; @@ -128,10 +129,6 @@ public interface IBusApiService { @POST( "/autopilot-car-hailing/location/v2/driver/bus/saveLineCoordinate" ) Observable updateOrderRoute(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusRoutePlanningUpdateReqBean data); -// @Headers( {"Content-type:application/json;charset=UTF-8"} ) -// @POST("/autopilot-car-hailing/operation/v1/driver/bus/line/resetStart") -// Observable resetCurrentLineStatus(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusResetLineStatusRequest data); - /** * 中止任务 * @param appId @@ -152,5 +149,16 @@ public interface IBusApiService { @Headers( {"Content-type:application/json;charset=UTF-8"} ) @POST("/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/endTask") Observable endTask(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusCloseTaskRequest data); + + /** + * 任务正常跑完结束 + * @param appId + * @param ticket + * @param data + * @return + */ + @Headers( {"Content-type:application/json;charset=UTF-8"} ) + @POST("/autopilot-car-hailing/operation/v1/driver/order/verificationResult") + Observable queryWriteOffPassengers(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusWriteOffPassengersQueryRequest data); } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusModelLoopManager.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusModelLoopManager.java index 676aab6775..ad76324a64 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusModelLoopManager.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusModelLoopManager.java @@ -1,8 +1,8 @@ package com.mogo.och.bus.presenter; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS; -import static com.mogo.och.bus.constant.BusConst.LOOP_DELAY; -import static com.mogo.och.bus.constant.BusConst.LOOP_PASSENGER_2S; +import static com.mogo.och.bus.constant.BusConst.LOOP_DELAY_500; +import static com.mogo.och.bus.constant.BusConst.LOOP_PASSENGER_5S; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.och.bus.constant.BusConst; @@ -40,8 +40,8 @@ public class BusModelLoopManager { return; } CallerLogger.INSTANCE.i(M_BUS + TAG, "startQueryPassengerWriteOffLoop()"); - mQueryPassengerDisposable = Observable.interval(LOOP_DELAY, - LOOP_PASSENGER_2S, TimeUnit.MILLISECONDS) + mQueryPassengerDisposable = Observable.interval(LOOP_DELAY_500, + LOOP_PASSENGER_5S, TimeUnit.MILLISECONDS) .map((aLong -> aLong + 1)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) diff --git a/OCH/mogo-och-bus/src/main/res/raw/bus_di.mp3 b/OCH/mogo-och-bus/src/main/res/raw/bus_di.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..15b31ed247d4390b1d571976c4f05d7d3da1571b GIT binary patch literal 15150 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 w<=LtEOaJJt%2@k{4eiMKgITNo8$iX11poj5 literal 0 HcmV?d00001 diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/SoundPoolHelper.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/SoundPoolHelper.java new file mode 100644 index 0000000000..74c80b8abd --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/SoundPoolHelper.java @@ -0,0 +1,118 @@ +package com.mogo.och.common.module.utils; + +import android.media.*; +import android.content.*; +import android.os.*; +import android.app.*; + +/** + * @author: wangmingjun + * @date: 2022/9/23 + * + */ +public class SoundPoolHelper { + private SoundPool mSoundPool; + private AudioManager mAudioManager; + private float volume; + // Maximumn sound stream. + private static final int MAX_STREAMS = 5; + // Stream type. + private static final int streamType = AudioManager.STREAM_MUSIC; + private int mSoundId; + private int resId; + private Context mContext; + + private volatile static SoundPoolHelper INSTANCE; + + public static SoundPoolHelper getSoundPoolHelper(){ + if (INSTANCE == null){ + synchronized (SoundPoolHelper.class){ + if (INSTANCE == null){ + INSTANCE = new SoundPoolHelper(); + } + } + } + return INSTANCE; + } + + public SoundPoolHelper(){} + + //播放资源文件 + public void playSoundWithRedId(Context context,int resId){ + this.mContext = context; + this.resId=resId; + init(); + } + + //init settings + private void init(){ + // AudioManager audio settings for adjusting the volume + mAudioManager = (AudioManager)this.mContext. getSystemService(Context.AUDIO_SERVICE); + + // Current volumn Index of particular stream type. + float currentVolumeIndex = (float) mAudioManager.getStreamVolume(streamType); + + // Get the maximum volume index for a particular stream type. + float maxVolumeIndex = (float) mAudioManager.getStreamMaxVolume(streamType); + + // Volumn (0 --> 1) + this.volume = currentVolumeIndex / maxVolumeIndex; + + // Suggests an audio stream whose volume should be changed by + // the hardware volume controls. + ((Activity)this.mContext).setVolumeControlStream(streamType); + + if (mSoundPool == null){ + // For Android SDK >= 21 + if (Build.VERSION.SDK_INT >= 21 ) { + + AudioAttributes audioAttrib = new AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_GAME) + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .build(); + + SoundPool.Builder builder= new SoundPool.Builder(); + builder.setAudioAttributes(audioAttrib).setMaxStreams(MAX_STREAMS); + + this.mSoundPool = builder.build(); + } else {// for Android SDK < 21 + // SoundPool(int maxStreams, int streamType, int srcQuality) + this.mSoundPool = new SoundPool(MAX_STREAMS, AudioManager.STREAM_MUSIC, 0); + } + } + + // When Sound Pool load complete. + this.mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() { + @Override + public void onLoadComplete(SoundPool soundPool, int sampleId, int status) { + playSound(); + } + }); + + //load res + this.mSoundId =this.mSoundPool.load(this.mContext,this.resId,1); + } + + /** + * 释放资源 + */ + public void releaseSoundPool() { + if (mSoundPool != null) { + mSoundPool.autoPause(); + mSoundPool.unload(mSoundId); + mSoundPool.release(); + mSoundPool = null; + } + } + + + + //play the sound res + private void playSound(){ + float leftVolumn = volume; + float rightVolumn = volume; + // Play sound of gunfire. Returns the ID of the new stream. + int streamId = this.mSoundPool.play(this.mSoundId,leftVolumn, rightVolumn, 1, 0, 1f); + } + +}