17f37f74ae7a9005fb9619ee7047778873f3178e.svn-base 9.2 KB

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