AdvertisingActivity.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. package com.sunzee.ui.activity;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.os.Handler;
  5. import android.support.annotation.Nullable;
  6. import android.text.format.DateFormat;
  7. import android.util.DisplayMetrics;
  8. import android.util.Log;
  9. import android.view.KeyEvent;
  10. import android.view.SurfaceView;
  11. import android.view.View;
  12. import android.view.WindowManager;
  13. import android.widget.ImageView;
  14. import android.widget.RelativeLayout;
  15. import android.widget.TextView;
  16. import com.hboxs.serialport.frame.ResponseFrame;
  17. import com.hboxs.serialport.message.Message;
  18. import com.hboxs.serialport.util.AsciiUtils;
  19. import com.sunzee.R;
  20. import com.sunzee.base.MvpActivity;
  21. import com.sunzee.model.Heartbeat;
  22. import com.sunzee.model.domain.ParameterBean;
  23. import com.sunzee.model.message.ApiMessageEvent;
  24. import com.sunzee.model.message.DownLoadMessageEvent;
  25. import com.sunzee.mvp.advertising.AdvertisingPresenter;
  26. import com.sunzee.mvp.advertising.AdvertisingView;
  27. import com.sunzee.thread.advanceparameter.ThreadPoolAdvanceParameter;
  28. import com.sunzee.ui.dialog.WarringDialog;
  29. import com.sunzee.utils.AlarmManagerUtil;
  30. import com.sunzee.utils.GeTuiUtil;
  31. import com.sunzee.utils.HexadecimalUtil;
  32. import com.sunzee.utils.LongClickUtils;
  33. import com.sunzee.utils.SimplePlayerUtils;
  34. import com.sunzee.utils.ToastUtil;
  35. import com.sunzee.utils.UiUtil;
  36. import com.wuxiaolong.androidutils.library.LogUtil;
  37. import org.greenrobot.eventbus.EventBus;
  38. import org.greenrobot.eventbus.Subscribe;
  39. import org.greenrobot.eventbus.ThreadMode;
  40. import java.io.File;
  41. import java.lang.ref.WeakReference;
  42. import java.util.ArrayList;
  43. import java.util.Timer;
  44. import java.util.TimerTask;
  45. /**
  46. * 广告界面 activity
  47. */
  48. public class AdvertisingActivity extends MvpActivity<AdvertisingPresenter> implements AdvertisingView {
  49. private static final String TAG = "AdvertisingActivity";
  50. private SurfaceView mAdSurfaceView;
  51. private SurfaceView mAdbSurfaceView;
  52. private SimplePlayerUtils mRightsimplePlayer;
  53. private SimplePlayerUtils mLeftsimplePlayer;
  54. private ImageView mAdImageview;
  55. private ImageView mAdbImageview;
  56. private GeTuiUtil mGeTuiUtil;
  57. private RelativeLayout mRlRoot;
  58. private TextView mTvTime;
  59. private MyHandler myHandler;
  60. private TextView mTvEquipmentNo;
  61. private ThreadPoolAdvanceParameter mPoolAdvanceParameter = new ThreadPoolAdvanceParameter();
  62. @Override
  63. protected void onCreate(@Nullable Bundle savedInstanceState) {
  64. super.onCreate(savedInstanceState);
  65. setContentView(R.layout.activity_advertising);
  66. EventBus.getDefault().register(this);
  67. mGeTuiUtil = new GeTuiUtil(this);
  68. mGeTuiUtil.geTui();
  69. initView();
  70. initEvent();
  71. WindowManager manager = this.getWindowManager();
  72. DisplayMetrics outMetrics = new DisplayMetrics();
  73. manager.getDefaultDisplay().getMetrics(outMetrics);
  74. int width = outMetrics.widthPixels;
  75. int height = outMetrics.heightPixels;
  76. Log.d(TAG, "onCreate: width:" + width + "height:" + height);
  77. }
  78. private void initEvent() {
  79. LongClickUtils.setLongClick(new Handler(), mRlRoot, 10, new View.OnLongClickListener() {
  80. @Override
  81. public boolean onLongClick(View v) {
  82. Intent intent = new Intent(AdvertisingActivity.this, LoginActivity.class);
  83. startActivity(intent);
  84. finish();
  85. return false;
  86. }
  87. });
  88. }
  89. private void initView() {
  90. myHandler = new MyHandler(this);
  91. mAdSurfaceView = findViewById(R.id.sf_cor_ad);
  92. mAdImageview = findViewById(R.id.iv_cor_ad);
  93. mAdbSurfaceView = findViewById(R.id.sf_cor_adb);
  94. mAdbImageview = findViewById(R.id.iv_cor_adb);
  95. mRlRoot = findViewById(R.id.rl_root);
  96. mTvTime = findViewById(R.id.tv_time1);
  97. mTvEquipmentNo = findViewById(R.id.tv_equipment_no1);
  98. Log.d(TAG, "initView: " + Heartbeat.deviceId);
  99. if (Heartbeat.deviceId != null && Heartbeat.deviceId.length() > 7) {
  100. mTvEquipmentNo.setText(Heartbeat.deviceId != null ? Heartbeat.deviceId.substring(Heartbeat.deviceId.length() - 6) : "");
  101. }
  102. //1.初始化播放器
  103. mRightsimplePlayer = new SimplePlayerUtils(mAdSurfaceView);
  104. mRightsimplePlayer.setImageView(mAdImageview);
  105. mLeftsimplePlayer = new SimplePlayerUtils(mAdbSurfaceView);
  106. mLeftsimplePlayer.CloseVolume();
  107. mLeftsimplePlayer.setImageView(mAdbImageview);
  108. LogUtil.d(TAG, "setup: " + mRightsimplePlayer);
  109. LogUtil.d(TAG, "setup: " + mLeftsimplePlayer);
  110. play();
  111. startRefreshime();
  112. mPoolAdvanceParameter.stopAll();
  113. mPoolAdvanceParameter.startALLRead();
  114. mPoolAdvanceParameter.stopReadD403();
  115. mPoolAdvanceParameter.startReadD403();
  116. }
  117. private void play() {
  118. mvpPresenter.play();
  119. }
  120. /**
  121. * 播放左边视频
  122. *
  123. * @param playFileList
  124. */
  125. @Override
  126. public void playLeft(ArrayList<File> playFileList) {
  127. mLeftsimplePlayer.setFileData(playFileList);
  128. mLeftsimplePlayer.playVideo();
  129. }
  130. /**
  131. * 播放右边视频
  132. *
  133. * @param playFile
  134. */
  135. @Override
  136. public void playRight(ArrayList<File> playFile) {
  137. mRightsimplePlayer.setFileData(playFile);
  138. mRightsimplePlayer.playVideo();
  139. }
  140. @Override
  141. public void updateTime(CharSequence sysTimeStr) {
  142. mTvTime.setText(sysTimeStr);
  143. }
  144. @Override
  145. public void getDataSuccess() {
  146. String[] values = mPoolAdvanceParameter.getValues();
  147. ArrayList<ParameterBean> parameterBeans = new ArrayList<>();
  148. String[] paraAddress = {
  149. "D426", "D427", "D428", "D429",
  150. "D430", "D431"};
  151. for (int i = 0; i < values.length; i++) {
  152. parameterBeans.add(new ParameterBean(paraAddress[i], values[i]));
  153. }
  154. mvpPresenter.updateAdvanced(parameterBeans);
  155. }
  156. @Override
  157. protected void onStop() {
  158. super.onStop();
  159. mLeftsimplePlayer.onDestroy();
  160. mRightsimplePlayer.onDestroy();
  161. }
  162. @Override
  163. protected void onDestroy() {
  164. super.onDestroy();
  165. mPoolAdvanceParameter.stopAll();
  166. EventBus.getDefault().unregister(this);
  167. myHandler.removeCallbacksAndMessages(null);
  168. myHandler = null;
  169. stopRefreshTime();
  170. }
  171. private long mPressTime = 0L;
  172. /**
  173. * 两次点击才能退出
  174. *
  175. * @param keyCode
  176. * @param event
  177. * @return
  178. */
  179. @Override
  180. public boolean onKeyDown(int keyCode, KeyEvent event) {
  181. if (keyCode == KeyEvent.KEYCODE_BACK) {
  182. if (System.currentTimeMillis() - mPressTime < 1000) {
  183. finish();
  184. } else {
  185. ToastUtil.showToast("再按一次退出");
  186. mPressTime = System.currentTimeMillis();
  187. }
  188. return true;
  189. }
  190. return super.onKeyDown(keyCode, event);
  191. }
  192. //个推相关
  193. @Subscribe(threadMode = ThreadMode.MAIN)
  194. public void event(DownLoadMessageEvent messageEvent) {
  195. switch (messageEvent.getType()) {
  196. case downloadAll:
  197. play();
  198. break;
  199. default:
  200. break;
  201. }
  202. }
  203. @Subscribe(threadMode = ThreadMode.MAIN)
  204. public void event(ApiMessageEvent messageEvent) {
  205. switch (messageEvent.getName()) {
  206. case "pushTimeRule":
  207. //推送最新规则
  208. LogUtil.d(TAG, "pushTimeRule:");
  209. LogUtil.e(TAG, "event: 接收到规则");
  210. play();
  211. break;
  212. }
  213. }
  214. @Subscribe(threadMode = ThreadMode.MAIN)
  215. public void event(Message messageEvent) {
  216. switch (messageEvent.getType()) {
  217. case connected:
  218. case sendError:
  219. case ack:
  220. break;
  221. case nak:
  222. break;
  223. case disconnected:
  224. break;
  225. case response:
  226. ResponseFrame responseFrame = (ResponseFrame) messageEvent.getContent();
  227. String name = messageEvent.getName();
  228. if ("M600".equals(name)) {
  229. return;
  230. }
  231. if (responseFrame.isValidSum()) {
  232. //通过校验
  233. Log.d(TAG, "11event: " + name);
  234. String result = AsciiUtils.asciiByteArray2HexStr(responseFrame.getData());
  235. ArrayList<String> results = HexadecimalUtil.flipString(result);
  236. if ("D403".equals(name)) {
  237. mPoolAdvanceParameter.stopReadD403();
  238. Log.d(TAG, "11event: " + (int) HexadecimalUtil.hex2dec(results.get(0)));
  239. mvpPresenter.sendPositionNum((int) HexadecimalUtil.hex2dec(results.get(0)));
  240. } else {
  241. mvpPresenter.setAdvanced(name, results, mPoolAdvanceParameter);
  242. }
  243. }
  244. break;
  245. }
  246. }
  247. @Override
  248. protected AdvertisingPresenter createPresenter() {
  249. AdvertisingPresenter advertisingPresenter = new AdvertisingPresenter(this);
  250. advertisingPresenter.requstCleanRule();
  251. advertisingPresenter.requestCleanTimeAndRemaining();
  252. return advertisingPresenter;
  253. }
  254. /**
  255. * 主要用于更新系统时间
  256. */
  257. public static class MyHandler extends Handler {
  258. //持有弱引用HandlerActivity,GC回收时会被回收掉.
  259. private final WeakReference<AdvertisingActivity> mActivty;
  260. public MyHandler(AdvertisingActivity activity) {
  261. mActivty = new WeakReference<AdvertisingActivity>(activity);
  262. }
  263. @Override
  264. public void handleMessage(android.os.Message msg) {
  265. AdvertisingActivity activity = mActivty.get();
  266. switch (msg.what) {
  267. case 1:
  268. long sysTime = System.currentTimeMillis();//获取系统时间
  269. CharSequence sysTimeStr = DateFormat.format("yyyy-MM-dd HH:mm:ss", sysTime);//时间显示格式
  270. activity.mTvTime.setText(sysTimeStr);
  271. break;
  272. }
  273. }
  274. }
  275. private Timer timerGetTime;
  276. private TimerTask timerGetTimerTak;
  277. //时间日期的更新
  278. private void startRefreshime() {
  279. timerGetTime = new Timer();
  280. timerGetTimerTak = new TimerTask() {
  281. @Override
  282. public void run() {
  283. myHandler.sendEmptyMessage(1);
  284. }
  285. };
  286. timerGetTime.schedule(timerGetTimerTak, 0, 1000);
  287. }
  288. private void stopRefreshTime() {
  289. if (timerGetTime != null) {
  290. timerGetTime.cancel();
  291. timerGetTime = null;
  292. }
  293. if (timerGetTimerTak != null) {
  294. timerGetTimerTak.cancel();
  295. timerGetTimerTak = null;
  296. }
  297. }
  298. }