59e505539201c69505869555b12b256a6c863ac9.svn-base 11 KB

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