11accacb714c99e377ad20f3bcfd9facc05b3695.svn-base 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. package eVVM.apk.ui.home;
  2. import android.app.Dialog;
  3. import android.content.Intent;
  4. import android.location.Location;
  5. import android.nfc.NdefMessage;
  6. import android.nfc.NdefRecord;
  7. import android.nfc.NfcAdapter;
  8. import android.os.Parcelable;
  9. import android.os.Bundle;
  10. import android.support.design.widget.BottomNavigationView;
  11. import android.util.Log;
  12. import android.view.View;
  13. import com.hjq.bar.OnTitleBarListener;
  14. import com.hjq.bar.TitleBar;
  15. import com.hjq.dialog.MessageDialog;
  16. import android.view.animation.Animation;
  17. import android.view.animation.LinearInterpolator;
  18. import android.view.animation.RotateAnimation;
  19. import android.widget.ImageView;
  20. import java.util.Arrays;
  21. import butterknife.BindView;
  22. import eVVM.apk.R;
  23. import eVVM.apk.helper.GPS.GPSLocationListener;
  24. import eVVM.apk.helper.GPS.GPSLocationManager;
  25. import eVVM.apk.helper.SPUtils;
  26. import eVVM.apk.helper.SoundPoolHelper;
  27. import eVVM.apk.ui.bean.VnDetailBean;
  28. import eVVM.apk.ui.home.uploadChip.UploadChipContract;
  29. import eVVM.apk.helper.ActivityStackManager;
  30. import eVVM.apk.helper.DoubleClickHelper;
  31. import eVVM.apk.ui.login.LoginActivity;
  32. /**
  33. * 厂家操作员登录页面
  34. */
  35. public class FactoryOperatorActivity extends BaseNfcActivity implements UploadChipContract.View {
  36. private String textRecord;
  37. private GPSLocationManager gpsLocationManager;
  38. private Location location;
  39. @BindView(R.id.reading_title)
  40. TitleBar readingTitle;
  41. @BindView(R.id.reading__line)
  42. ImageView imgreadline;
  43. @Override
  44. protected int getLayoutId() {
  45. return R.layout.activity_factory_operator;
  46. }
  47. @Override
  48. protected int getTitleId() {
  49. return R.id.reading_title;
  50. }
  51. @Override
  52. protected void initView() {
  53. getAnimationSao(); //进行雷达扫描动画
  54. soundPoolHelper = new SoundPoolHelper(4, SoundPoolHelper.TYPE_MUSIC)
  55. .setRingtoneType(SoundPoolHelper.RING_TYPE_MUSIC)
  56. .loadDefault(FactoryOperatorActivity.this)
  57. .load(FactoryOperatorActivity.this, "factory_operator_success", R.raw.factory_operator_success)
  58. .load(FactoryOperatorActivity.this, "factory_operator_error", R.raw.factory_operator_error);
  59. readingTitle.setOnTitleBarListener(new OnTitleBarListener() {
  60. @Override
  61. public void onLeftClick(View v) {
  62. }
  63. @Override
  64. public void onTitleClick(View v) {
  65. }
  66. @Override
  67. public void onRightClick(View v) {
  68. getExit();
  69. //toast("tuichu");
  70. }
  71. });
  72. }
  73. private void getExit() {
  74. new MessageDialog.Builder(this)
  75. .setTitle("") // 标题可以不用填写
  76. .setMessage("您确定要退出吗")
  77. .setConfirm("确定")
  78. .setCancel("取消") // 设置 null 表示不显示取消按钮
  79. //.setAutoDismiss(false) // 设置点击按钮后不关闭对话框
  80. .setListener(new MessageDialog.OnListener() {
  81. @Override
  82. public void onConfirm(Dialog dialog) {
  83. //退出的操作
  84. startActivity(LoginActivity.class);
  85. SPUtils.clear();
  86. // 进行内存优化,销毁掉所有的界面
  87. ActivityStackManager.getInstance().finishAllActivities(LoginActivity.class);
  88. }
  89. @Override
  90. public void onCancel(Dialog dialog) {
  91. //toast("取消了");
  92. }
  93. })
  94. .show();
  95. }
  96. private void getAnimationSao() {
  97. Animation animation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
  98. animation.setFillAfter(true);
  99. animation.setDuration(2000); //两秒转一圈
  100. animation.setInterpolator(new LinearInterpolator());
  101. animation.setRepeatCount(Animation.INFINITE); //循环执行
  102. imgreadline.startAnimation(animation);
  103. }
  104. @Override
  105. protected void initData() {
  106. mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
  107. gpsLocationManager = GPSLocationManager.getInstances(FactoryOperatorActivity.this);
  108. }
  109. @Override
  110. public void onNewIntent(Intent intent) {
  111. readNfcTag(intent);
  112. Log.e("***", textRecord);
  113. if (textRecord.length() > 94) {
  114. if (location != null) {
  115. String chipNumber = textRecord.substring(6, chipNumberEndIndex);
  116. getPresenter().forFactoryOperator(chipNumber, textRecord, location.getLongitude(), location.getLatitude());
  117. } else {
  118. toast("位置信息获取失败");
  119. }
  120. } else {
  121. toast("读取失败,请重试");
  122. }
  123. }
  124. private SoundPoolHelper soundPoolHelper;
  125. @Override
  126. public void uploadChipError(String msg) {
  127. if (msg.equals("芯片不存在")) {
  128. soundPoolHelper.play("factory_operator_error", false);
  129. }
  130. toast(msg);
  131. }
  132. @Override
  133. public void uploadChipSuccess(VnDetailBean data) {
  134. soundPoolHelper.play("factory_operator_success", false);
  135. Log.e("FactoryOperatorActivity", data.getCode() + "");
  136. }
  137. /**
  138. * 读取NFC标签文本数据
  139. */
  140. private void readNfcTag(Intent intent) {
  141. if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
  142. Parcelable[] rawMsgs = intent.getParcelableArrayExtra(
  143. NfcAdapter.EXTRA_NDEF_MESSAGES);
  144. NdefMessage msgs[] = null;
  145. int contentSize = 0;
  146. if (rawMsgs != null) {
  147. msgs = new NdefMessage[rawMsgs.length];
  148. for (int i = 0; i < rawMsgs.length; i++) {
  149. msgs[i] = (NdefMessage) rawMsgs[i];
  150. contentSize += msgs[i].toByteArray().length;
  151. }
  152. }
  153. try {
  154. if (msgs != null) {
  155. NdefRecord record = msgs[0].getRecords()[0];
  156. textRecord = parseTextRecord(record);
  157. // mTagText += textRecord + "\n\ntext\n" + contentSize + " bytes";
  158. }
  159. } catch (Exception e) {
  160. }
  161. }
  162. }
  163. /**
  164. * 解析NDEF文本数据
  165. */
  166. public static String parseTextRecord(NdefRecord ndefRecord) {
  167. /**
  168. * 判断数据是否为NDEF格式
  169. */
  170. //判断TNF
  171. if (ndefRecord.getTnf() != NdefRecord.TNF_WELL_KNOWN) {
  172. return null;
  173. }
  174. //判断可变的长度的类型
  175. if (!Arrays.equals(ndefRecord.getType(), NdefRecord.RTD_TEXT)) {
  176. return null;
  177. }
  178. try {
  179. byte[] bArray = ndefRecord.getPayload();
  180. StringBuffer sb = new StringBuffer(bArray.length);
  181. String sTemp;
  182. for (int i = 0; i < bArray.length; i++) {
  183. sTemp = Integer.toHexString(0xFF & bArray[i]);
  184. if (sTemp.length() < 2)
  185. sb.append(0);
  186. sb.append(sTemp.toUpperCase());
  187. }
  188. return sb.toString();
  189. } catch (Exception e) {
  190. throw new IllegalArgumentException();
  191. }
  192. }
  193. @Override
  194. protected void onStart() {
  195. super.onStart();
  196. //开启定位
  197. gpsLocationManager.start(new FactoryOperatorActivity.MyListener());
  198. }
  199. @Override
  200. protected void onStop() {
  201. super.onStop();
  202. //终止定位
  203. gpsLocationManager.stop();
  204. }
  205. @Override
  206. protected void onDestroy() {
  207. super.onDestroy();
  208. }
  209. class MyListener implements GPSLocationListener {
  210. @Override
  211. public void UpdateLocation(Location _location) {
  212. if (_location != null) {
  213. location = _location;
  214. // Log.e("****","经度:" + location.getLongitude() + "\n纬度:" + location.getLatitude());
  215. }
  216. }
  217. @Override
  218. public void UpdateStatus(String provider, int status, Bundle extras) {
  219. if ("gps" == provider) {
  220. //Toast.makeText(FactoryOperatorActivity.this, "定位类型:" + provider, Toast.LENGTH_SHORT).show();
  221. }
  222. }
  223. @Override
  224. public void UpdateGPSProviderStatus(int gpsStatus) {
  225. // switch (gpsStatus) {
  226. // case GPSProviderStatus.GPS_ENABLED:
  227. // Toast.makeText(FactoryOperatorActivity.this, "GPS开启", Toast.LENGTH_SHORT).show();
  228. // break;
  229. // case GPSProviderStatus.GPS_DISABLED:
  230. // Toast.makeText(FactoryOperatorActivity.this, "GPS关闭", Toast.LENGTH_SHORT).show();
  231. // break;
  232. // case GPSProviderStatus.GPS_OUT_OF_SERVICE:
  233. // Toast.makeText(FactoryOperatorActivity.this, "GPS不可用", Toast.LENGTH_SHORT).show();
  234. // break;
  235. // case GPSProviderStatus.GPS_TEMPORARILY_UNAVAILABLE:
  236. // Toast.makeText(FactoryOperatorActivity.this, "GPS暂时不可用", Toast.LENGTH_SHORT).show();
  237. // break;
  238. // case GPSProviderStatus.GPS_AVAILABLE:
  239. // Toast.makeText(FactoryOperatorActivity.this, "GPS可用啦", Toast.LENGTH_SHORT).show();
  240. // break;
  241. // }
  242. }
  243. }
  244. @Override
  245. public void onBackPressed() {
  246. if (DoubleClickHelper.isOnDoubleClick()) {
  247. //移动到上一个任务栈,避免侧滑引起的不良反应
  248. moveTaskToBack(false);
  249. postDelayed(new Runnable() {
  250. @Override
  251. public void run() {
  252. // 进行内存优化,销毁掉所有的界面
  253. ActivityStackManager.getInstance().finishAllActivities();
  254. // 销毁进程
  255. System.exit(0);
  256. }
  257. }, 300);
  258. } else {
  259. toast(getResources().getString(R.string.home_exit_hint));
  260. }
  261. }
  262. @Override
  263. public boolean isSupportSwipeBack() {
  264. // 不使用侧滑功能
  265. return false;
  266. }
  267. }