e0722c0f567bb1b6711dc0c94482b7d0dd284974.svn-base 8.3 KB

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