e66d2cec5f455c56eb4bb311f963931916b2c4f4.svn-base 8.0 KB

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