From 4f713c9e0e11c25511dc241acd73247471b1a383 Mon Sep 17 00:00:00 2001 From: itgaojian163 Date: Sun, 29 Mar 2020 20:58:50 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9A=90=E6=82=A3=E4=B8=8A=E6=8A=A5=20?= =?UTF-8?q?=E4=BC=81=E4=B8=9A=E5=BD=95=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/inspectionProfiles/Project_Default.xml | 7 + .idea/misc.xml | 2 +- app/src/main/AndroidManifest.xml | 257 +- .../activitys/base/MainActivity.java | 1348 +-------- .../companylib/CompanyDetailActivity.java | 39 + .../companylib/CompanyInfoEditActivity.java | 41 + .../companylib/CompanyLibActivity.java | 143 + .../companylib/EnterCompanyInfoActivity.java | 315 ++ .../activitys/issue/IssueCheckActivity.java | 18 +- .../activitys/issue/IssueMineActivity.java | 6 +- .../activitys/issue/IssueMineDisActivity.java | 8 +- .../activitys/locus/LocusManagerActivity.java | 2 +- .../activitys/trouble/SelCompanyActivity.java | 37 + .../trouble/TroubleReportActivity.java | 42 + .../adapters/CompanyLibAdapter.java | 35 + .../adapters/holders/CompanyHolder.java | 21 + .../LocationChangBroadcastReceiver.java | 36 +- .../services/LocationService.java | 2592 +++++++++-------- .../txrealtimelocation/services/Utils.java | 70 +- .../services/jpush/ExampleUtil.java | 268 +- .../services/jpush/MyReceiver.java | 256 +- .../services/jpush/PushMessageReceiver.java | 276 +- .../services/jpush/PushService.java | 7 +- .../jpush/TagAliasOperatorHelper.java | 756 ++--- app/src/main/res/drawable-xhdpi/bg_login.jpg | Bin 0 -> 220339 bytes .../main/res/drawable-xhdpi/ic_checked.png | Bin 0 -> 450 bytes .../main/res/drawable-xhdpi/ic_uncheck.png | Bin 0 -> 337 bytes app/src/main/res/drawable/sel_remeber_pwd.xml | 5 + .../res/layout/activity_company_detail.xml | 9 + .../res/layout/activity_company_info_edit.xml | 9 + .../main/res/layout/activity_company_lib.xml | 111 + .../layout/activity_enter_company_info.xml | 431 +++ app/src/main/res/layout/activity_login.xml | 15 +- app/src/main/res/layout/activity_main.xml | 369 +-- .../main/res/layout/activity_sel_company.xml | 110 + .../res/layout/activity_trouble_report.xml | 91 + app/src/main/res/layout/item_company_lib.xml | 36 + app/src/main/res/values/strings.xml | 1 + 38 files changed, 3789 insertions(+), 3980 deletions(-) create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/companylib/CompanyDetailActivity.java create mode 100644 app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/companylib/CompanyInfoEditActivity.java create mode 100644 app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/companylib/CompanyLibActivity.java create mode 100644 app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/companylib/EnterCompanyInfoActivity.java create mode 100644 app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/trouble/SelCompanyActivity.java create mode 100644 app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/trouble/TroubleReportActivity.java create mode 100644 app/src/main/java/com/sucstepsoft/txrealtimelocation/adapters/CompanyLibAdapter.java create mode 100644 app/src/main/java/com/sucstepsoft/txrealtimelocation/adapters/holders/CompanyHolder.java create mode 100644 app/src/main/res/drawable-xhdpi/bg_login.jpg create mode 100644 app/src/main/res/drawable-xhdpi/ic_checked.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_uncheck.png create mode 100644 app/src/main/res/drawable/sel_remeber_pwd.xml create mode 100644 app/src/main/res/layout/activity_company_detail.xml create mode 100644 app/src/main/res/layout/activity_company_info_edit.xml create mode 100644 app/src/main/res/layout/activity_company_lib.xml create mode 100644 app/src/main/res/layout/activity_enter_company_info.xml create mode 100644 app/src/main/res/layout/activity_sel_company.xml create mode 100644 app/src/main/res/layout/activity_trouble_report.xml create mode 100644 app/src/main/res/layout/item_company_lib.xml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..2c5b9b7 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 8a8f75b..219b34f 100755 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -5,7 +5,7 @@ - + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b508389..755ad02 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -47,6 +47,14 @@ android:supportsRtl="true" android:theme="@style/AppTheme" tools:ignore="GoogleAppIndexingWarning"> + + + + + + @@ -100,10 +108,9 @@ android:screenOrientation="portrait" /> - + android:screenOrientation="portrait" /> + + @@ -118,18 +125,16 @@ android:screenOrientation="portrait" /> - + android:screenOrientation="portrait" /> + + - + android:windowSoftInputMode="adjustPan|stateHidden" /> + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -239,68 +241,66 @@ android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" /> - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/base/MainActivity.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/base/MainActivity.java index c458f43..9a1fe04 100755 --- a/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/base/MainActivity.java +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/base/MainActivity.java @@ -1,12 +1,7 @@ package com.sucstepsoft.txrealtimelocation.activitys.base; -import android.app.ProgressDialog; -import android.content.BroadcastReceiver; -import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.graphics.Color; -import android.os.Build; import android.provider.Settings; import android.support.v7.app.AlertDialog; import android.support.v7.widget.GridLayoutManager; @@ -24,64 +19,44 @@ import com.bumptech.glide.request.RequestOptions; import com.google.gson.Gson; import com.sucstepsoft.cm_utils.constant.PathConfig; import com.sucstepsoft.cm_utils.constant.PermissionConstants; -import com.sucstepsoft.cm_utils.constant.TimeConstants; import com.sucstepsoft.cm_utils.core.beans.FuncBean; import com.sucstepsoft.cm_utils.core.network.update.CheckUpdateUtils; import com.sucstepsoft.cm_utils.core.retrofit_net.BaseUrlApi; import com.sucstepsoft.cm_utils.core.retrofit_net.RetrofitManager; import com.sucstepsoft.cm_utils.core.widget.base.BaseActivity; -import com.sucstepsoft.cm_utils.utils.AppUtils; -import com.sucstepsoft.cm_utils.utils.FileUtils; import com.sucstepsoft.cm_utils.utils.LogUtils; import com.sucstepsoft.cm_utils.utils.PermissionUtils; -import com.sucstepsoft.cm_utils.utils.TimeUtils; import com.sucstepsoft.cm_utils.utils.ToastUtils; -import com.sucstepsoft.cm_utils.utils.UIUtil; import com.sucstepsoft.cm_utils.utils.UserLgUtils; import com.sucstepsoft.txrealtimelocation.R; import com.sucstepsoft.txrealtimelocation.ScreenManager; -import com.sucstepsoft.txrealtimelocation.activitys.addresslist.AddressListMainActivity; +import com.sucstepsoft.txrealtimelocation.activitys.companylib.CompanyLibActivity; import com.sucstepsoft.txrealtimelocation.activitys.issue.IssueCheckActivity; import com.sucstepsoft.txrealtimelocation.activitys.issue.IssueMineActivity; -import com.sucstepsoft.txrealtimelocation.activitys.issue.IssueRecordActivity; import com.sucstepsoft.txrealtimelocation.activitys.mine.UserActivity; import com.sucstepsoft.txrealtimelocation.activitys.notice.NoticeActivity; +import com.sucstepsoft.txrealtimelocation.activitys.trouble.TroubleReportActivity; import com.sucstepsoft.txrealtimelocation.adapters.FunctionAdapter; import com.sucstepsoft.txrealtimelocation.beans.AppTokenUser; -import com.sucstepsoft.txrealtimelocation.beans.BaseUserBean; -import com.sucstepsoft.txrealtimelocation.beans.CheckSignBean; -import com.sucstepsoft.txrealtimelocation.beans.CheckSignOffBean; -import com.sucstepsoft.txrealtimelocation.beans.LocationPosition; -import com.sucstepsoft.txrealtimelocation.beans.MainNumBean; -import com.sucstepsoft.txrealtimelocation.beans.PenLineBean; import com.sucstepsoft.txrealtimelocation.beans.SignTimeBean; -import com.sucstepsoft.txrealtimelocation.beans.SuccessBean; import com.sucstepsoft.txrealtimelocation.beans.VersionBean; import com.sucstepsoft.txrealtimelocation.broadcasts.ScreenBroadCastListener; import com.sucstepsoft.txrealtimelocation.net.LocationApiService; -import com.sucstepsoft.txrealtimelocation.services.GlobalProvider; -import com.sucstepsoft.txrealtimelocation.services.LocationService; -import com.sucstepsoft.txrealtimelocation.utils.ExceptionHandler; -import com.sucstepsoft.txrealtimelocation.utils.GpsUtils; -import com.sucstepsoft.txrealtimelocation.utils.IntentWrapper; import java.io.File; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.TimeUnit; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import butterknife.Unbinder; -import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; -import okhttp3.MediaType; -import okhttp3.MultipartBody; -import okhttp3.RequestBody; + +//import com.sucstepsoft.txrealtimelocation.services.LocationService; //import com.sucstepsoft.txrealtimelocation.activitys.issue.IssueReportActivity; //import com.sucstepsoft.txrealtimelocation.activitys.locus.LocusMapActivity; @@ -102,8 +77,6 @@ public class MainActivity extends BaseActivity { RelativeLayout mRlMainBg; @BindView(R.id.rl_title_count) RelativeLayout mRlTitleCount; - @BindView(R.id.tv_current_time) - TextView mTvCurrentTime; @BindView(R.id.tv_state) TextView mTvState; @BindView(R.id.iv_state) @@ -114,10 +87,6 @@ public class MainActivity extends BaseActivity { TextView mTvAvisoNum; @BindView(R.id.ll_day_aviso) LinearLayout mLlDayAviso; - @BindView(R.id.tv_issue_dis_num) - TextView mTvIssueDisNum; - @BindView(R.id.iv_issue_dis_num) - ImageView mIvIssueDisNum; @BindView(R.id.ll_issue_dis) LinearLayout mLlIssueDis; @BindView(R.id.tv_mine_issue_num) @@ -136,19 +105,8 @@ public class MainActivity extends BaseActivity { PermissionConstants.PHONE, PermissionConstants.MICROPHONE, }; - private MessageReceiver mMessageReceiver; -// private BitmapDescriptor mBitMap; - //TODO 默认坐标点 - private double latitude = 111.771815; - private double longitude = 40.823879; - //109.926934,40.574501 -// private BDLocation mCurrentLocation; private Unbinder mBind; private int userType = 2;//1是N员 2是片长 - public static final String MESSAGE_JPUSH = "com.example.jpushdemo.MESSAGE_RECEIVED_ACTION"; - public static final String KEY_TITLE = "title"; - public static final String KEY_MESSAGE = "message"; - public static final String KEY_EXTRAS = "extras"; private List mFuncs = new ArrayList<>(); private String[] mBtnStrs = new String[]{"企业信息", "隐患上报", "隐患复查", "法律法规"}; private int[] mBtnIds = new int[]{R.drawable.ic_issue_report, @@ -156,21 +114,9 @@ public class MainActivity extends BaseActivity { R.drawable.ic_issue_disp, R.drawable.ic_work_path}; private Gson mGson = null; - private boolean isSgin = false;//是否签到 - private boolean isSignOff = false;//是否签退 - private Disposable mTimeDis; - private boolean isForeg = true;//是否在前台 - private Disposable mGpsDis; - private SignTimeBean mSignTimeBean; -// private List> mPenLineList; private int mPrecisionDefault = 70; - private int mPrecMax = 150; - private int mPrecision = mPrecisionDefault; - private Disposable mGpsStateDis; private AlertDialog mGpsSettingDialog; private AlertDialog mGpsWeakDialog; - private long mCurrentLongTime; -// private LocationClient mLocationClient; @Override protected int setLayoutId() { @@ -183,16 +129,10 @@ public class MainActivity extends BaseActivity { refreshView(STATE_LOAD_SUCCESS); mRlTitleBar.setVisibility(View.GONE); initMainFuncs(); - //TODO 一像素保活 -// initScreenListener(); - mCurrentLongTime = 0; PermissionUtils.permission(permissions).callback(new PermissionUtils.SimpleCallback() { @Override public void onGranted() { -// registerMessageReceiver(); createCacheFile(); -// startListenLocation(); -// startSignLocation(); } @Override @@ -201,180 +141,9 @@ public class MainActivity extends BaseActivity { } }).request(); initBaseView(); - //TODO -// getPunchTime(123); -// setSignText(); -// getUserPenList(); -// interval(); -// registerGpsSignal(); -// checkLocalText(); -// registerGpsState(); } - private void checkLocalText() { - String filePath = PathConfig.CATCH_PATH + "testLocation.txt"; - boolean fileExists = FileUtils.isFileExists(filePath); - if (fileExists) { - File file = new File(filePath); - RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); - MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile); - RetrofitManager.getInstance() - .create(LocationApiService.class) - .uploadFile(body, UserLgUtils.getToken()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(BaseUserBean baseUserBean) { - if (file.exists()) { - file.delete(); - } - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onComplete() { - - } - }); - - } - } - - /** - * 获取签到时间 - */ - private ProgressDialog progressDialog = null; - - private void getPunchTime(int i) { - if (i == 2) { - progressDialog = UIUtil.initDialog(MainActivity.this, "获取中..."); - progressDialog.show(); - } - RetrofitManager.getInstance() - .create(LocationApiService.class) - .getpunchTime(UserLgUtils.getToken()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(SignTimeBean signTimeBean) { - LogUtils.e(signTimeBean); - if (progressDialog != null && progressDialog.isShowing() && i == 2) { - progressDialog.dismiss(); - if (signTimeBean == null) { - ToastUtils.showShort("获取签到规则失败"); - } else { - mSignTimeBean = signTimeBean; - ToastUtils.showShort("获取签到规则成功,请重新签到或签退"); - } - } - if (signTimeBean != null) { - mSignTimeBean = signTimeBean; - } - if (mSignTimeBean != null) { - /** - * amStartPunchTime : 08:30:00 - * amStartWorkTime : 09:30:00 - * amEndWorkTime : 11:30:00 - * amEndPunchTime : 12:30:00 - * pmStartPunchTime : 13:30:00 - * pmStartWorkTime : 14:30:00 - * pmEndWorkTime : 16:30:00 - * pmEndPunchTime : 17:30:00 - * nStartPunchTime : 08:30:00 - * nStartWorkTime : 10:00:00 - * nEndWorkTime : 17:00:00 - * nEndPunchTime : 18:00:00 - */ - //保存签到时间 - mGson = new Gson(); - String loginInfo = UserLgUtils.getLoginInfo(); - if (!TextUtils.isEmpty(loginInfo)) { - AppTokenUser appTokenUser = mGson.fromJson(loginInfo, AppTokenUser.class); - if (appTokenUser.getRoles() != null && appTokenUser.getRoles().size() > 0) { - for (int i = 0; i < appTokenUser.getRoles().size(); i++) { - if (!TextUtils.isEmpty(appTokenUser.getRoles().get(i).getRoleName())) { - mTvDepart.setText(appTokenUser.getRoles().get(i).getRoleName()); - break; - } - } - } - if (appTokenUser.getRoles() != null && appTokenUser.getRoles().size() > 0) { - for (int i = 0; i < appTokenUser.getRoles().size(); i++) { - if (PathConfig.USER_TYPE_N.equals(appTokenUser.getRoles().get(i).getRoleId())) { - GlobalProvider.save(mActivity, "userType", "N"); - mTvDepart.setText(appTokenUser.getRoles().get(i).getRoleName()); - userType = 1; - break; - } - } - } else { - GlobalProvider.save(mActivity, "userType", "P"); - userType = 2; - } - } else { - GlobalProvider.save(mActivity, "userType", "P"); - userType = 2; - } - Intent intent = new Intent(); - intent.setAction(PathConfig.ACTION_PUNCH_TIME_MESSAGE); - intent.putExtra("timeBean", mSignTimeBean); - sendBroadcast(intent); - } - } - - @Override - public void onError(Throwable e) { - e.printStackTrace(); - if (progressDialog != null && progressDialog.isShowing() && i == 2) { - progressDialog.dismiss(); - ToastUtils.showShort("获取签到规则失败,请稍后重试"); - } - } - - @Override - public void onComplete() { - - } - }); - } - - /** - * 打开GPS - */ - private void openGpsSetting() { - if (mGpsSettingDialog == null) { - mGpsSettingDialog = new AlertDialog.Builder(this).setTitle("打开GPS") - .setMessage("定位需要打开GPS,请前往设置") - .setNegativeButton("取消", (dialogInterface, i) -> dialogInterface.dismiss()) - .setPositiveButton("前往", (dialogInterface, i) -> { - Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); - startActivityForResult(intent, GPS_REQUEST_CODE); - }) - .setCancelable(false) - .create(); - } - if (!mGpsSettingDialog.isShowing()) { - mGpsSettingDialog.show(); - } - } - /** * 初始化首页按钮 */ @@ -397,60 +166,26 @@ public class MainActivity extends BaseActivity { * @param bean */ private void chosePage(FuncBean bean) { -// "案件上报", "案件记录", "案件处理", "工作路径", "通讯录", "通知公告" +// 企业信息", "隐患上报", "隐患复查", "法律法规 + Intent intent = null; switch (bean.getText()) { - case "案件上报": -// startActivity(new Intent(MainActivity.this, IssueReportActivity.class)); + case "企业信息": + intent = new Intent(this, CompanyLibActivity.class); break; - case "案件记录"://案件记录 - startActivity(new Intent(MainActivity.this, IssueRecordActivity.class)); + case "隐患上报": + intent = new Intent(this, TroubleReportActivity.class); break; - case "案件处理"://案件处理 - startActivity(new Intent(MainActivity.this, IssueCheckActivity.class)); + case "隐患复查": break; - case "工作路径"://工作路径 -// if (userType == 1) { -// startActivity(new Intent(MainActivity.this, LocusManagerActivity.class)); -// } else { -// startActivity(new Intent(MainActivity.this, LocusMapActivity.class)); -// } - break; - case "通讯录"://通讯录 - Intent intent = new Intent(MainActivity.this, AddressListMainActivity.class); - intent.putExtra("uType", userType); - startActivity(intent); - break; - case "通知公告"://通知公告 - startActivity(new Intent(MainActivity.this, NoticeActivity.class)); + case "法律法规": break; } + startActivity(intent); } private void initBaseView() { mGson = new Gson(); String loginInfo = UserLgUtils.getLoginInfo(); - if (!TextUtils.isEmpty(loginInfo)) { - AppTokenUser appTokenUser = mGson.fromJson(loginInfo, AppTokenUser.class); - if (appTokenUser.getRoles() != null && appTokenUser.getRoles().size() > 0) { - for (int i = 0; i < appTokenUser.getRoles().size(); i++) { - if (!TextUtils.isEmpty(appTokenUser.getRoles().get(i).getRoleName())) { - mTvDepart.setText(appTokenUser.getRoles().get(i).getRoleName()); - break; - } - } - } - if (appTokenUser.getRoles() != null && appTokenUser.getRoles().size() > 0) { - for (int i = 0; i < appTokenUser.getRoles().size(); i++) { - if (PathConfig.USER_TYPE_N.equals(appTokenUser.getRoles().get(i).getRoleId())) { - mTvDepart.setText(appTokenUser.getRoles().get(i).getRoleName()); - userType = 1; - break; - } - } - } - } else { - userType = 2; - } mTvUserName.setText(UserLgUtils.getName() + " 个人中心"); Glide.with(mActivity) .load(BaseUrlApi.BASE_IMG_URL + UserLgUtils.getAvatar()) @@ -458,51 +193,14 @@ public class MainActivity extends BaseActivity { .error(R.drawable.ic_user_default) .placeholder(R.drawable.ic_user_default)) .into(mIvUserIcon); - mTvCurrentTime.setText("当前地址:定位中..."); Glide.with(mActivity) .load(R.drawable.ic_nomal) .into(mIvState); mTvState.setText("正常"); mTvState.setTextColor(Color.WHITE); -// checkAmSign(); checkPermission(); } - /** - * 显示片长签到规则 - */ - private void showRuleDialog() { - if (mSignTimeBean != null) { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - String msg = "上午签到时间区间:" + mSignTimeBean.getAmStartPunchTime() + "-" + mSignTimeBean.getAmStartWorkTime() - + "\n上午签退时间区间:" + mSignTimeBean.getAmEndWorkTime() + "-" + mSignTimeBean.getAmEndPunchTime() - + "\n下午签到时间区间:" + mSignTimeBean.getPmStartPunchTime() + "-" + mSignTimeBean.getPmStartWorkTime() - + "\n下午签退时间区间:" + mSignTimeBean.getPmEndWorkTime() + "-" + mSignTimeBean.getPmEndPunchTime(); - builder.setTitle("签到规则") - .setMessage(msg) - .setPositiveButton("确定", (dialog, which) -> dialog.dismiss()); - builder.create().show(); - } else { - getPunchTime(2); - } - } - - /** - * 显示N员签到规则 - */ - private void showNRuleDialog() { - if (mSignTimeBean != null) { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - String msg = "签到时间区间: " + mSignTimeBean.getNStartPunchTime() + " - " + mSignTimeBean.getNStartWorkTime() - + "\n签退时间区间:" + mSignTimeBean.getNEndWorkTime() + "-" + mSignTimeBean.getNEndPunchTime(); - builder.setTitle("签到规则") - .setMessage(msg) - .setPositiveButton("确定", (dialog, which) -> dialog.dismiss()); - builder.create().show(); - } else { - getPunchTime(2); - } - } private void checkPermission() { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { @@ -570,710 +268,6 @@ public class MainActivity extends BaseActivity { }); } - private void uploadPoint() { - LocationPosition position = new LocationPosition(); -// position.setUserLatitude(mCurrentLocation.getLatitude() + ""); -// position.setUserLongitude(mCurrentLocation.getLongitude() + ""); -// position.setUserLocation(mCurrentLocation.getAddress().address); -// position.setUserSpeed(mCurrentLocation.getSpeed() + ""); - Gson gson = new Gson(); - String s = gson.toJson(position); - RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), s); - RetrofitManager.getInstance() - .create(LocationApiService.class) - .saveLocationData(body, UserLgUtils.getToken()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(SuccessBean successBean) { - - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onComplete() { - - } - }); - } - - /** - * 检查是否签到 - */ - private void checkAmSign() { - RetrofitManager.getInstance() - .create(LocationApiService.class) - .checkSign(UserLgUtils.getToken()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(CheckSignBean checkSignBean) { - if (checkSignBean != null && !TextUtils.isEmpty(checkSignBean.getData().getIsSign())) { - LogUtils.e(checkSignBean.getData()); - boolean b = Boolean.parseBoolean(checkSignBean.getData().getIsSign()); - if (!TextUtils.isEmpty(checkSignBean.getData().getStatus())) { - boolean late = Boolean.parseBoolean(checkSignBean.getData().getStatus()); - if (late) { - //迟到了 - Glide.with(mActivity) - .load(R.drawable.ic_late) - .into(mIvState); - mTvState.setText("迟到"); - mTvState.setTextColor(Color.RED); - } else { - //正常 - Glide.with(mActivity) - .load(R.drawable.ic_nomal) - .into(mIvState); - mTvState.setText("正常"); - mTvState.setTextColor(Color.WHITE); - } - } else { - //正常 - Glide.with(mActivity) - .load(R.drawable.ic_nomal) - .into(mIvState); - mTvState.setText("正常"); - mTvState.setTextColor(Color.WHITE); - } - if (b) { - isSgin = true; - mTvSign.setTextColor(Color.WHITE); - setSignOffText(); - checkSignOff(); - GlobalProvider.save(mActivity, "isUpload", "13"); - } else { - isSgin = false; - mTvSign.setTextColor(Color.WHITE); - setSignText(); - GlobalProvider.save(mActivity, "isUpload", "12"); - } - } - } - - @Override - public void onError(Throwable e) { - mTvSign.setTextColor(Color.WHITE); - } - - @Override - public void onComplete() { - - } - }); - } - - /** - * 校验是否签退 - */ - private void checkSignOff() { - RetrofitManager.getInstance() - .create(LocationApiService.class) - .checkSignOff(UserLgUtils.getToken()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(CheckSignOffBean checkSignBean) { - LogUtils.e(checkSignBean); - if (checkSignBean != null && !TextUtils.isEmpty(checkSignBean.getData())) { - boolean b = Boolean.parseBoolean(checkSignBean.getData()); - if (b) { - //已经签退 - isSignOff = true; - mTvSign.setTextColor(Color.WHITE); - setSignCompleteText(); - GlobalProvider.save(mActivity, "isUpload", "12"); - } else { - //没有签退 - isSignOff = false; - mTvSign.setTextColor(Color.WHITE); - setSignOffText(); - GlobalProvider.save(mActivity, "isUpload", "13"); - } - } else { - //未签退 - mTvSign.setTextColor(Color.WHITE); - setSignOffText(); - GlobalProvider.save(mActivity, "isUpload", "13"); - } - } - - @Override - public void onError(Throwable e) { - mTvSign.setTextColor(Color.WHITE); - GlobalProvider.save(mActivity, "isUpload", "13"); - } - - @Override - public void onComplete() { - - } - }); - } - - /** - * 定时 - */ - private void interval() { - Observable.interval(5, 1, TimeUnit.MINUTES) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - mTimeDis = d; - } - - @Override - public void onNext(Long aLong) { - checkAmSign(); - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onComplete() { - - } - }); - } - - /** - * 显示签到dialog - */ - private void showSignDialog() { -// test(); -// if (mCurrentLocation == null) { -// ToastUtils.showShort("正在定位中,请稍后重试."); -// } else { -// if (2 == userType) { -// show();//片长签到退 -// } else { -// showN();//显示N员签到退 -// } -// } - } - - private void test() { - String nowHour = TimeUtils.getNowHourMM(); - boolean isAmPunch = TimeUtils.isInTime(mSignTimeBean.getAmEndWorkTime() + "-" + mSignTimeBean.getAmEndPunchTime(), nowHour); - boolean isPmPunch = TimeUtils.isInTime(mSignTimeBean.getPmEndWorkTime() + "-" + mSignTimeBean.getPmEndPunchTime(), nowHour); - if (isAmPunch || isPmPunch) { - LogUtils.e("在规则内"); - } else { - LogUtils.e("不在规则内"); - } - } - - /** - * 显示N员签到签退 - */ - private void showN() { - String nowHour = TimeUtils.getNowHour(); - if (mSignTimeBean != null) { - if (isSgin) { - //已经签到,显示签退 - if (isSignOff) { - ToastUtils.showShort("打开完成"); - } else { - boolean isTimeLegal = TimeUtils.isInTime(mSignTimeBean.getNEndWorkTime() + "-" + mSignTimeBean.getNEndPunchTime(), nowHour); - LogUtils.e("N员签到时间区间=" + mSignTimeBean.getNEndWorkTime() + "-" + mSignTimeBean.getNEndPunchTime()); -// if (isTimeLegal) { -// if (mPenLineList != null && mPenLineList.size() > 0) { -// if (checkCurrenPointIsBeyond(mCurrentLocation)) { -// showSignOffDialog(); -// } else { -// ToastUtils.showShort("当前位置不在所管辖片区内,请前往片区内进行签到或签退操作."); -// } -// } else { -// getPenList(); -// } -// } else { -// ToastUtils.showShort("未到签退时间"); -// } - } - } else { - //未签到 - boolean isLegalTime = TimeUtils.isInTime(mSignTimeBean.getNStartPunchTime() + "-" + mSignTimeBean.getNEndPunchTime(), nowHour); - if (isLegalTime) { -// if (mPenLineList != null && mPenLineList.size() > 0) { -// if (checkCurrenPointIsBeyond(mCurrentLocation)) { -// showSDialog(); -// } else { -// ToastUtils.showShort("当前位置不在所管辖片区内,请前往片区内进行签到或签退操作."); -// } -// } else { -// getPenList(); -// } - } else { - ToastUtils.showShort("未到签到时间"); - } - } - } else { - getPunchTime(2); - } - - } - - /** - * 显示片长签到签退 - */ - private void show() { - String nowHour = TimeUtils.getNowHour(); - if (mSignTimeBean != null) { - if (isSgin) { - //签到了 - if (isSignOff) { - //签退了 - boolean amOrPm = TimeUtils.isAmOrPm(); - if (!amOrPm) { - ToastUtils.showShort("今天打卡已经完成"); - } else { - //上午 签到了 也签退了 - boolean isPmPunch = TimeUtils.isInTime(mSignTimeBean.getPmStartPunchTime() + "-" + mSignTimeBean.getPmEndPunchTime(), nowHour); - if (isPmPunch) { - if (2 == userType) { -// if (mPenLineList != null && mPenLineList.size() > 0) { -// if (checkCurrenPointIsBeyond(mCurrentLocation)) { -// showSDialog(); -// } else { -// ToastUtils.showShort("当前位置不在所管辖片区内,请前往片区内进行签到或签退操作."); -// } -// } else { -// getPenList(); -// } - } else { - showSDialog(); - } - } else { - ToastUtils.showShort("当前时间不在签到时间规则范围内"); - } - } - } else { - //未签退 - boolean isAmPunch = TimeUtils.isInTime(mSignTimeBean.getAmEndWorkTime() + "-" + mSignTimeBean.getAmEndPunchTime(), nowHour); - boolean isPmPunch = TimeUtils.isInTime(mSignTimeBean.getPmEndWorkTime() + "-" + mSignTimeBean.getPmEndPunchTime(), nowHour); - if (isAmPunch || isPmPunch) { - if (2 == userType) { -// if (mPenLineList != null && mPenLineList.size() > 0) { -// if (checkCurrenPointIsBeyond(mCurrentLocation)) { -// showSignOffDialog(); -// } else { -// ToastUtils.showShort("当前位置不在所管辖片区内,请前往片区内进行签到或签退操作."); -// } -// } else { -// getPenList(); -// } - - } else { - showSignOffDialog(); - } - } else { - if (TimeUtils.compareToCurrent(mSignTimeBean.getAmEndPunchTime()) || TimeUtils.compareToCurrent(mSignTimeBean.getPmEndPunchTime())) { - ToastUtils.showShort("未到签退时间"); - } else { - ToastUtils.showShort("已过签退时间"); - } - } - } - } else { - //没有签到 - boolean isInAmTime = TimeUtils.isInTime(mSignTimeBean.getAmStartPunchTime() + "-" + mSignTimeBean.getAmEndPunchTime(), nowHour); - boolean isInPmTime = TimeUtils.isInTime(mSignTimeBean.getPmStartPunchTime() + "-" + mSignTimeBean.getPmEndPunchTime(), nowHour); - LogUtils.e("上午签到时间:" + mSignTimeBean.getAmStartPunchTime() + "-" + mSignTimeBean.getAmEndPunchTime()); - LogUtils.e("下午签到时间:" + mSignTimeBean.getPmStartPunchTime() + "-" + mSignTimeBean.getPmEndPunchTime()); - if (isInAmTime) { - if (2 == userType) { -// if (mPenLineList != null && mPenLineList.size() > 0) { -// if (checkCurrenPointIsBeyond(mCurrentLocation)) { -// showSDialog(); -// } else { -// ToastUtils.showShort("当前位置不在所管辖片区内,请前往片区内进行签到或签退操作."); -// } -// } else { -// getPenList(); -// } - } else { - showSDialog(); - } - } else { - if (isInPmTime) { - if (2 == userType) { -// if (mPenLineList != null && mPenLineList.size() > 0) { -// if (checkCurrenPointIsBeyond(mCurrentLocation)) { -// showSDialog(); -// } else { -// ToastUtils.showShort("当前位置不在所管辖片区内,请前往片区内进行签到或签退操作."); -// } -// } else { -// getPenList(); -// } - } else { - showSDialog(); - } - } else { - ToastUtils.showShort("未到签到时间"); - } - } - } - } else { - getPunchTime(2); - } - } - - /** - * 显示签到 - */ - private void showSDialog() { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setMessage("确认要签到吗?"); - builder.setTitle("提示") - .setMessage("确认要签到吗?") - .setPositiveButton("确定", (dialog, which) -> { - dialog.dismiss(); - doSign(); - }) - .setNegativeButton("取消", (dialog, which) -> dialog.dismiss()); - builder.create().show(); - } - - - /** - * 显示签退 - */ - private void showSignOffDialog() { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle("提示") - .setMessage("确认要签退吗?") - .setPositiveButton("确定", (dialog, which) -> { - dialog.dismiss(); - doSignOff(); - }) - .setNegativeButton("取消", (dialog, which) -> dialog.dismiss()); - builder.create().show(); - } - - /** - * 签退 - */ - private void doSignOff() { -// ProgressDialog dialog = UIUtil.initDialog(mActivity, "签退中..."); -// dialog.show(); -// SignOffBean bean = new SignOffBean(); -// bean.setSignoutLatitude(mCurrentLocation.getLatitude() + ""); -// bean.setSignoutLongitude(mCurrentLocation.getLongitude() + ""); -// Gson gson = new Gson(); -// String obj = gson.toJson(bean); -// RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), obj); -// RetrofitManager.getInstance() -// .create(LocationApiService.class) -// .doSignOff(body, UserLgUtils.getToken()) -// .subscribeOn(Schedulers.io()) -// .observeOn(AndroidSchedulers.mainThread()) -// .subscribe(new Observer() { -// @Override -// public void onSubscribe(Disposable d) { -// } -// -// @Override -// public void onNext(SuccessBean successBean) { -//// uploadPoint(); -// dialog.dismiss(); -// isSignOff = true; -// setSignCompleteText(); -// mTvSign.setTextColor(Color.WHITE); -// ToastUtils.showLong("签退成功"); -// GlobalProvider.save(mActivity, "isUpload", "12"); -// } -// -// @Override -// public void onError(Throwable e) { -// dialog.dismiss(); -// ExceptionHandler.handleException(e); -// } -// -// @Override -// public void onComplete() { -// -// } -// }); - } - - private void getUserPenList() { - RetrofitManager.getInstance() - .create(LocationApiService.class) - .getUserPenList(UserLgUtils.getToken()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer>() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(List penLineBeans) { - if (penLineBeans != null && penLineBeans.size() > 0) { -// buildPenList(penLineBeans); - } - } - - @Override - public void onError(Throwable e) { - } - - @Override - public void onComplete() { - - } - }); - - } - - /** - * 手动获取围栏数据 - */ - private void getPenList() { - ProgressDialog dialog = UIUtil.initDialog(mActivity, "获取围栏数据中..."); - dialog.show(); - RetrofitManager.getInstance() - .create(LocationApiService.class) - .getUserPenList(UserLgUtils.getToken()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer>() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(List penLineBeans) { - dialog.dismiss(); -// if (penLineBeans != null && penLineBeans.size() > 0) { -// mPenLineList = new ArrayList<>(); -// for (int i = 0; i < penLineBeans.size(); i++) { -// List areaPoints = penLineBeans.get(i).getAreaPoints(); -// if (areaPoints != null && areaPoints.size() > 0) { -// List tempList = new ArrayList<>(); -// for (int j = 0; j < areaPoints.size(); j++) { -// LatLng latLng = new LatLng(Double.parseDouble(areaPoints.get(j).getLatitude()), Double.parseDouble(areaPoints.get(j).getLongitude())); -// tempList.add(latLng); -// } -// LatLng latLng = new LatLng(Double.parseDouble(areaPoints.get(0).getLatitude()), Double.parseDouble(areaPoints.get(0).getLongitude())); -// tempList.add(latLng); -// mPenLineList.add(tempList); -// } -// } -// ToastUtils.showShort("获取片区数据成功,请重新签到或签退"); -// } else { -// ToastUtils.showShort("暂无片区数据"); -// } - } - - @Override - public void onError(Throwable e) { - dialog.dismiss(); - ExceptionHandler.handleException(e); - } - - @Override - public void onComplete() { - - } - }); - - } - - /** - * 判断是否越界 - * - * @param bdLocation - */ -// private boolean checkCurrenPointIsBeyond(BDLocation bdLocation) { -// if (mPenLineList != null && mPenLineList.size() > 0) { -// for (int i = 0; i < mPenLineList.size(); i++) { -// LatLng latLng = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude()); -// boolean inPolygon = PointUtils.isInPolygon(latLng, mPenLineList.get(i)); -// if (inPolygon) { -// return true; -// } -// } -// return false; -// } else { -// return false; -// } -// } - -// private void buildPenList(List penLineBeans) { -// mPenLineList = new ArrayList<>(); -// for (int i = 0; i < penLineBeans.size(); i++) { -// List areaPoints = penLineBeans.get(i).getAreaPoints(); -// if (areaPoints != null && areaPoints.size() > 0) { -// List tempList = new ArrayList<>(); -// for (int j = 0; j < areaPoints.size(); j++) { -// LatLng latLng = new LatLng(Double.parseDouble(areaPoints.get(j).getLatitude()), Double.parseDouble(areaPoints.get(j).getLongitude())); -// tempList.add(latLng); -// } -// LatLng latLng = new LatLng(Double.parseDouble(areaPoints.get(0).getLatitude()), Double.parseDouble(areaPoints.get(0).getLongitude())); -// tempList.add(latLng); -// mPenLineList.add(tempList); -// } -// } -// } - - /** - * 进行签到 - */ - private void doSign() { -// ProgressDialog dialog = UIUtil.initDialog(mActivity, "签到中..."); -// dialog.show(); -// SignBean bean = new SignBean(); -// bean.setSigninLatitude(mCurrentLocation.getLatitude() + ""); -// bean.setSigninLongitude(mCurrentLocation.getLongitude() + ""); -// Gson gson = new Gson(); -// String obj = gson.toJson(bean); -// RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), obj); -// RetrofitManager.getInstance() -// .create(LocationApiService.class) -// .doSign(body, UserLgUtils.getToken()) -// .subscribeOn(Schedulers.io()) -// .observeOn(AndroidSchedulers.mainThread()) -// .subscribe(new Observer() { -// @Override -// public void onSubscribe(Disposable d) { -// -// } -// -// @Override -// public void onNext(SignDataBean successBean) { -//// LogUtils.e(successBean); -//// uploadPoint(); -// isSgin = true; -// isSignOff = false; -// if (successBean.isData()) { -// Glide.with(mActivity) -// .load(R.drawable.ic_late) -// .into(mIvState); -// mTvState.setText("迟到"); -// mTvState.setTextColor(Color.RED); -// } else { -// Glide.with(mActivity) -// .load(R.drawable.ic_nomal) -// .into(mIvState); -// mTvState.setText("正常"); -// mTvState.setTextColor(Color.WHITE); -// } -// dialog.dismiss(); -// GlobalProvider.save(mActivity, "isUpload", "13"); -// setSignOffText(); -// mTvSign.setTextColor(Color.WHITE); -// ToastUtils.showLong("签到成功"); -// } -// -// @Override -// public void onError(Throwable e) { -// e.printStackTrace(); -// dialog.dismiss(); -// ExceptionHandler.handleException(e); -// } -// -// @Override -// public void onComplete() { -// -// } -// }); - } - - /** - * 设置未签到文字 - */ - private void setSignText() { - if (userType == 2) { - boolean amOrPm = TimeUtils.isAmOrPm(); - if (amOrPm) { - //上午 - mTvSign.setText("上午\n签到"); - } else { - //下午 - mTvSign.setText("下午\n签到"); - } - } else { - mTvSign.setText("签到"); - } - } - - /** - * 设置已签到文字 - */ - private void setSignOffText() { - if (userType == 2) { - //片长 - boolean amOrPm = TimeUtils.isAmOrPm(); - if (amOrPm) { - mTvSign.setText("上午\n签退"); - } else { - mTvSign.setText("下午\n签退"); - } - } else { - //N员 - mTvSign.setText("签退"); - } - } - - - /** - * 设置签到完成文字 - */ - private void setSignCompleteText() { - if (userType == 2) { - boolean amOrPm = TimeUtils.isAmOrPm(); - if (amOrPm) { - //未签到 - mTvSign.setText("下午\n签到"); - } else { - //下午 - mTvSign.setText("打卡\n完成"); - Glide.with(mActivity) - .load(R.drawable.ic_nomal) - .into(mIvState); - mTvState.setText("正常"); - mTvState.setTextColor(Color.WHITE); - } - } else { - mTvSign.setText("打卡\n完成"); - Glide.with(mActivity) - .load(R.drawable.ic_nomal) - .into(mIvState); - mTvState.setText("正常"); - mTvState.setTextColor(Color.WHITE); - } - } /** * 创建缓存文件夹 @@ -1291,31 +285,11 @@ public class MainActivity extends BaseActivity { } } - private void initScreenListener() { - final ScreenManager screenManager = ScreenManager.getInstance(MainActivity.this); - ScreenBroadCastListener listener = new ScreenBroadCastListener(this); - listener.addScreenStateListener(new ScreenBroadCastListener.ScreenStateListener() { - @Override - public void onScreenOn() { - screenManager.finishActivity(); - } - - @Override - public void onScreenOff() { - screenManager.startActivity(); - } - }); - } /** * report 案件上报 */ - @OnClick({/**R.id.rl_issue_report, - R.id.rl_issue_record, - R.id.rl_issue_dispose, - R.id.rl_address_list, - R.id.rl_notice, - R.id.rl_work_iocus,*/ + @OnClick({ R.id.ll_issue_dis, R.id.ll_mine_issue, R.id.tv_sign, @@ -1331,7 +305,6 @@ public class MainActivity extends BaseActivity { startActivity(new Intent(mActivity, IssueMineActivity.class)); break; case R.id.tv_sign://签到 - showSignDialog(); break; case R.id.ll_day_aviso://每日通报 Intent intent = new Intent(MainActivity.this, NoticeActivity.class); @@ -1342,11 +315,7 @@ public class MainActivity extends BaseActivity { startActivity(new Intent(MainActivity.this, UserActivity.class)); break; case R.id.tv_rule://签到规则 - if (2 == userType) { - showRuleDialog(); - } else { - showNRuleDialog(); - } + break; } } @@ -1355,10 +324,6 @@ public class MainActivity extends BaseActivity { @Override protected void onResume() { super.onResume(); - isForeground = true; - isForeg = true; - getMessageCount(); -// checkAmSign(); Glide.with(mActivity) .load(BaseUrlApi.BASE_IMG_URL + UserLgUtils.getAvatar()) .apply(RequestOptions.bitmapTransform(new CircleCrop()) @@ -1370,304 +335,23 @@ public class MainActivity extends BaseActivity { @Override protected void onPause() { super.onPause(); - isForeground = false; - isForeg = false; } @Override protected void onStart() { super.onStart(); - isForeground = true; - LogUtils.e("===OnStart==="); - checkAmSign(); - if (mSignTimeBean != null) { - Intent intent = new Intent(); - intent.setAction(PathConfig.ACTION_PUNCH_TIME_MESSAGE); - intent.putExtra("timeBean", mSignTimeBean); - intent.putExtra("uType", userType); - sendBroadcast(intent); - } - } - - private void getMessageCount() { - RetrofitManager.getInstance() - .create(LocationApiService.class) - .getMainMessageNum(UserLgUtils.getToken()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(MainNumBean mainNumBean) { - if (mainNumBean != null) { - mTvAvisoNum.setText(mainNumBean.getCountOfDaily() + ""); - if (mainNumBean.getHandleOfMine() > 0) { - mIvIssueDisNum.setVisibility(View.VISIBLE); - } else { - mIvIssueDisNum.setVisibility(View.GONE); - } - mTvIssueDisNum.setText(mainNumBean.getHandleOfMine() + ""); - mTvMineIssueNum.setText(mainNumBean.getCaseOfMine() + ""); - } - } - - @Override - public void onError(Throwable e) { - } - - @Override - public void onComplete() { - - } - }); - } - - /** - * 启动定位 - */ - private void startListenLocation() { - - boolean isRuning = AppUtils.getProcessIsRuning(getApplicationContext(), "com.sucstepsoft.txrealtimelocation.services.LocationService"); - if (!isRuning) { - startLocation(); - } else { - Intent intent = new Intent(); - intent.setAction(PathConfig.ACTION_STOP_LOCATION); - sendBroadcast(intent); - } - } - - private void startLocation() { - boolean isSetting = UserLgUtils.getIsSetting(); - if (!isSetting) { -// IntentWrapper.jumpStartInterface(mActivity); - IntentWrapper.whiteListMatters(MainActivity.this, "应急管理局"); - } - GlobalProvider.save(mActivity, "isUpload", "12"); - Intent intent = new Intent(MainActivity.this, LocationService.class); - intent.putExtra("token", UserLgUtils.getToken()); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - startForegroundService(intent); - } else { - startService(intent); - } - } - - @Override - protected void onStop() { - super.onStop(); - LogUtils.e("====OnStop===="); - } - - public void registerMessageReceiver() { - mMessageReceiver = new MessageReceiver(); - IntentFilter filter = new IntentFilter(); -// filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); -// filter.addAction(PathConfig.ACTION_LOCATION_MESSAGE); - filter.addAction("com.sucstepsoft.realtimelocation.isonlone"); - registerReceiver(mMessageReceiver, filter); - } - - /** - * 检验GPS是否开启 5秒一次 - */ - private void registerGpsState() { - Observable.interval(5, TimeUnit.SECONDS) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - mGpsStateDis = d; - } - - @Override - public void onNext(Long aLong) { - if (isForeg) { - if (mCurrentLongTime != 0) { - long timeSpan = TimeUtils.getTimeSpan(System.currentTimeMillis(), mCurrentLongTime, TimeConstants.MIN); - if (timeSpan < 10) { - mTvOnline.setText("(在线)"); - } else { - mTvOnline.setText("(离线)"); - } - } - boolean oPen = GpsUtils.isOPen(mActivity); - if (!oPen) { - openGpsSetting(); - } - } - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onComplete() { - - } - }); - } - - /** - * Gps信号不好的弹窗 - */ - private void registerGpsSignal() { - Observable.timer(10, TimeUnit.SECONDS) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - mGpsDis = d; - } - - @Override - public void onNext(Long aLong) { - if (isForeg) { - if (mGpsWeakDialog == null) { - AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); - builder.setMessage("当前GPS信号较弱,请调整当前所在位置,或检查手机GPS是否开启,将Wifi与蓝牙打开会提高定位精度.") - .setTitle("提示") - .setNegativeButton("确定", (dialog, which) -> dialog.dismiss()); - mGpsWeakDialog = builder.create(); - } - if (!mGpsWeakDialog.isShowing()) { - mGpsWeakDialog.show(); - } - } - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onComplete() { - - } - }); - } - - - public class MessageReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - if ("com.sucstepsoft.realtimelocation.isonlone".equals(intent.getAction())) { - String uploadTime = intent.getStringExtra("uploadTime"); - if (!TextUtils.isEmpty(uploadTime)) { - long l = Long.parseLong(uploadTime); - mCurrentLongTime = l; - } - } - } - } @Override protected void onDestroy() { - if (mGpsStateDis != null && !mGpsStateDis.isDisposed()) { - mGpsStateDis.dispose(); - } - if (mGpsDis != null && !mGpsDis.isDisposed()) { - mGpsDis.dispose(); - } - if (mTimeDis != null && !mTimeDis.isDisposed()) { - mTimeDis.dispose(); - } - if (mMessageReceiver != null) { - unregisterReceiver(mMessageReceiver); - } + if (mBind != null) { mBind.unbind(); } - stopLocation(); super.onDestroy(); } - private void startSignLocation() { - stopLocation(); -// mLocationClient = new LocationClient(getApplicationContext()); -// LocationClientOption locationOption = new LocationClientOption(); -// SignLocationListener myLocationListener = new SignLocationListener(); -// mLocationClient.registerLocationListener(myLocationListener); -// locationOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); -// locationOption.setCoorType("bd09ll"); -// locationOption.setScanSpan(30 * 1000); -// locationOption.setIsNeedAddress(true); -// locationOption.setNeedDeviceDirect(false); -// locationOption.setLocationNotify(false); -// locationOption.setIgnoreKillProcess(true); -// locationOption.setIsNeedLocationDescribe(true); -// locationOption.setIsNeedLocationPoiList(true); -// locationOption.SetIgnoreCacheException(false); -// locationOption.setOpenGps(true); -// locationOption.setIsNeedAltitude(false); -//// locationOption.setLocationPurpose(LocationClientOption.BDLocationPurpose.SignIn); -// mLocationClient.setLocOption(locationOption); -// //开始定位 -// mLocationClient.start(); - } - - private void stopLocation() { -// if (null != mLocationClient) { -// mLocationClient.stop(); -// } - } - -// private class SignLocationListener extends BDAbstractLocationListener { -// @Override -// public void onReceiveLocation(BDLocation bdLocation) { -// if (bdLocation != null && bdLocation.getLatitude() != 0 && bdLocation.getLongitude() != 0) { -// checkPointIsLegal(bdLocation); -// } -// } -// } - -// private void checkPointIsLegal(BDLocation bdLocation) { -// if (PathConfig.CITY_CODE_DEFAULT.equals(bdLocation.getCityCode())) { -// if (bdLocation != null && bdLocation.getLatitude() != 0 && bdLocation.getLongitude() != 0) { -// if (mPrecision >= mPrecMax) { -// mPrecision = mPrecisionDefault; -// if (mGpsWeakDialog == null) { -// AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); -// builder.setMessage("当前GPS信号较弱,请调整当前所在位置,或检查手机GPS是否开启,将Wifi与蓝牙打开会提高定位精度.") -// .setTitle("提示") -// .setNegativeButton("确定", (dialog, which) -> dialog.dismiss()); -// mGpsWeakDialog = builder.create(); -// } -// if (!mGpsWeakDialog.isShowing()) { -// mGpsWeakDialog.show(); -// } -// } else { -// if (bdLocation.getRadius() <= mPrecision) { -// mPrecision = mPrecisionDefault; -// if (bdLocation.getLatitude() != Double.MIN_VALUE && bdLocation.getLongitude() != Double.MIN_VALUE) { -// mCurrentLocation = bdLocation; -// if (mGpsDis != null && !mGpsDis.isDisposed()) { -// mGpsDis.dispose(); -// } -// if (TextUtils.isEmpty(mCurrentLocation.getAddrStr())) { -// mTvCurrentTime.setText("当前地址:未知"); -// } else { -// mTvCurrentTime.setText("当前地址:" + mCurrentLocation.getAddrStr()); -// } -// } -// } else { -// mPrecision += 10; -// } -// } -// } -// } -// } @Override public void onBackPressed() { diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/companylib/CompanyDetailActivity.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/companylib/CompanyDetailActivity.java new file mode 100644 index 0000000..5299606 --- /dev/null +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/companylib/CompanyDetailActivity.java @@ -0,0 +1,39 @@ +package com.sucstepsoft.txrealtimelocation.activitys.companylib; + +import com.sucstepsoft.cm_utils.core.widget.base.BaseActivity; +import com.sucstepsoft.txrealtimelocation.R; + +import butterknife.ButterKnife; +import butterknife.Unbinder; + +/** + * 企业信息详情 + */ +public class CompanyDetailActivity extends BaseActivity { + + private Unbinder mBind; + + @Override + protected int setLayoutId() { + return R.layout.activity_company_detail; + } + + @Override + public void initData() { + mBind = ButterKnife.bind(this); + mTvBaseTitle.setText("企业详情"); + refreshView(STATE_LOAD_LOADING); + String mId = getIntent().getStringExtra("id"); + getCompanyDetailById(mId); + } + + private void getCompanyDetailById(String mId) { + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mBind.unbind(); + } +} diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/companylib/CompanyInfoEditActivity.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/companylib/CompanyInfoEditActivity.java new file mode 100644 index 0000000..92d8c35 --- /dev/null +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/companylib/CompanyInfoEditActivity.java @@ -0,0 +1,41 @@ +package com.sucstepsoft.txrealtimelocation.activitys.companylib; + +import com.sucstepsoft.cm_utils.core.widget.base.BaseActivity; +import com.sucstepsoft.txrealtimelocation.R; + +import butterknife.ButterKnife; +import butterknife.Unbinder; + +/** + * 企业信息编辑 + */ +public class CompanyInfoEditActivity extends BaseActivity { + + private Unbinder mBind; + private String mId; + + + @Override + protected int setLayoutId() { + return R.layout.activity_company_info_edit; + } + + @Override + public void initData() { + mBind = ButterKnife.bind(this); + mTvBaseTitle.setText("企业信息编辑"); + refreshView(STATE_LOAD_LOADING); + mId = getIntent().getStringExtra("id"); + getCompanyDetail(mId); + } + + private void getCompanyDetail(String id) { + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mBind.unbind(); + } +} diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/companylib/CompanyLibActivity.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/companylib/CompanyLibActivity.java new file mode 100644 index 0000000..7dfd756 --- /dev/null +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/companylib/CompanyLibActivity.java @@ -0,0 +1,143 @@ +package com.sucstepsoft.txrealtimelocation.activitys.companylib; + +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; + +import com.jcodecraeer.xrecyclerview.ProgressStyle; +import com.jcodecraeer.xrecyclerview.XRecyclerView; +import com.sucstepsoft.cm_utils.core.widget.base.BaseActivity; +import com.sucstepsoft.txrealtimelocation.R; +import com.sucstepsoft.txrealtimelocation.adapters.CompanyLibAdapter; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.Unbinder; + +/** + * 企业信息首页 + */ +public class CompanyLibActivity extends BaseActivity { + + @BindView(R.id.et_company_name) + EditText mEtCompanyName; + @BindView(R.id.tv_com_type) + TextView mTvComType; + @BindView(R.id.pb_loading) + ProgressBar mPbLoading; + @BindView(R.id.iv_empty) + ImageView mIvEmpty; + @BindView(R.id.tv_error_hint) + TextView mTvErrorHint; + private Unbinder mBind; + @BindView(R.id.xlv_com_lib) + XRecyclerView mRlvComList; + private int mCurrentPage = 1; + private List mDatas = new ArrayList<>(); + private static final int STATE_LOADING = 333; + private static final int STATE_EMPTY = 433; + private static final int STATE_ERROR = 533; + + @Override + protected int setLayoutId() { + return R.layout.activity_company_lib; + } + + @Override + public void initData() { + refreshView(STATE_LOAD_SUCCESS); + mTvBaseTitle.setText("企业信息"); + mBind = ButterKnife.bind(this); + mTvPublish.setVisibility(View.VISIBLE); + mTvPublish.setText("录入"); + mTvPublish.setOnClickListener(v -> startActivity(new Intent(this, EnterCompanyInfoActivity.class))); + CompanyLibAdapter mAdapter = new CompanyLibAdapter(mActivity, mDatas); + LinearLayoutManager layoutManager = new LinearLayoutManager(mActivity); + layoutManager.setOrientation(LinearLayoutManager.VERTICAL); + mRlvComList.setLayoutManager(layoutManager); + mRlvComList.setAdapter(mAdapter); + mAdapter.addOnItemClickListener(bean -> showDetail(bean)); + mRlvComList.setRefreshProgressStyle(ProgressStyle.BallGridBeat); + mRlvComList.setLoadingMoreProgressStyle(ProgressStyle.Pacman); + mRlvComList.setPullRefreshEnabled(true); + mRlvComList.setLoadingMoreEnabled(true); + mRlvComList.setLoadingListener(new XRecyclerView.LoadingListener() { + @Override + public void onRefresh() { + refreshData(); + } + + @Override + public void onLoadMore() { + getCompanyLibList(mCurrentPage); + } + }); + stateView(STATE_LOADING); + } + + private void stateView(int state) { + switch (state) { + case STATE_EMPTY: + mTvErrorHint.setText("暂无数据"); + mRlvComList.setVisibility(View.GONE); + mPbLoading.setVisibility(View.GONE); + mIvEmpty.setVisibility(View.VISIBLE); + break;//空数据 + case STATE_ERROR: + mTvErrorHint.setText("数据加载失败,请稍后重试."); + mRlvComList.setVisibility(View.GONE); + mPbLoading.setVisibility(View.GONE); + mIvEmpty.setVisibility(View.VISIBLE); + break;//加载错误 + case STATE_LOADING: + default: + mTvErrorHint.setText("数据加载中..."); + mRlvComList.setVisibility(View.GONE); + mPbLoading.setVisibility(View.VISIBLE); + mIvEmpty.setVisibility(View.GONE); + break; + } + } + + /** + * 显示详情 + * + * @param id + */ + private void showDetail(String id) { + Intent intent = new Intent(); + intent.setClass(mActivity, CompanyDetailActivity.class); + intent.putExtra("id", id); + startActivity(intent); + } + + /** + * 获取列表 + * + * @param currentPage + */ + private void getCompanyLibList(int currentPage) { + + } + + /** + * 刷新列表 + */ + private void refreshData() { + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mBind.unbind(); + } +} diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/companylib/EnterCompanyInfoActivity.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/companylib/EnterCompanyInfoActivity.java new file mode 100644 index 0000000..54e1e96 --- /dev/null +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/companylib/EnterCompanyInfoActivity.java @@ -0,0 +1,315 @@ +package com.sucstepsoft.txrealtimelocation.activitys.companylib; + +import android.content.Intent; +import android.database.Cursor; +import android.net.Uri; +import android.os.Build; +import android.provider.MediaStore; +import android.support.v4.content.FileProvider; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.Gravity; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +import com.sucstepsoft.cm_utils.constant.PathConfig; +import com.sucstepsoft.cm_utils.core.beans.AddPhotoBean; +import com.sucstepsoft.cm_utils.core.retrofit_net.BaseUrlApi; +import com.sucstepsoft.cm_utils.core.widget.base.AddPhotoAdapter; +import com.sucstepsoft.cm_utils.core.widget.base.BaseActivity; +import com.sucstepsoft.cm_utils.core.widget.views.ButtomDialogView; +import com.sucstepsoft.cm_utils.utils.ProiderUtil; +import com.sucstepsoft.txrealtimelocation.R; +import com.sucstepsoft.txrealtimelocation.activitys.common.PhotoActivity; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.Unbinder; + +/** + * 录入企业信息页面 + */ +public class EnterCompanyInfoActivity extends BaseActivity { + + @BindView(R.id.tv_issue_base_info) + TextView mTvIssueBaseInfo; + @BindView(R.id.et_company_name) + EditText mEtCompanyName; + @BindView(R.id.tv_com_type) + TextView mTvComType; + @BindView(R.id.et_register_address) + EditText mEtRegisterAddress; + @BindView(R.id.et_detail_address) + EditText mEtDetailAddress; + @BindView(R.id.tv_trade) + TextView mTvTrade; + @BindView(R.id.et_peo_count) + EditText mEtPeoCount; + @BindView(R.id.tv_risk) + TextView mTvRisk; + @BindView(R.id.et_pre) + EditText mEtPre; + @BindView(R.id.et_phone) + EditText mEtPhone; + @BindView(R.id.tv_issue_detail_info) + TextView mTvIssueDetailInfo; + @BindView(R.id.rlv_door) + RecyclerView mRlvDoor; + @BindView(R.id.rlv_place) + RecyclerView mRlvPlace; + @BindView(R.id.btn_submit) + Button mBtnSubmit; + private Unbinder mBind; + private List mDoorPhotos; + private List mPlacePhotos; + private AddPhotoBean mCurrentBean; + private String mPicPath; + private String mDoorPhotoIds = ""; + private String mPlacePhotoIds = ""; + + @Override + protected int setLayoutId() { + return R.layout.activity_enter_company_info; + } + + @Override + public void initData() { + mTvBaseTitle.setText("企业信息录入"); + refreshView(STATE_LOAD_SUCCESS); + mBind = ButterKnife.bind(this); + initPhotoView(); + + } + + private void initPhotoView() { + mDoorPhotos = new ArrayList<>(); + mPlacePhotos = new ArrayList<>(); + mDoorPhotos.add(new AddPhotoBean()); + mPlacePhotos.add(new AddPhotoBean()); + AddPhotoAdapter mDoorPhotoAdapter = new AddPhotoAdapter(this, mDoorPhotos); + mRlvDoor.setLayoutManager(new GridLayoutManager(mActivity, 4)); + mRlvDoor.setAdapter(mDoorPhotoAdapter); + //删除上传的相片 + mDoorPhotoAdapter.addOnDeleteListener(((bean, i) -> { + mDoorPhotoAdapter.removeItem(bean); + mDoorPhotoIds = mDoorPhotoIds.replace(bean.getId() + ",", ""); + })); + mDoorPhotoAdapter.addOnItemClickListener(bean -> { + if (TextUtils.isEmpty(bean.getPath())) { + //空数据 + showSelectPhoto(bean); + } else { + //预览 + ArrayList list = new ArrayList<>(); + list.add(bean.getPath()); + Intent intent = new Intent(); + intent.putExtra(PhotoActivity.TAG_IMGURL, list); + intent.setClass(EnterCompanyInfoActivity.this, PhotoActivity.class); + startActivity(intent); + } + }); + + AddPhotoAdapter mPlacePhotoAdapter = new AddPhotoAdapter(this, mPlacePhotos); + mRlvPlace.setLayoutManager(new GridLayoutManager(mActivity, 4)); + mRlvPlace.setAdapter(mPlacePhotoAdapter); + //删除上传的相片 + mPlacePhotoAdapter.addOnDeleteListener(((bean, i) -> { + mDoorPhotoAdapter.removeItem(bean); + mPlacePhotoIds = mPlacePhotoIds.replace(bean.getId() + ",", ""); + })); + mPlacePhotoAdapter.addOnItemClickListener(bean -> { + if (TextUtils.isEmpty(bean.getPath())) { + //空数据 + showSelectPhoto(bean); + } else { + //预览 + ArrayList list = new ArrayList<>(); + list.add(bean.getPath()); + Intent intent = new Intent(); + intent.putExtra(PhotoActivity.TAG_IMGURL, list); + intent.setClass(EnterCompanyInfoActivity.this, PhotoActivity.class); + startActivity(intent); + } + }); + } + + /** + * 显示选择图片 + * + * @param bean + */ + private void showSelectPhoto(AddPhotoBean bean) { + hideSoftKeyboard(); + ButtomDialogView buttomDialogView = new ButtomDialogView.DialogBuilder(mActivity) + .setIsBackCancelable(true) + .setIscancelable(true) + .setShowLocation(Gravity.BOTTOM) + .setIsShowFile(false) + .build(); + buttomDialogView.addOnChoseListener(new ButtomDialogView.OnChoseListener() { + @Override + public void choseFile() { + } + + @Override + public void choseAlbum() { + mCurrentBean = bean; + Intent intent = new Intent(Intent.ACTION_PICK, null); + intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, + "image/*"); + startActivityForResult(intent, BaseUrlApi.PHOTO_REQUEST); + buttomDialogView.dismiss(); + } + + @Override + public void choseShoot() { + mCurrentBean = bean; + mPicPath = PathConfig.CATCH_PATH + System.currentTimeMillis() + ".jpg"; + File file = new File(mPicPath); + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + // 下面这句指定调用相机拍照后的照片存储的路径 + Uri uri; + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { + uri = Uri.fromFile(file); + } else { + uri = FileProvider.getUriForFile(mActivity, ProiderUtil.getFileProviderName(mActivity), file); + } + intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); + startActivityForResult(intent, BaseUrlApi.CAMERA_REQUEST); + } + + @Override + public void loginOut() { + + } + + @Override + public void changePwd() { + + } + }); + buttomDialogView.show(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode == RESULT_OK) { + switch (requestCode) { + case BaseUrlApi.CAMERA_REQUEST://相机 + uploadImg(mPicPath, 1); + break; + case BaseUrlApi.PHOTO_REQUEST://相册 + try { + if (data == null) return; + Uri uri = data.getData(); + String[] proj = {MediaStore.Images.Media.DATA}; + Cursor cursor = managedQuery(uri, proj, null, null, null); + int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + String srcPath = cursor.getString(column_index); + uploadImg(srcPath, 2); + } catch (Exception e) { + e.printStackTrace(); + } + break; + } + } + super.onActivityResult(requestCode, resultCode, data); + } + + /** + * 上传文件 + * + * @param picPath + */ + private void uploadImg(String picPath, int src) { +// File file = new File(picPath); +// if (!file.exists()) { +// showToast("图片路径错误."); +// return; +// } +// ProgressDialog progressDialog = UIUtil.initDialog(mActivity, "正在上传..."); +// progressDialog.show(); +// Luban.with(mActivity) +// .load(picPath) +// .ignoreBy(100) +// .setTargetDir(PathConfig.CATCH_PATH) +// .filter(path -> !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif"))) +// .setCompressListener(new OnCompressListener() { +// @Override +// public void onStart() { +// +// } +// +// @Override +// public void onSuccess(File file) { +// RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); +// MultipartBody.Part body = MultipartBody.Part.createFormData("image", file.getName(), requestFile); +// RetrofitManager.getInstance() +// .create(LocationApiService.class) +// .uploadImage(body, UserLgUtils.getToken()) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(Disposable d) { +// +// } +// +// @Override +// public void onNext(BaseUserBean baseUserBean) { +// if (progressDialog != null && progressDialog.isShowing()) { +// progressDialog.dismiss(); +// } +// ToastUtils.showShort("上传成功"); +// mPhotoIds += (baseUserBean.getData() + ","); +// mCurrentBean.setId(baseUserBean.getData()); +// mCurrentBean.setPath(picPath); +// if (mPhotos.size() < 4) { +// mPhotos.add(new AddPhotoBean()); +// } +// mPhotoAdapter.notifyDataSetChanged(); +// mCurrentBean = null; +// } +// +// @Override +// public void onError(Throwable e) { +// if (progressDialog != null && progressDialog.isShowing()) { +// progressDialog.dismiss(); +// } +// ToastUtils.showShort("上传失败,请稍后重试."); +// if (file.exists()) { +// file.delete(); +// } +// } +// +// @Override +// public void onComplete() { +// +// } +// }); +// } +// +// @Override +// public void onError(Throwable e) { +// if (progressDialog.isShowing()) { +// progressDialog.dismiss(); +// } +// ToastUtils.showShort("图片上传失败,请稍后重试"); +// } +// }) +// .launch(); + } + @Override + protected void onDestroy() { + super.onDestroy(); + mBind.unbind(); + } + +} diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/issue/IssueCheckActivity.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/issue/IssueCheckActivity.java index f47a8d7..773d53e 100755 --- a/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/issue/IssueCheckActivity.java +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/issue/IssueCheckActivity.java @@ -149,15 +149,15 @@ public class IssueCheckActivity extends BaseActivity { * @param bean */ private void showDetail(IssueSubBean.RowsBean bean) { - Intent intent = new Intent(mActivity, IssueDetailActivity.class); - //待处理处理 - intent.putExtra("mine", "1"); - intent.putExtra("bean", bean); - if (bean.getCaseStatus().equals("4")) { - //待检查 - intent.putExtra("check", "1"); - } - startActivity(intent); +// Intent intent = new Intent(mActivity, IssueDetailActivity.class); +// //待处理处理 +// intent.putExtra("mine", "1"); +// intent.putExtra("bean", bean); +// if (bean.getCaseStatus().equals("4")) { +// //待检查 +// intent.putExtra("check", "1"); +// } +// startActivity(intent); } @Override diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/issue/IssueMineActivity.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/issue/IssueMineActivity.java index c6fb380..3e35a40 100755 --- a/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/issue/IssueMineActivity.java +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/issue/IssueMineActivity.java @@ -89,9 +89,9 @@ public class IssueMineActivity extends BaseActivity { * @param bean */ private void showDetail(IssueSubBean.RowsBean bean) { - Intent intent = new Intent(mActivity, IssueDetailActivity.class); - intent.putExtra("bean", bean); - startActivity(intent); +// Intent intent = new Intent(mActivity, IssueDetailActivity.class); +// intent.putExtra("bean", bean); +// startActivity(intent); } private void getMineDisList(int page) { diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/issue/IssueMineDisActivity.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/issue/IssueMineDisActivity.java index 7b99677..3721d30 100755 --- a/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/issue/IssueMineDisActivity.java +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/issue/IssueMineDisActivity.java @@ -87,10 +87,10 @@ public class IssueMineDisActivity extends BaseActivity { * @param bean */ private void showDetail(IssueSubBean.RowsBean bean) { - Intent intent = new Intent(IssueMineDisActivity.this, IssueDetailActivity.class); - intent.putExtra("mine", "1"); - intent.putExtra("bean", bean); - startActivity(intent); +// Intent intent = new Intent(IssueMineDisActivity.this, IssueDetailActivity.class); +// intent.putExtra("mine", "1"); +// intent.putExtra("bean", bean); +// startActivity(intent); } private void getMineDisList(int page) { diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/locus/LocusManagerActivity.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/locus/LocusManagerActivity.java index 2e3e640..306e43d 100755 --- a/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/locus/LocusManagerActivity.java +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/locus/LocusManagerActivity.java @@ -57,7 +57,7 @@ public class LocusManagerActivity extends BaseActivity { refreshView(STATE_LOAD_SUCCESS); mTvPublish.setVisibility(View.VISIBLE); mTvPublish.setText("个人"); - mTvPublish.setOnClickListener(v -> startActivity(new Intent(mActivity, LocusMapActivity.class))); +// mTvPublish.setOnClickListener(v -> startActivity(new Intent(mActivity, LocusMapActivity.class))); Gson gson = new Gson(); String loginInfo = UserLgUtils.getLoginInfo(); if (!TextUtils.isEmpty(loginInfo)) { diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/trouble/SelCompanyActivity.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/trouble/SelCompanyActivity.java new file mode 100644 index 0000000..524cda1 --- /dev/null +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/trouble/SelCompanyActivity.java @@ -0,0 +1,37 @@ +package com.sucstepsoft.txrealtimelocation.activitys.trouble; + +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; + +import com.sucstepsoft.cm_utils.core.widget.base.BaseActivity; +import com.sucstepsoft.txrealtimelocation.R; + +import butterknife.ButterKnife; +import butterknife.Unbinder; + +/** + * 选择企业 + */ +public class SelCompanyActivity extends BaseActivity { + + + private Unbinder mBind; + + @Override + protected int setLayoutId() { + return R.layout.activity_sel_company; + } + + @Override + public void initData() { + mBind = ButterKnife.bind(this); + mTvBaseTitle.setText("选择企业"); + refreshView(STATE_LOAD_SUCCESS); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mBind.unbind(); + } +} diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/trouble/TroubleReportActivity.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/trouble/TroubleReportActivity.java new file mode 100644 index 0000000..cb4b49b --- /dev/null +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/activitys/trouble/TroubleReportActivity.java @@ -0,0 +1,42 @@ +package com.sucstepsoft.txrealtimelocation.activitys.trouble; + +import android.content.Intent; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.widget.TextView; + +import com.sucstepsoft.cm_utils.core.widget.base.BaseActivity; +import com.sucstepsoft.txrealtimelocation.R; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.Unbinder; + +/** + * 隐患上报 + */ +public class TroubleReportActivity extends BaseActivity { + + @BindView(R.id.tv_sel_company) + TextView mTvSelCompany; + private Unbinder mBind; + + @Override + protected int setLayoutId() { + return R.layout.activity_trouble_report; + } + + @Override + public void initData() { + mBind = ButterKnife.bind(this); + refreshView(STATE_LOAD_SUCCESS); + mTvBaseTitle.setText("企业隐患上报"); + mTvSelCompany.setOnClickListener(v -> startActivity(new Intent(this, SelCompanyActivity.class))); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mBind.unbind(); + } +} diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/adapters/CompanyLibAdapter.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/adapters/CompanyLibAdapter.java new file mode 100644 index 0000000..0b8745c --- /dev/null +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/adapters/CompanyLibAdapter.java @@ -0,0 +1,35 @@ +package com.sucstepsoft.txrealtimelocation.adapters; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.sucstepsoft.cm_utils.core.widget.base.BaseRecyclerAdapter; +import com.sucstepsoft.txrealtimelocation.R; +import com.sucstepsoft.txrealtimelocation.adapters.holders.CompanyHolder; + +import java.util.List; + +/** + * 作者: adam + * 日期: 2020/3/29 - 14:43 + * 邮箱: itgaojian@163.com + * 描述: + */ +public class CompanyLibAdapter extends BaseRecyclerAdapter { + public CompanyLibAdapter(Context ctx, List list) { + super(ctx, list); + } + + @Override + public CompanyHolder createHolder(ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_company_lib, parent, false); + return new CompanyHolder(itemView); + } + + @Override + public void bindHolder(CompanyHolder companyHolder, int i) { + + } +} diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/adapters/holders/CompanyHolder.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/adapters/holders/CompanyHolder.java new file mode 100644 index 0000000..20f20e0 --- /dev/null +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/adapters/holders/CompanyHolder.java @@ -0,0 +1,21 @@ +package com.sucstepsoft.txrealtimelocation.adapters.holders; + +import android.support.annotation.NonNull; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.TextView; + +/** + * 作者: adam + * 日期: 2020/3/29 - 14:41 + * 邮箱: itgaojian@163.com + * 描述: 企业信息 + */ +public class CompanyHolder extends RecyclerView.ViewHolder { + public TextView mTvCompanyName; + public TextView mTvCompanyPeo; + + public CompanyHolder(@NonNull View itemView) { + super(itemView); + } +} diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/LocationChangBroadcastReceiver.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/LocationChangBroadcastReceiver.java index 8c084d4..889f926 100755 --- a/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/LocationChangBroadcastReceiver.java +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/LocationChangBroadcastReceiver.java @@ -4,10 +4,6 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import com.baidu.location.BDLocation; -import com.sucstepsoft.cm_utils.constant.PathConfig; -import com.sucstepsoft.txrealtimelocation.activitys.base.MainActivity; - import java.text.SimpleDateFormat; import java.util.Locale; @@ -20,23 +16,23 @@ public class LocationChangBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action.equals(RECEIVER_ACTION)) { - BDLocation location = (BDLocation) intent.getParcelableExtra(RECEIVER_DATA); - if (null != location) { - processCustomMessageA(context, location); - } - } +// String action = intent.getAction(); +// if (action.equals(RECEIVER_ACTION)) { +// BDLocation location = (BDLocation) intent.getParcelableExtra(RECEIVER_DATA); +// if (null != location) { +// processCustomMessageA(context, location); +// } +// } } - private void processCustomMessageA(Context context, BDLocation aMapLocation) { - if (MainActivity.isForeground) { - Intent msgIntent = new Intent(PathConfig.ACTION_LOCATION_MESSAGE); - if (aMapLocation != null) { - msgIntent.putExtra("data", aMapLocation); - } - context.sendBroadcast(msgIntent); - } - } +// private void processCustomMessageA(Context context, BDLocation aMapLocation) { +// if (MainActivity.isForeground) { +// Intent msgIntent = new Intent(PathConfig.ACTION_LOCATION_MESSAGE); +// if (aMapLocation != null) { +// msgIntent.putExtra("data", aMapLocation); +// } +// context.sendBroadcast(msgIntent); +// } +// } } diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/LocationService.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/LocationService.java index 5b69383..d2ce278 100755 --- a/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/LocationService.java +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/LocationService.java @@ -1,1326 +1,1330 @@ -package com.sucstepsoft.txrealtimelocation.services; - -import android.content.BroadcastReceiver; -import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; -import android.media.MediaPlayer; -import android.os.Build; -import android.text.TextUtils; - -import com.baidu.location.BDAbstractLocationListener; -import com.baidu.location.BDLocation; -import com.baidu.location.LocationClient; -import com.baidu.location.LocationClientOption; -import com.baidu.mapapi.model.LatLng; -import com.baidu.mapapi.utils.SpatialRelationUtil; -import com.cjt2325.cameralibrary.util.DeviceUtil; -import com.google.gson.Gson; -import com.sucstepsoft.cm_utils.constant.PathConfig; -import com.sucstepsoft.cm_utils.constant.TimeConstants; -import com.sucstepsoft.cm_utils.core.retrofit_net.RetrofitManager; -import com.sucstepsoft.cm_utils.core.widget.base.NotificationUtils; -import com.sucstepsoft.cm_utils.utils.AppUtils; -import com.sucstepsoft.cm_utils.utils.LogUtils; -import com.sucstepsoft.cm_utils.utils.TimeUtils; -import com.sucstepsoft.cm_utils.utils.UserLgUtils; -import com.sucstepsoft.txrealtimelocation.R; -import com.sucstepsoft.txrealtimelocation.beans.CheckSignBean; -import com.sucstepsoft.txrealtimelocation.beans.CheckSignOffBean; -import com.sucstepsoft.txrealtimelocation.beans.LocationPosition; -import com.sucstepsoft.txrealtimelocation.beans.PenLineBean; -import com.sucstepsoft.txrealtimelocation.beans.SignTimeBean; -import com.sucstepsoft.txrealtimelocation.beans.SuccessBean; -import com.sucstepsoft.txrealtimelocation.net.LocationApiService; -import com.sucstepsoft.txrealtimelocation.utils.GpsUtils; -import com.sucstepsoft.txrealtimelocation.utils.PointUtils; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.TimeUnit; - -import io.reactivex.Observable; -import io.reactivex.Observer; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; -import okhttp3.RequestBody; +import com.sucstepsoft.txrealtimelocation.services.NotificationService; +//package com.sucstepsoft.txrealtimelocation.services; +// +//import android.content.BroadcastReceiver; +//import android.content.Context; +//import android.content.Intent; +//import android.content.IntentFilter; +//import android.media.MediaPlayer; +//import android.os.Build; +//import android.text.TextUtils; +// +//import com.baidu.location.BDAbstractLocationListener; +//import com.baidu.location.BDLocation; +//import com.baidu.location.LocationClient; +//import com.baidu.location.LocationClientOption; +//import com.baidu.mapapi.model.LatLng; +//import com.baidu.mapapi.utils.SpatialRelationUtil; +//import com.cjt2325.cameralibrary.util.DeviceUtil; +//import com.google.gson.Gson; +//import com.sucstepsoft.cm_utils.constant.PathConfig; +//import com.sucstepsoft.cm_utils.constant.TimeConstants; +//import com.sucstepsoft.cm_utils.core.retrofit_net.RetrofitManager; +//import com.sucstepsoft.cm_utils.core.widget.base.NotificationUtils; +//import com.sucstepsoft.cm_utils.utils.AppUtils; +//import com.sucstepsoft.cm_utils.utils.LogUtils; +//import com.sucstepsoft.cm_utils.utils.TimeUtils; +//import com.sucstepsoft.cm_utils.utils.UserLgUtils; +//import com.sucstepsoft.txrealtimelocation.R; +//import com.sucstepsoft.txrealtimelocation.beans.CheckSignBean; +//import com.sucstepsoft.txrealtimelocation.beans.CheckSignOffBean; +//import com.sucstepsoft.txrealtimelocation.beans.LocationPosition; +//import com.sucstepsoft.txrealtimelocation.beans.PenLineBean; +//import com.sucstepsoft.txrealtimelocation.beans.SignTimeBean; +//import com.sucstepsoft.txrealtimelocation.beans.SuccessBean; +//import com.sucstepsoft.txrealtimelocation.net.LocationApiService; +//import com.sucstepsoft.txrealtimelocation.utils.GpsUtils; +//import com.sucstepsoft.txrealtimelocation.utils.PointUtils; +// +//import java.util.ArrayList; +//import java.util.Collections; +//import java.util.List; +//import java.util.concurrent.TimeUnit; +// +//import io.reactivex.Observable; +//import io.reactivex.Observer; +//import io.reactivex.android.schedulers.AndroidSchedulers; +//import io.reactivex.disposables.Disposable; +//import io.reactivex.schedulers.Schedulers; +//import okhttp3.RequestBody; +// +// public class LocationService extends NotificationService { - private IWifiAutoCloseDelegate mWifiAutoCloseDelegate = new WifiAutoCloseDelegate(); - private boolean mIsWifiCloseable = false; - private LocationClient mLocationClient; - private MediaPlayer mMediaPlayer; - private List mTempList = new ArrayList<>(); - private int mPrecision = 100;//定位精度 - private boolean isFirst = true; - private boolean isSaveLocal = false;//TODO 是否保存到本地 - private List> mPenLineList; - private BDLocation mCurrentLocation;//当前点 - private long mCurTime; - private long mUploadPointTime; - private int mCount = 1; - private boolean isUpload = false; - private Disposable mMTimeDis; - private boolean mIsHolday = false; - private int mUType = 2; //登录用户类型 //1是N员 2是片长 - private String mAmStartPunchTime = "08:30:00";//上午开始打卡时间 - private String mAmStartWorkTime = "09:30:00";//上午工作开始时间 - private String mAmEndWorkTime = "11:30:00";//上午工作结束时间 - private String mAmEndPunchTime = "12:30:00";//上午结束打卡时间 - private String mPmStartPunchTime = "13:30:00";//下午开始打卡时间 - private String mPmStartWorkTime = "14:30:00";//下午开始工作时间 - private String mPmEndWorkTime = "16:30:00";//下午结束工作时间 - private String mPmEndPunchTime = "17:30:00";//下午结束打卡时间 - private String mNStartPunchTime = "08:30:00";//N员开始打卡时间 - private String mNStartWorkTime = "10:00:00";//N员开始工作时间 - private String mNEndWorkTime = "17:00:00";//N员结束工作时间 - private String mNEndPunchTime = "18:00:00";//N员结束打开时间 - +// private IWifiAutoCloseDelegate mWifiAutoCloseDelegate = new WifiAutoCloseDelegate(); +// private boolean mIsWifiCloseable = false; +// private LocationClient mLocationClient; +// private MediaPlayer mMediaPlayer; +// private List mTempList = new ArrayList<>(); +// private int mPrecision = 100;//定位精度 +// private boolean isFirst = true; +// private boolean isSaveLocal = false;//TODO 是否保存到本地 +// private List> mPenLineList; +// private BDLocation mCurrentLocation;//当前点 +// private long mCurTime; +// private long mUploadPointTime; +// private int mCount = 1; +// private boolean isUpload = false; +// private Disposable mMTimeDis; +// private boolean mIsHolday = false; +// private int mUType = 2; //登录用户类型 //1是N员 2是片长 +// private String mAmStartPunchTime = "08:30:00";//上午开始打卡时间 +// private String mAmStartWorkTime = "09:30:00";//上午工作开始时间 +// private String mAmEndWorkTime = "11:30:00";//上午工作结束时间 +// private String mAmEndPunchTime = "12:30:00";//上午结束打卡时间 +// private String mPmStartPunchTime = "13:30:00";//下午开始打卡时间 +// private String mPmStartWorkTime = "14:30:00";//下午开始工作时间 +// private String mPmEndWorkTime = "16:30:00";//下午结束工作时间 +// private String mPmEndPunchTime = "17:30:00";//下午结束打卡时间 +// private String mNStartPunchTime = "08:30:00";//N员开始打卡时间 +// private String mNStartWorkTime = "10:00:00";//N员开始工作时间 +// private String mNEndWorkTime = "17:00:00";//N员结束工作时间 +// private String mNEndPunchTime = "18:00:00";//N员结束打开时间 +// @Override public int onStartCommand(Intent intent, int flags, int startId) { - super.onStartCommand(intent, flags, startId); - mMediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.no_kill); - mMediaPlayer.setLooping(true); - registerIsSendNogify(); - applyNotiKeepMech(); //开启利用notification提高进程优先级的机制 - startPlayMusic(); - if (mWifiAutoCloseDelegate.isUseful(getApplicationContext())) { - mIsWifiCloseable = true; - mWifiAutoCloseDelegate.initOnServiceStarted(getApplicationContext()); - } - LogUtils.e("开启了"); - mUploadPointTime = System.currentTimeMillis(); - registerTimeReceiver(); - saveFile(12); - startLocation(); - //TODO 开启Socket -// startSocket(); - //获取电子围栏数据 - getUserPenList(); - registerGpsState(); - //校验是否签到 - checkSign(); - registerUploadPointListener(); - registerSi(); -// registerSignStateListener(); +// super.onStartCommand(intent, flags, startId); +// mMediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.no_kill); +// mMediaPlayer.setLooping(true); +// registerIsSendNogify(); +// applyNotiKeepMech(); //开启利用notification提高进程优先级的机制 +// startPlayMusic(); +// if (mWifiAutoCloseDelegate.isUseful(getApplicationContext())) { +// mIsWifiCloseable = true; +// mWifiAutoCloseDelegate.initOnServiceStarted(getApplicationContext()); +// } +// LogUtils.e("开启了"); +// mUploadPointTime = System.currentTimeMillis(); +// registerTimeReceiver(); +// saveFile(12); +// startLocation(); +// //TODO 开启Socket +//// startSocket(); +// //获取电子围栏数据 +// getUserPenList(); +// registerGpsState(); +// //校验是否签到 +// checkSign(); +// registerUploadPointListener(); +// registerSi(); +//// registerSignStateListener(); return START_STICKY; } - - private void registerSignStateListener() { - Observable.interval(1, TimeUnit.MINUTES) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(Long aLong) { - int notifyType = getNotifyType(); - LogUtils.e(notifyType); - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onComplete() { - - } - }); - } - - private void registerTimeReceiver() { - PunchTimeReceiver receiver = new PunchTimeReceiver(); - IntentFilter filter = new IntentFilter(); - filter.addAction(PathConfig.ACTION_PUNCH_TIME_MESSAGE); - filter.addAction(PathConfig.ACTION_STOP_LOCATION); - filter.addAction(PathConfig.ACTION_START_LOCATION); - registerReceiver(receiver, filter); - } - - private void registerGpsState() { - Observable.interval(5, TimeUnit.SECONDS) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(Long aLong) { - checkGpsState(); - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onComplete() { - - } - }); - } - - private void registerSi() { - Observable.interval(50, TimeUnit.SECONDS) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(Long aLong) { - if (!mIsHolday) { - String chineseWeek = TimeUtils.getDayOfWeek(); - if (!TextUtils.isEmpty(chineseWeek) && !"六".equals(chineseWeek) && !"日".equals(chineseWeek)) { - getIsSign(); - } - } - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onComplete() { - - } - }); - } - - private static final int NOTIFY_TYPE_P_AM_SIGN_1 = 1221;//片长上午签到提前一分钟 - private static final int NOTIFY_TYPE_P_AM_SIGN_5 = 1222;//片长上午签到开始后五分钟 - private static final int NOTIFY_TYPE_P_AM_SIGN_OUT_1 = 1223;//片长上午签退提前一分钟 - private static final int NOTIFY_TYPE_P_AM_SIGN_OUT_5 = 1224;//片长上午签退开始后五分钟 - - private static final int NOTIFY_TYPE_P_PM_SIGN_1 = 1225;//片长下午签到提前一分钟 - private static final int NOTIFY_TYPE_P_PM_SIGN_5 = 1226;//片长下午签到开始后五分钟 - private static final int NOTIFY_TYPE_P_PM_SIGN_OUT_1 = 1227;//片长下午签退提前一分钟 - private static final int NOTIFY_TYPE_P_PM_SIGN_OUT_5 = 1228;//片长下午签退开始后五分钟 - - - private static final int NOTIFY_TYPE_N_SIGN_1 = 2321;//签到提前一分钟 - private static final int NOTIFY_TYPE_N_SIGN_5 = 2322;//签到开始后五分钟 - private static final int NOTIFY_TYPE_N_SIGN_OUT_1 = 2324;//签退开始前一分钟 - private static final int NOTIFY_TYPE_N_SIGN_OUT_5 = 2325;//签退开始后五分钟 - - - private int getNotifyType() { - //判断当前时间是开始打开前一分钟还是后五分钟 - int type = -1; - String nowHourMM = TimeUtils.getNowHourMM(); - LogUtils.e(nowHourMM); - if (mUType != 0) { - //判断是片长还是N员 - //1是N员 2是片长 - if (mUType == 1) { - //N员提醒 - String startTime = mNStartPunchTime; - String endTime = mNEndWorkTime; - String currentTimeOneSpan = TimeUtils.getCurrentTimeSpan(startTime, -1); - String curTimeFiveSpan = TimeUtils.getCurrentTimeSpan(startTime, 5); - String curEndTimeOneSpan = TimeUtils.getCurrentTimeSpan(endTime, -1); - String curEndTimeFiveSpan = TimeUtils.getCurrentTimeSpan(endTime, 5); - if (currentTimeOneSpan.equals(nowHourMM)) { - type = NOTIFY_TYPE_N_SIGN_1; - } - if (curTimeFiveSpan.equals(nowHourMM)) { - type = NOTIFY_TYPE_N_SIGN_5; - } - if (curEndTimeOneSpan.equals(nowHourMM)) { - type = NOTIFY_TYPE_N_SIGN_OUT_1; - } - if (curEndTimeFiveSpan.equals(nowHourMM)) { - type = NOTIFY_TYPE_N_SIGN_OUT_5; - } - } else { - String pAmStartTime = mAmStartPunchTime; - String pAmEndTime = mAmEndWorkTime; - String pPmStartTime = mPmStartPunchTime; - String pPmEndTime = mPmEndWorkTime; - String amStartTimeOne = TimeUtils.getCurrentTimeSpan(pAmStartTime, -1); - String amStartTimeFive = TimeUtils.getCurrentTimeSpan(pAmStartTime, 5); - String amEndTimeOne = TimeUtils.getCurrentTimeSpan(pAmEndTime, -1); - String amEndTimeFive = TimeUtils.getCurrentTimeSpan(pAmEndTime, 5); - - String pmStartTimeOne = TimeUtils.getCurrentTimeSpan(pPmStartTime, -1); - String pmStartTimeFive = TimeUtils.getCurrentTimeSpan(pPmStartTime, 5); - String pmEndTimeOne = TimeUtils.getCurrentTimeSpan(pPmEndTime, -1); - String pmEndTimeFive = TimeUtils.getCurrentTimeSpan(pPmEndTime, 5); - if (amStartTimeOne.equals(nowHourMM)) { - return NOTIFY_TYPE_P_AM_SIGN_1; - } - if (amStartTimeFive.equals(nowHourMM)) { - return NOTIFY_TYPE_P_AM_SIGN_5; - } - if (amEndTimeOne.equals(nowHourMM)) { - return NOTIFY_TYPE_P_AM_SIGN_OUT_1; - } - if (amEndTimeFive.equals(nowHourMM)) { - return NOTIFY_TYPE_P_AM_SIGN_OUT_5; - } - if (pmStartTimeOne.equals(nowHourMM)) { - return NOTIFY_TYPE_P_PM_SIGN_1; - } - if (pmStartTimeFive.equals(nowHourMM)) { - return NOTIFY_TYPE_P_PM_SIGN_5; - } - if (pmEndTimeOne.equals(nowHourMM)) { - return NOTIFY_TYPE_P_PM_SIGN_OUT_1; - } - if (pmEndTimeFive.equals(nowHourMM)) { - return NOTIFY_TYPE_P_PM_SIGN_OUT_5; - } - } - } - return type; - } - - private void getIsSign() { - String token = GlobalProvider.getString(LocationService.this, "token"); - if (!TextUtils.isEmpty(token)) { - RetrofitManager.getInstance() - .create(LocationApiService.class) - .checkSign(token) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(CheckSignBean checkSignBean) { - if (checkSignBean != null && !TextUtils.isEmpty(checkSignBean.getData().getIsSign())) { - boolean b = Boolean.parseBoolean(checkSignBean.getData().getIsSign()); - if (!b) { - String nowHourMM = TimeUtils.getNowHourMM(); - String userType = GlobalProvider.getString(LocationService.this, "userType", "P"); - if ("N".equals(userType)) { - //N员 - if (!TextUtils.isEmpty(nowHourMM)) { - if (!TextUtils.isEmpty(mNStartPunchTime)) { - String currentTime = TimeUtils.getCurrentTime(mNStartPunchTime); - if (nowHourMM.equals(currentTime)) { - sendNotifySignN(1); - } - } - } - } else { - if (!TextUtils.isEmpty(nowHourMM)) { - if (!TextUtils.isEmpty(mAmStartPunchTime)) { - String currentTime = TimeUtils.getCurrentTime(mAmStartPunchTime); - if (nowHourMM.equals(currentTime)) { - sendNotifySign(1); - } - } - if (!TextUtils.isEmpty(mPmStartPunchTime)) { - String currentTime = TimeUtils.getCurrentTime(mPmStartPunchTime); - if (nowHourMM.equals(currentTime)) { - sendNotifySign(3); - } - } - } - } - } else { - getIsSignOff(); - } - } - } - - @Override - public void onError(Throwable e) { - } - - @Override - public void onComplete() { - - } - }); - } - } - - private void getIsSignOff() { - String token = GlobalProvider.getString(LocationService.this, "token"); - if (!TextUtils.isEmpty(token)) { - RetrofitManager.getInstance() - .create(LocationApiService.class) - .checkSignOff(UserLgUtils.getToken()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(CheckSignOffBean checkSignBean) { - if (checkSignBean != null && !TextUtils.isEmpty(checkSignBean.getData())) { - boolean b = Boolean.parseBoolean(checkSignBean.getData()); - if (!b) { - String nowHourMM = TimeUtils.getNowHourMM(); - String userType = GlobalProvider.getString(LocationService.this, "userType", "P"); - if ("N".equals(userType)) { - //N员 - String currentTime = TimeUtils.getCurrentTime(mNEndWorkTime); - if (!TextUtils.isEmpty(nowHourMM)) { - if (nowHourMM.equals(currentTime)) { - sendNotifySignN(2); - } - } - } else { - //片长 - if (!TextUtils.isEmpty(mAmEndWorkTime)) { - String currentTime = TimeUtils.getCurrentTime(mAmEndWorkTime); - if (nowHourMM.equals(currentTime)) { - sendNotifySign(2); - } - } - if (!TextUtils.isEmpty(mPmEndWorkTime)) { - String currentTime = TimeUtils.getCurrentTime(mPmEndWorkTime); - if (nowHourMM.equals(currentTime)) { - sendNotifySign(4); - } - } - } - } - } - } - - @Override - public void onError(Throwable e) { - } - - @Override - public void onComplete() { - - } - }); - } - } - - private void registerIsSendNogify() { - Observable.interval(50, TimeUnit.SECONDS) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(Long aLong) { - String isHolday = GlobalProvider.getString(LocationService.this, "isHolday", ""); - if (!TextUtils.isEmpty(isHolday)) { - if ("1".equals(isHolday)) { - mIsHolday = true; - } else { - mIsHolday = false; - } - } else { - mIsHolday = false; - } - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onComplete() { - - } - }); - - } - - /** - * 发送N员通知 - * - * @param i - */ - private void sendNotifySignN(int i) { - NotificationUtils utils = new NotificationUtils(LocationService.this); - String title = ""; - String content = ""; - switch (i) { - case 1: - title = "签到提醒"; - content = "请在" + mNStartPunchTime + "-" + mNStartWorkTime + "进行签到"; - break; - case 2: - title = "签退提醒"; - content = "请在" + mNEndWorkTime + "-" + mNEndPunchTime + "进行签退"; - break; - } - utils.sendNotification(666, title, content); - } - - private void sendNotifySign(int i) { - NotificationUtils utils = new NotificationUtils(LocationService.this); - String title = ""; - String content = ""; - switch (i) { - case 1: - title = "签到提醒"; - content = "请在" + mAmStartPunchTime + "-" + mAmStartWorkTime + "进行上午签到"; - break; - case 2: - title = "签退提醒"; - content = "请在" + mAmEndWorkTime + "-" + mAmEndPunchTime + "进行上午签退"; - break; - case 3: - title = "签到提醒"; - content = "请在" + mPmStartPunchTime + "-" + mPmStartWorkTime + "进行下午签到"; - break; - case 4: - title = "签退提醒"; - content = "请在" + mPmEndWorkTime + "-" + mPmEndPunchTime + "进行下午签退"; - break; - } - utils.sendNotification(555, title, content); - } - - private void registerUploadPointListener() { - Observable.interval(1, 1, TimeUnit.MINUTES) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(Long aLong) { - if (mUploadPointTime != 0) { - long timeSpan = TimeUtils.getTimeSpan(System.currentTimeMillis(), mUploadPointTime, TimeConstants.MIN); - if (timeSpan >= 9) { - if (!mIsHolday) { - String chineseWeek = TimeUtils.getDayOfWeek(); - if (!TextUtils.isEmpty(chineseWeek) && !"六".equals(chineseWeek) && !"日".equals(chineseWeek)) { - mUploadPointTime = System.currentTimeMillis(); - String nowHour = TimeUtils.getNowHour(); - if (TimeUtils.isInTime("08:30-12:30", nowHour) || TimeUtils.isInTime("13:30-17:30", nowHour)) { - if (canUpload()) { - startLocation(); - } - NotificationUtils utils = new NotificationUtils(LocationService.this); - utils.sendNotification(45, "应急管理", "您已较长时间未上传定位信息,可能当前位置信号弱,请检查GPS和数据开关设置或者移动到开阔位置."); - } - } - } - } - } - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onComplete() { - - } - }); - } - - //保存 - private void saveFile(int i) { - if (i == 12) { - String start = "定位服务已经开启:" + GlobalProvider.getString(LocationService.this, "token") + "手机参数:" + DeviceUtil.getDeviceInfo() + "App版本:" + AppUtils.getAppVersionName(); - Utils.saveFile(start, "testLocation.txt", true); - } else { - String end = "定位服务关闭"; - Utils.saveFile(end, "testLocation.txt", true); - } - } - - /** - * 获取当前时间 - */ - private void checkSign() { - Observable.interval(0, 5, TimeUnit.MINUTES) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - mMTimeDis = d; - } - - @Override - public void onNext(Long aLong) { - checkIsSign(); - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onComplete() { - - } - }); - } - - /** - * 校验是否签到 - */ - private void checkIsSign() { - String token = GlobalProvider.getString(LocationService.this, "token"); - if (!TextUtils.isEmpty(token)) { - RetrofitManager.getInstance() - .create(LocationApiService.class) - .checkSign(token) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(CheckSignBean checkSignBean) { - if (checkSignBean != null && !TextUtils.isEmpty(checkSignBean.getData().getIsSign())) { - boolean b = Boolean.parseBoolean(checkSignBean.getData().getIsSign()); - if (b) { - //已经签到 - checkSignOff(); - } else { - //未签到 - if (!mIsHolday) { - String chineseWeek = TimeUtils.getDayOfWeek(); - if (!TextUtils.isEmpty(chineseWeek) && !"六".equals(chineseWeek) && !"日".equals(chineseWeek)) { - String nowHourMM = TimeUtils.getNowHourMM(); - String userType = GlobalProvider.getString(LocationService.this, "userType", "P"); - if ("N".equals(userType)) { - //N员 - String nStartPunchTime = mNStartPunchTime; - String nStartWorkTime = mNStartWorkTime; - if (TimeUtils.isInTime(nStartPunchTime + "-" + nStartWorkTime, nowHourMM)) { - sendNotif(1); - } - } else { - //片长 - String amStartPunchTime = mAmStartPunchTime; - String amStartWorkTime = mAmStartWorkTime; - String pmStartPunchTime = mPmStartPunchTime; - String pmStartWorkTime = mPmStartWorkTime; - if (TimeUtils.isInTime(amStartPunchTime + "-" + amStartWorkTime, nowHourMM) || TimeUtils.isInTime(pmStartPunchTime + "-" + pmStartWorkTime, nowHourMM)) { - sendNotif(1); - } - } - } - } - } - } - } - - @Override - public void onError(Throwable e) { - } - - @Override - public void onComplete() { - - } - }); - } - } - - //发送签提醒 - private void sendNotif(int i) { - if (!mIsHolday) { - if (isWeek()) { - NotificationUtils utils = new NotificationUtils(LocationService.this); - if (i == 1) { - utils.sendNotification(23, "签到提醒", "当前未签到,请进行签到."); - } else { - utils.sendNotification(23, "签退提醒", "当前未签退,请进行签退."); - } - } - } - } - - private boolean isWeek() { - String chineseWeek = TimeUtils.getDayOfWeek(); - if (!TextUtils.isEmpty(chineseWeek) && !"六".equals(chineseWeek) && !"日".equals(chineseWeek)) { - return true; - } else { - return false; - } - } - - private void checkGpsState() { - boolean oPen = GpsUtils.isOPen(LocationService.this); - if (!oPen) { - if (!mIsHolday) { - String nowHour = TimeUtils.getNowHour(); - if (isWeek()) { - if (TimeUtils.isInTime("08:30-12:30", nowHour) || TimeUtils.isInTime("13:30-17:30", nowHour)) { - NotificationUtils utils = new NotificationUtils(LocationService.this); - utils.sendNotification(55, "GPS提醒", "当前GPS已关闭,请前往设置页面进行开启."); - } - } - } - } - } - - /** - * 校验是否签退 - */ - private void checkSignOff() { - String token = GlobalProvider.getString(LocationService.this, "token", ""); - if (!TextUtils.isEmpty(token)) { - RetrofitManager.getInstance() - .create(LocationApiService.class) - .checkSignOff(token) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(CheckSignOffBean checkSignBean) { - if (checkSignBean != null && !TextUtils.isEmpty(checkSignBean.getData())) { - boolean b = Boolean.parseBoolean(checkSignBean.getData()); - if (b) { - //已经签退 - } else { - //没有签退 - if (!mIsHolday) { - String nowHourMM = TimeUtils.getNowHour(); - //时间段在12点与13点半之间或者17点与19点之间,提示签退 - String chineseWeek = TimeUtils.getDayOfWeek(); - if (!TextUtils.isEmpty(chineseWeek) && !"六".equals(chineseWeek) && !"日".equals(chineseWeek)) { - String userType = GlobalProvider.getString(LocationService.this, "userType", "P"); - if ("N".equals(userType)) { - //N员 - String nEndWorkTime = mNEndWorkTime;//GlobalProvider.getString(LocationService.this, "nEndWorkTime", "17:00:00"); - String nEndPunchTime = mNEndPunchTime;//GlobalProvider.getString(LocationService.this, "nEndPunchTime", "18:00:00"); - if (TimeUtils.isInTime(nEndWorkTime + "-" + nEndPunchTime, nowHourMM)) { - sendNotif(23); - } - } else { - //片长 - String amEndWorkTime = mAmEndWorkTime;//GlobalProvider.getString(LocationService.this, "amEndWorkTime", "11:30:00"); - String amEndPunchTime = mAmEndPunchTime; //GlobalProvider.getString(LocationService.this, "amEndPunchTime", "12:30:00"); - String pmEndWorkTime = mPmEndWorkTime;// GlobalProvider.getString(LocationService.this, "pmEndWorkTime", "16:30:00"); - String pmEndPunchTime = mPmEndPunchTime;// GlobalProvider.getString(LocationService.this, "pmEndPunchTime", "17:30:00"); - if (TimeUtils.isInTime(amEndWorkTime + "-" + amEndPunchTime, nowHourMM) || TimeUtils.isInTime(pmEndWorkTime + "-" + pmEndPunchTime, nowHourMM)) { - sendNotif(23); - } - } - } - } - } - } - } - - @Override - public void onError(Throwable e) { - } - - @Override - public void onComplete() { - - } - }); - } - - } - - - /** - * 电子围栏数据 - */ - private void getUserPenList() { - String token = GlobalProvider.getString(LocationService.this, "token"); - if (!TextUtils.isEmpty(token)) { - RetrofitManager.getInstance() - .create(LocationApiService.class) - .getUserPenList(token) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer>() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(List penLineBeans) { - if (penLineBeans != null && penLineBeans.size() > 0) { - buildPenList(penLineBeans); - } - } - - @Override - public void onError(Throwable e) { -// ToastUtils.showShort("获取围栏数据失败,请稍后重试"); - } - - @Override - public void onComplete() { - - } - }); - } - - } - - private void buildPenList(List penLineBeans) { - mPenLineList = new ArrayList<>(); - for (int i = 0; i < penLineBeans.size(); i++) { - List areaPoints = penLineBeans.get(i).getAreaPoints(); - if (areaPoints != null && areaPoints.size() > 0) { - List tempList = new ArrayList<>(); - for (int j = 0; j < areaPoints.size(); j++) { - LatLng latLng = new LatLng(Double.parseDouble(areaPoints.get(j).getLatitude()), Double.parseDouble(areaPoints.get(j).getLongitude())); - tempList.add(latLng); - } - LatLng latLng = new LatLng(Double.parseDouble(areaPoints.get(0).getLatitude()), Double.parseDouble(areaPoints.get(0).getLongitude())); - tempList.add(latLng); - mPenLineList.add(tempList); - } - } - } - - private void startPlayMusic() { - new Thread(() -> startPlaySong()).start(); - } - - private void startPlaySong() { - if (mMediaPlayer == null) { - mMediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.no_kill); - mMediaPlayer.start(); - } else { - mMediaPlayer.start(); - } - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - if (mMediaPlayer != null) { - mMediaPlayer.pause(); - } - } - - @Override - public void onDestroy() { - saveFile(13); - unApplyNotiKeepMech(); - stopLocation(); - stopPlaySong(); - if (mMTimeDis != null && !mMTimeDis.isDisposed()) { - mMTimeDis.dispose(); - } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - startForegroundService(new Intent(getApplicationContext(), LocationService.class)); - } else { - startService(new Intent(getApplicationContext(), LocationService.class)); - } - super.onDestroy(); - } - - private void stopPlaySong() { - if (mMediaPlayer != null) { - mMediaPlayer.pause(); - mMediaPlayer.stop(); - mMediaPlayer.release(); - mMediaPlayer = null; - } - } - - private class MyLocationListener extends BDAbstractLocationListener { - - @Override - public void onReceiveLocation(BDLocation bdLocation) { - if (bdLocation != null && bdLocation.getLatitude() != 0 && bdLocation.getLongitude() != 0) { - if (bdLocation.getLongitude() != Double.MIN_VALUE && bdLocation.getLongitude() != Double.MIN_VALUE) { - checkPointIs(bdLocation); - sendLocationBroadcast(bdLocation); - mWifiAutoCloseDelegate.onLocateSuccess(getApplicationContext(), PowerManagerUtil.getInstance().isScreenOn(getApplicationContext()), NetUtil.getInstance().isMobileAva(getApplicationContext())); - } - } else { - mWifiAutoCloseDelegate.onLocateFail(getApplicationContext(), 10, PowerManagerUtil.getInstance().isScreenOn(getApplicationContext()), NetUtil.getInstance().isWifiCon(getApplicationContext())); - } - } - - private void sendLocationBroadcast(BDLocation bdLocation) { - if (null != bdLocation) { - if (checkSinglePoint(bdLocation)) { - if (mTempList.size() >= 25) { - checkPoints(); - } else { - mTempList.add(bdLocation); - } - } - } - } - } - - private void checkPointIs(BDLocation bdLocation) { - if (PathConfig.CITY_CODE_DEFAULT.equals(bdLocation.getCityCode()) && bdLocation.getRadius() <= 300) { - Intent mIntent = new Intent(PathConfig.ACTION_LOCATION_MESSAGE); - mIntent.putExtra("data", bdLocation); - sendBroadcast(mIntent); -// LatLng latLng1 = new LatLng(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude()); -// LatLng latLng2 = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude()); -// boolean circleContainsPoint = SpatialRelationUtil.isCircleContainsPoint(latLng1, 50, latLng2); -// if (circleContainsPoint) { // -// } - } - } - - /** - * 校验定位点的合法性 - * - * @param bdLocation - * @return - */ - private boolean checkSinglePoint(BDLocation bdLocation) { - boolean isLegal = false; - if (isFirst) { - if (PathConfig.CITY_CODE_DEFAULT.equals(bdLocation.getCityCode())) { - isLegal = true; - } else { - isLegal = false; - } - } else { - if (PathConfig.CITY_CODE_DEFAULT.equals(bdLocation.getCityCode()) && bdLocation.getRadius() <= mPrecision) { - if (mCurrentLocation != null) { - LatLng latLng1 = new LatLng(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude()); - LatLng latLng2 = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude()); - boolean circleContainsPoint = SpatialRelationUtil.isCircleContainsPoint(latLng1, 50, latLng2); - if (circleContainsPoint) { - mCurrentLocation = bdLocation; - isLegal = true; - } else { - isLegal = false; - } - } else { - mCurrentLocation = bdLocation; - isLegal = true; - } - } else { - isLegal = false; - } - } - return isLegal; - } - - /** - * 根据定位精度取最小精度 - */ - private void checkPoints() { - Collections.sort(mTempList, (o1, o2) -> { - if (o1.getRadius() > o2.getRadius()) { - return 1; - } else if (o1.getRadius() < o2.getRadius()) { - return -1; - } else { - return 0; - } - }); - buildUploadPoint(); - } - - /** - * 存在网络上传 - */ - private void buildUploadPoint() { - isFirst = false; - if (mTempList.size() > 0) { - if (NetUtil.getInstance().isNetworkConnected(getApplicationContext())) { - LocationPosition position = new LocationPosition(); - position.setUserLatitude(mTempList.get(0).getLatitude() + ""); - position.setUserLongitude(mTempList.get(0).getLongitude() + ""); - position.setUserLocation(mTempList.get(0).getAddress().address); - position.setUserSpeed(mTempList.get(0).getSpeed() + ""); - Gson gson = new Gson(); - String s = gson.toJson(position); - uploadLocation(s); - checkCurrenPointIsBeyond(mTempList.get(0)); - } else { - //TODO 无网络状态下是否保存 - if (isSaveLocal) { - String textPoint = "{\"userLongitude\":" + mTempList.get(0).getLongitude() + ",\"userLatitude\":" + mTempList.get(0).getLatitude() + ",\"userLocation\":\"" + mTempList.get(0).getAddrStr() + "\",\"createTime\":\"" + Utils.formatUTC(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss") + "\"}"; - Utils.saveFile(textPoint, "testLocation.txt", true); - } - } - } - } - - /** - * 是否在片区内 - * - * @param cur - * @return true 在片区内 false 不在片区内 - */ - private boolean isBeyond(LatLng cur) { - boolean isBeyond = false; - for (int i = 0; i < mPenLineList.size(); i++) { - boolean inPolygon = PointUtils.isInPolygon(cur, mPenLineList.get(i)); - if (inPolygon) { - isBeyond = true; - break; - } - } - return isBeyond; - } - - /** - * 判断是否越界 - * - * @param bdLocation - */ - private void checkCurrenPointIsBeyond(BDLocation bdLocation) { - if (!mIsHolday) { - String chineseWeek = TimeUtils.getDayOfWeek(); - if (!TextUtils.isEmpty(chineseWeek) && !"六".equals(chineseWeek) && !"日".equals(chineseWeek)) { - if (mPenLineList != null && mPenLineList.size() > 0) { - LatLng latLng = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude()); - boolean isByond = isBeyond(latLng); - if (!isByond) { - //越界了 - if (mCount > 3) { - if (mCurTime != 0) { - long timeSpan = TimeUtils.getTimeSpan(System.currentTimeMillis(), mCurTime, TimeConstants.MIN); - if (timeSpan > 30) { - String nowHour = TimeUtils.getNowHourMM(); - if (TimeUtils.isInTime("09:00-12:10", nowHour) || TimeUtils.isInTime("13:30-17:00", nowHour)) { - NotificationUtils utils = new NotificationUtils(LocationService.this); - utils.sendNotification("越界提醒", "你当前位置超过了所监管区域"); - } - mCurTime = TimeUtils.getNowMills(); - } - } else { - mCurTime = TimeUtils.getNowMills(); - } - } else { - ++mCount; - String nowHour = TimeUtils.getNowHourMM(); - if (TimeUtils.isInTime("09:00-12:10", nowHour) || TimeUtils.isInTime("13:30-17:00", nowHour)) { - NotificationUtils utils = new NotificationUtils(LocationService.this); - utils.sendNotification("越界提醒", "你当前位置超过了所监管区域"); - } - } - } - } - } - } - } - - private boolean canUpload() { - String nowHourMM = TimeUtils.getNowHourMM(); - String upStart = mAmStartPunchTime; - String upEnd = mNEndPunchTime; - boolean isup = TimeUtils.isInTime(upStart + "-" + upEnd, nowHourMM); - return isup; - } - - /** - * 上传数据 - * - * @param points - */ - private void uploadLocation(String points) { - isFirst = false; - String token = GlobalProvider.getString(LocationService.this, "token"); - if (!TextUtils.isEmpty(token)) { - if (isUpload) { - mCurrentLocation = null; - mTempList.clear(); - } else { - boolean canUp = canUpload(); - if (canUp) { - isUpload = true; - RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), points); - RetrofitManager.getInstance() - .create(LocationApiService.class) - .saveLocationData(body, token) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(SuccessBean successBean) { - isUpload = false; - mCurrentLocation = null; - mTempList.clear(); - mUploadPointTime = System.currentTimeMillis(); - Intent intent = new Intent(); - intent.setAction("com.sucstepsoft.realtimelocation.isonlone"); - intent.putExtra("uploadTime", mUploadPointTime + ""); - sendBroadcast(intent); - } - - @Override - public void onError(Throwable e) { - isUpload = false; - mCurrentLocation = null; - mTempList.clear(); - e.printStackTrace(); - } - - @Override - public void onComplete() { - - } - }); - } else { - mTempList.clear(); - } - } - } - } - - - /** - * 配置定位参数 - */ - private void startLocation() { - stopLocation(); - mLocationClient = new LocationClient(getApplicationContext()); - //声明LocationClient类实例并配置定位参数 - LocationClientOption locationOption = new LocationClientOption(); - MyLocationListener myLocationListener = new MyLocationListener(); - //注册监听函数 - mLocationClient.registerLocationListener(myLocationListener); - //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 - locationOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); - //可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll; - locationOption.setCoorType("bd09ll"); - //可选,默认0,即仅定位一次,设置发起连续定位请求的间隔需要大于等于1000ms才是有效的 - locationOption.setScanSpan(5000); - //可选,设置是否需要地址信息,默认不需要 - locationOption.setIsNeedAddress(true); - //设置是否运行模拟GPS -// locationOption.setEnableSimulateGps(false); - //可选,设置是否需要设备方向结果 - locationOption.setNeedDeviceDirect(false); - //可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果 - locationOption.setLocationNotify(true); - //可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死 - locationOption.setIgnoreKillProcess(true); - //可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近” - locationOption.setIsNeedLocationDescribe(true); - //可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到 - locationOption.setIsNeedLocationPoiList(true); - //可选,默认false,设置是否收集CRASH信息,默认收集 - locationOption.SetIgnoreCacheException(false); - //可选,默认false,设置是否开启Gps定位 - locationOption.setOpenGps(true); - //可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用 - locationOption.setIsNeedAltitude(false); - //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者,该模式下开发者无需再关心定位间隔是多少,定位SDK本身发现位置变化就会及时回调给开发者 -// locationOption.setOpenAutoNotifyMode(); - //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者 -// locationOption.setOpenAutoNotifyMode(3000, 1, LocationClientOption.LOC_SENSITIVITY_HIGHT); - //需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用 - mLocationClient.setLocOption(locationOption); - //开始定位 - mLocationClient.start(); - } - - void stopLocation() { - if (null != mLocationClient) { - mLocationClient.stop(); - } - } - - - /** - * 签到时间改变 - */ - private class PunchTimeReceiver extends BroadcastReceiver { - - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (PathConfig.ACTION_PUNCH_TIME_MESSAGE.equals(action)) { - SignTimeBean timeBean = (SignTimeBean) intent.getSerializableExtra("timeBean"); - mUType = intent.getIntExtra("uType", 2); - if (timeBean != null) { - mAmStartPunchTime = timeBean.getAmStartPunchTime();//上午开始打卡时间 - mAmStartWorkTime = timeBean.getAmStartWorkTime();//"09:30:00";//上午工作开始时间 - mAmEndWorkTime = timeBean.getAmEndWorkTime();//"11:30:00";//上午工作结束时间 - mAmEndPunchTime = timeBean.getAmEndPunchTime();//"12:30:00";//上午结束打卡时间 - mPmStartPunchTime = timeBean.getPmStartPunchTime();//"13:30:00";//下午开始打卡时间 - mPmStartWorkTime = timeBean.getPmStartWorkTime();//"14:30:00";//下午开始工作时间 - mPmEndWorkTime = timeBean.getPmEndWorkTime();//"16:30:00";//下午结束工作时间 - mPmEndPunchTime = timeBean.getPmEndPunchTime();//"17:30:00";//下午结束打卡时间 - mNStartPunchTime = timeBean.getNStartPunchTime();//"08:30:00";//N员开始打卡时间 - mNStartWorkTime = timeBean.getNStartWorkTime();//"10:00:00";//N员开始工作时间 - mNEndWorkTime = timeBean.getNEndWorkTime();// "17:00:00";//N员结束工作时间 - mNEndPunchTime = timeBean.getNEndPunchTime();// "18:00:00";//N员结束打开时间 - } - } else if (PathConfig.ACTION_STOP_LOCATION.equals(action)) { - startLocation(); - } else if (PathConfig.ACTION_START_LOCATION.equals(action)) { - startLocation(); - } - } - } -// 109.91829190601483 40.59518382351867 -// 109.91825597379443 40.59669718527541 -// 109.92120480199132 40.596745087745845 -// 109.92360987463378 40.596796480184544 -// 109.92366826449192 40.59486540000251 -// 109.9212017140661 40.59484141029425 -// 109.9197561439961 40.59517012777953 - -// private SocketActionAdapter socketListener = new SocketActionAdapter() { -// //当Socket连接建立成功后 -// @Override -// public void onSocketConnectionSuccess(ConnectionInfo info, String action) { -// LogUtils.e("当Socket连接建立成功后==" + action); -// mManager.send(new HandShakeBean()); -// mManager.getPulseManager().setPulseSendable(new PulseBean()); -// } +// private void registerSignStateListener() { +// Observable.interval(1, TimeUnit.MINUTES) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(Disposable d) { // -// //Socket断开后进行的回调 -// @Override -// public void onSocketDisconnection(ConnectionInfo info, String action, Exception e) { -// LogUtils.e("Socket断开后进行的回调==" + action); -// } +// } // -// //当Socket连接失败时会进行回调 -// @Override -// public void onSocketConnectionFailed(ConnectionInfo info, String action, Exception e) { -// LogUtils.e("当Socket连接失败时会进行回调==" + action); -// } +// @Override +// public void onNext(Long aLong) { +// int notifyType = getNotifyType(); +// LogUtils.e(notifyType); +// } // -// //Socket通讯从服务器读取到消息后的响应 -// @Override -// public void onSocketReadResponse(ConnectionInfo info, String action, OriginalData data) { -// LogUtils.e("Socket通讯从服务器读取到消息后的响应==" + action); -// String str = new String(data.getBodyBytes(), Charset.forName("utf-8")); -// JsonObject jsonObject = new JsonParser().parse(str).getAsJsonObject(); -// int cmd = jsonObject.get("cmd").getAsInt(); -// if (cmd == 54) {//登陆成功 -// String handshake = jsonObject.get("handshake").getAsString(); -// } else if (cmd == 57) {//切换,重定向.(暂时无法演示,如有疑问请咨询github) -// LogUtils.e("=====重定向===="); -// } else if (cmd == 14) {//心跳 -// mManager.getPulseManager().feed(); -// LogUtils.e("心跳包发送"); +// @Override +// public void onError(Throwable e) { +// +// } +// +// @Override +// public void onComplete() { +// +// } +// }); +// } +// +// private void registerTimeReceiver() { +// PunchTimeReceiver receiver = new PunchTimeReceiver(); +// IntentFilter filter = new IntentFilter(); +// filter.addAction(PathConfig.ACTION_PUNCH_TIME_MESSAGE); +// filter.addAction(PathConfig.ACTION_STOP_LOCATION); +// filter.addAction(PathConfig.ACTION_START_LOCATION); +// registerReceiver(receiver, filter); +// } +// +// private void registerGpsState() { +// Observable.interval(5, TimeUnit.SECONDS) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(Disposable d) { +// +// } +// +// @Override +// public void onNext(Long aLong) { +// checkGpsState(); +// } +// +// @Override +// public void onError(Throwable e) { +// +// } +// +// @Override +// public void onComplete() { +// +// } +// }); +// } +// +// private void registerSi() { +// Observable.interval(50, TimeUnit.SECONDS) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(Disposable d) { +// +// } +// +// @Override +// public void onNext(Long aLong) { +// if (!mIsHolday) { +// String chineseWeek = TimeUtils.getDayOfWeek(); +// if (!TextUtils.isEmpty(chineseWeek) && !"六".equals(chineseWeek) && !"日".equals(chineseWeek)) { +// getIsSign(); +// } +// } +// } +// +// @Override +// public void onError(Throwable e) { +// +// } +// +// @Override +// public void onComplete() { +// +// } +// }); +// } +// +// private static final int NOTIFY_TYPE_P_AM_SIGN_1 = 1221;//片长上午签到提前一分钟 +// private static final int NOTIFY_TYPE_P_AM_SIGN_5 = 1222;//片长上午签到开始后五分钟 +// private static final int NOTIFY_TYPE_P_AM_SIGN_OUT_1 = 1223;//片长上午签退提前一分钟 +// private static final int NOTIFY_TYPE_P_AM_SIGN_OUT_5 = 1224;//片长上午签退开始后五分钟 +// +// private static final int NOTIFY_TYPE_P_PM_SIGN_1 = 1225;//片长下午签到提前一分钟 +// private static final int NOTIFY_TYPE_P_PM_SIGN_5 = 1226;//片长下午签到开始后五分钟 +// private static final int NOTIFY_TYPE_P_PM_SIGN_OUT_1 = 1227;//片长下午签退提前一分钟 +// private static final int NOTIFY_TYPE_P_PM_SIGN_OUT_5 = 1228;//片长下午签退开始后五分钟 +// +// +// private static final int NOTIFY_TYPE_N_SIGN_1 = 2321;//签到提前一分钟 +// private static final int NOTIFY_TYPE_N_SIGN_5 = 2322;//签到开始后五分钟 +// private static final int NOTIFY_TYPE_N_SIGN_OUT_1 = 2324;//签退开始前一分钟 +// private static final int NOTIFY_TYPE_N_SIGN_OUT_5 = 2325;//签退开始后五分钟 +// +// +// private int getNotifyType() { +// //判断当前时间是开始打开前一分钟还是后五分钟 +// int type = -1; +// String nowHourMM = TimeUtils.getNowHourMM(); +// LogUtils.e(nowHourMM); +// if (mUType != 0) { +// //判断是片长还是N员 +// //1是N员 2是片长 +// if (mUType == 1) { +// //N员提醒 +// String startTime = mNStartPunchTime; +// String endTime = mNEndWorkTime; +// String currentTimeOneSpan = TimeUtils.getCurrentTimeSpan(startTime, -1); +// String curTimeFiveSpan = TimeUtils.getCurrentTimeSpan(startTime, 5); +// String curEndTimeOneSpan = TimeUtils.getCurrentTimeSpan(endTime, -1); +// String curEndTimeFiveSpan = TimeUtils.getCurrentTimeSpan(endTime, 5); +// if (currentTimeOneSpan.equals(nowHourMM)) { +// type = NOTIFY_TYPE_N_SIGN_1; +// } +// if (curTimeFiveSpan.equals(nowHourMM)) { +// type = NOTIFY_TYPE_N_SIGN_5; +// } +// if (curEndTimeOneSpan.equals(nowHourMM)) { +// type = NOTIFY_TYPE_N_SIGN_OUT_1; +// } +// if (curEndTimeFiveSpan.equals(nowHourMM)) { +// type = NOTIFY_TYPE_N_SIGN_OUT_5; +// } // } else { +// String pAmStartTime = mAmStartPunchTime; +// String pAmEndTime = mAmEndWorkTime; +// String pPmStartTime = mPmStartPunchTime; +// String pPmEndTime = mPmEndWorkTime; +// String amStartTimeOne = TimeUtils.getCurrentTimeSpan(pAmStartTime, -1); +// String amStartTimeFive = TimeUtils.getCurrentTimeSpan(pAmStartTime, 5); +// String amEndTimeOne = TimeUtils.getCurrentTimeSpan(pAmEndTime, -1); +// String amEndTimeFive = TimeUtils.getCurrentTimeSpan(pAmEndTime, 5); +// +// String pmStartTimeOne = TimeUtils.getCurrentTimeSpan(pPmStartTime, -1); +// String pmStartTimeFive = TimeUtils.getCurrentTimeSpan(pPmStartTime, 5); +// String pmEndTimeOne = TimeUtils.getCurrentTimeSpan(pPmEndTime, -1); +// String pmEndTimeFive = TimeUtils.getCurrentTimeSpan(pPmEndTime, 5); +// if (amStartTimeOne.equals(nowHourMM)) { +// return NOTIFY_TYPE_P_AM_SIGN_1; +// } +// if (amStartTimeFive.equals(nowHourMM)) { +// return NOTIFY_TYPE_P_AM_SIGN_5; +// } +// if (amEndTimeOne.equals(nowHourMM)) { +// return NOTIFY_TYPE_P_AM_SIGN_OUT_1; +// } +// if (amEndTimeFive.equals(nowHourMM)) { +// return NOTIFY_TYPE_P_AM_SIGN_OUT_5; +// } +// if (pmStartTimeOne.equals(nowHourMM)) { +// return NOTIFY_TYPE_P_PM_SIGN_1; +// } +// if (pmStartTimeFive.equals(nowHourMM)) { +// return NOTIFY_TYPE_P_PM_SIGN_5; +// } +// if (pmEndTimeOne.equals(nowHourMM)) { +// return NOTIFY_TYPE_P_PM_SIGN_OUT_1; +// } +// if (pmEndTimeFive.equals(nowHourMM)) { +// return NOTIFY_TYPE_P_PM_SIGN_OUT_5; +// } // } // } +// return type; +// } // -// //Socket通讯写出后的响应回调 -// @Override -// public void onSocketWriteResponse(ConnectionInfo info, String action, ISendable data) { -// mManager.getPulseManager().pulse(); -// LogUtils.e("Socket通讯写出后的响应回调==" + action); +// private void getIsSign() { +// String token = GlobalProvider.getString(LocationService.this, "token"); +// if (!TextUtils.isEmpty(token)) { +// RetrofitManager.getInstance() +// .create(LocationApiService.class) +// .checkSign(token) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(Disposable d) { +// +// } +// +// @Override +// public void onNext(CheckSignBean checkSignBean) { +// if (checkSignBean != null && !TextUtils.isEmpty(checkSignBean.getData().getIsSign())) { +// boolean b = Boolean.parseBoolean(checkSignBean.getData().getIsSign()); +// if (!b) { +// String nowHourMM = TimeUtils.getNowHourMM(); +// String userType = GlobalProvider.getString(LocationService.this, "userType", "P"); +// if ("N".equals(userType)) { +// //N员 +// if (!TextUtils.isEmpty(nowHourMM)) { +// if (!TextUtils.isEmpty(mNStartPunchTime)) { +// String currentTime = TimeUtils.getCurrentTime(mNStartPunchTime); +// if (nowHourMM.equals(currentTime)) { +// sendNotifySignN(1); +// } +// } +// } +// } else { +// if (!TextUtils.isEmpty(nowHourMM)) { +// if (!TextUtils.isEmpty(mAmStartPunchTime)) { +// String currentTime = TimeUtils.getCurrentTime(mAmStartPunchTime); +// if (nowHourMM.equals(currentTime)) { +// sendNotifySign(1); +// } +// } +// if (!TextUtils.isEmpty(mPmStartPunchTime)) { +// String currentTime = TimeUtils.getCurrentTime(mPmStartPunchTime); +// if (nowHourMM.equals(currentTime)) { +// sendNotifySign(3); +// } +// } +// } +// } +// } else { +// getIsSignOff(); +// } +// } +// } +// +// @Override +// public void onError(Throwable e) { +// } +// +// @Override +// public void onComplete() { +// +// } +// }); // } +// } // +// private void getIsSignOff() { +// String token = GlobalProvider.getString(LocationService.this, "token"); +// if (!TextUtils.isEmpty(token)) { +// RetrofitManager.getInstance() +// .create(LocationApiService.class) +// .checkSignOff(UserLgUtils.getToken()) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(Disposable d) { // -// //Socket心跳发送后的回调 -// @Override -// public void onPulseSend(ConnectionInfo info, IPulseSendable data) { -// LogUtils.e("==Socket心跳发送后的回调=="); +// } +// +// @Override +// public void onNext(CheckSignOffBean checkSignBean) { +// if (checkSignBean != null && !TextUtils.isEmpty(checkSignBean.getData())) { +// boolean b = Boolean.parseBoolean(checkSignBean.getData()); +// if (!b) { +// String nowHourMM = TimeUtils.getNowHourMM(); +// String userType = GlobalProvider.getString(LocationService.this, "userType", "P"); +// if ("N".equals(userType)) { +// //N员 +// String currentTime = TimeUtils.getCurrentTime(mNEndWorkTime); +// if (!TextUtils.isEmpty(nowHourMM)) { +// if (nowHourMM.equals(currentTime)) { +// sendNotifySignN(2); +// } +// } +// } else { +// //片长 +// if (!TextUtils.isEmpty(mAmEndWorkTime)) { +// String currentTime = TimeUtils.getCurrentTime(mAmEndWorkTime); +// if (nowHourMM.equals(currentTime)) { +// sendNotifySign(2); +// } +// } +// if (!TextUtils.isEmpty(mPmEndWorkTime)) { +// String currentTime = TimeUtils.getCurrentTime(mPmEndWorkTime); +// if (nowHourMM.equals(currentTime)) { +// sendNotifySign(4); +// } +// } +// } +// } +// } +// } +// +// @Override +// public void onError(Throwable e) { +// } +// +// @Override +// public void onComplete() { +// +// } +// }); // } -// }; - - +// } +// +// private void registerIsSendNogify() { +// Observable.interval(50, TimeUnit.SECONDS) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(Disposable d) { +// +// } +// +// @Override +// public void onNext(Long aLong) { +// String isHolday = GlobalProvider.getString(LocationService.this, "isHolday", ""); +// if (!TextUtils.isEmpty(isHolday)) { +// if ("1".equals(isHolday)) { +// mIsHolday = true; +// } else { +// mIsHolday = false; +// } +// } else { +// mIsHolday = false; +// } +// } +// +// @Override +// public void onError(Throwable e) { +// +// } +// +// @Override +// public void onComplete() { +// +// } +// }); +// +// } +// // /** -// * 上传本地数据 +// * 发送N员通知 // * -// * @param bdLocation -// * @param file +// * @param i // */ -// private void uploadLocalPoint(BDLocation bdLocation, File file) { -// Gson gson = new Gson(); -// Type type = new TypeToken() { -// }.getType(); -// try { -// List pos = new ArrayList<>(); -// List strings = FileIOUtils.readFile2List(file); -// for (int i = 0; i < strings.size(); i++) { -// MapPosition bena = gson.fromJson(strings.get(i), type); -// pos.add(bena); +// private void sendNotifySignN(int i) { +// NotificationUtils utils = new NotificationUtils(LocationService.this); +// String title = ""; +// String content = ""; +// switch (i) { +// case 1: +// title = "签到提醒"; +// content = "请在" + mNStartPunchTime + "-" + mNStartWorkTime + "进行签到"; +// break; +// case 2: +// title = "签退提醒"; +// content = "请在" + mNEndWorkTime + "-" + mNEndPunchTime + "进行签退"; +// break; +// } +// utils.sendNotification(666, title, content); +// } +// +// private void sendNotifySign(int i) { +// NotificationUtils utils = new NotificationUtils(LocationService.this); +// String title = ""; +// String content = ""; +// switch (i) { +// case 1: +// title = "签到提醒"; +// content = "请在" + mAmStartPunchTime + "-" + mAmStartWorkTime + "进行上午签到"; +// break; +// case 2: +// title = "签退提醒"; +// content = "请在" + mAmEndWorkTime + "-" + mAmEndPunchTime + "进行上午签退"; +// break; +// case 3: +// title = "签到提醒"; +// content = "请在" + mPmStartPunchTime + "-" + mPmStartWorkTime + "进行下午签到"; +// break; +// case 4: +// title = "签退提醒"; +// content = "请在" + mPmEndWorkTime + "-" + mPmEndPunchTime + "进行下午签退"; +// break; +// } +// utils.sendNotification(555, title, content); +// } +// +// private void registerUploadPointListener() { +// Observable.interval(1, 1, TimeUnit.MINUTES) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(Disposable d) { +// +// } +// +// @Override +// public void onNext(Long aLong) { +// if (mUploadPointTime != 0) { +// long timeSpan = TimeUtils.getTimeSpan(System.currentTimeMillis(), mUploadPointTime, TimeConstants.MIN); +// if (timeSpan >= 9) { +// if (!mIsHolday) { +// String chineseWeek = TimeUtils.getDayOfWeek(); +// if (!TextUtils.isEmpty(chineseWeek) && !"六".equals(chineseWeek) && !"日".equals(chineseWeek)) { +// mUploadPointTime = System.currentTimeMillis(); +// String nowHour = TimeUtils.getNowHour(); +// if (TimeUtils.isInTime("08:30-12:30", nowHour) || TimeUtils.isInTime("13:30-17:30", nowHour)) { +// if (canUpload()) { +// startLocation(); +// } +// NotificationUtils utils = new NotificationUtils(LocationService.this); +// utils.sendNotification(45, "应急管理", "您已较长时间未上传定位信息,可能当前位置信号弱,请检查GPS和数据开关设置或者移动到开阔位置."); +// } +// } +// } +// } +// } +// } +// +// @Override +// public void onError(Throwable e) { +// +// } +// +// @Override +// public void onComplete() { +// +// } +// }); +// } +// +// //保存 +// private void saveFile(int i) { +// if (i == 12) { +// String start = "定位服务已经开启:" + GlobalProvider.getString(LocationService.this, "token") + "手机参数:" + DeviceUtil.getDeviceInfo() + "App版本:" + AppUtils.getAppVersionName(); +// Utils.saveFile(start, "testLocation.txt", true); +// } else { +// String end = "定位服务关闭"; +// Utils.saveFile(end, "testLocation.txt", true); +// } +// } +// +// /** +// * 获取当前时间 +// */ +// private void checkSign() { +// Observable.interval(0, 5, TimeUnit.MINUTES) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(Disposable d) { +// mMTimeDis = d; +// } +// +// @Override +// public void onNext(Long aLong) { +// checkIsSign(); +// } +// +// @Override +// public void onError(Throwable e) { +// +// } +// +// @Override +// public void onComplete() { +// +// } +// }); +// } +// +// /** +// * 校验是否签到 +// */ +// private void checkIsSign() { +// String token = GlobalProvider.getString(LocationService.this, "token"); +// if (!TextUtils.isEmpty(token)) { +// RetrofitManager.getInstance() +// .create(LocationApiService.class) +// .checkSign(token) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(Disposable d) { +// +// } +// +// @Override +// public void onNext(CheckSignBean checkSignBean) { +// if (checkSignBean != null && !TextUtils.isEmpty(checkSignBean.getData().getIsSign())) { +// boolean b = Boolean.parseBoolean(checkSignBean.getData().getIsSign()); +// if (b) { +// //已经签到 +// checkSignOff(); +// } else { +// //未签到 +// if (!mIsHolday) { +// String chineseWeek = TimeUtils.getDayOfWeek(); +// if (!TextUtils.isEmpty(chineseWeek) && !"六".equals(chineseWeek) && !"日".equals(chineseWeek)) { +// String nowHourMM = TimeUtils.getNowHourMM(); +// String userType = GlobalProvider.getString(LocationService.this, "userType", "P"); +// if ("N".equals(userType)) { +// //N员 +// String nStartPunchTime = mNStartPunchTime; +// String nStartWorkTime = mNStartWorkTime; +// if (TimeUtils.isInTime(nStartPunchTime + "-" + nStartWorkTime, nowHourMM)) { +// sendNotif(1); +// } +// } else { +// //片长 +// String amStartPunchTime = mAmStartPunchTime; +// String amStartWorkTime = mAmStartWorkTime; +// String pmStartPunchTime = mPmStartPunchTime; +// String pmStartWorkTime = mPmStartWorkTime; +// if (TimeUtils.isInTime(amStartPunchTime + "-" + amStartWorkTime, nowHourMM) || TimeUtils.isInTime(pmStartPunchTime + "-" + pmStartWorkTime, nowHourMM)) { +// sendNotif(1); +// } +// } +// } +// } +// } +// } +// } +// +// @Override +// public void onError(Throwable e) { +// } +// +// @Override +// public void onComplete() { +// +// } +// }); +// } +// } +// +// //发送签提醒 +// private void sendNotif(int i) { +// if (!mIsHolday) { +// if (isWeek()) { +// NotificationUtils utils = new NotificationUtils(LocationService.this); +// if (i == 1) { +// utils.sendNotification(23, "签到提醒", "当前未签到,请进行签到."); +// } else { +// utils.sendNotification(23, "签退提醒", "当前未签退,请进行签退."); +// } // } -// MapPosition current = new MapPosition(); -// current.setCreateTime(TimeUtils.getNowString()); -// current.setLatitude(bdLocation.getLatitude()); -// current.setLongitude(bdLocation.getLongitude()); -// String s = gson.toJson(pos); -// uploadLocation(s); -// } catch (Exception e) { +// } +// } +// +// private boolean isWeek() { +// String chineseWeek = TimeUtils.getDayOfWeek(); +// if (!TextUtils.isEmpty(chineseWeek) && !"六".equals(chineseWeek) && !"日".equals(chineseWeek)) { +// return true; +// } else { +// return false; +// } +// } +// +// private void checkGpsState() { +// boolean oPen = GpsUtils.isOPen(LocationService.this); +// if (!oPen) { +// if (!mIsHolday) { +// String nowHour = TimeUtils.getNowHour(); +// if (isWeek()) { +// if (TimeUtils.isInTime("08:30-12:30", nowHour) || TimeUtils.isInTime("13:30-17:30", nowHour)) { +// NotificationUtils utils = new NotificationUtils(LocationService.this); +// utils.sendNotification(55, "GPS提醒", "当前GPS已关闭,请前往设置页面进行开启."); +// } +// } +// } +// } +// } +// +// /** +// * 校验是否签退 +// */ +// private void checkSignOff() { +// String token = GlobalProvider.getString(LocationService.this, "token", ""); +// if (!TextUtils.isEmpty(token)) { +// RetrofitManager.getInstance() +// .create(LocationApiService.class) +// .checkSignOff(token) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(Disposable d) { +// +// } +// +// @Override +// public void onNext(CheckSignOffBean checkSignBean) { +// if (checkSignBean != null && !TextUtils.isEmpty(checkSignBean.getData())) { +// boolean b = Boolean.parseBoolean(checkSignBean.getData()); +// if (b) { +// //已经签退 +// } else { +// //没有签退 +// if (!mIsHolday) { +// String nowHourMM = TimeUtils.getNowHour(); +// //时间段在12点与13点半之间或者17点与19点之间,提示签退 +// String chineseWeek = TimeUtils.getDayOfWeek(); +// if (!TextUtils.isEmpty(chineseWeek) && !"六".equals(chineseWeek) && !"日".equals(chineseWeek)) { +// String userType = GlobalProvider.getString(LocationService.this, "userType", "P"); +// if ("N".equals(userType)) { +// //N员 +// String nEndWorkTime = mNEndWorkTime;//GlobalProvider.getString(LocationService.this, "nEndWorkTime", "17:00:00"); +// String nEndPunchTime = mNEndPunchTime;//GlobalProvider.getString(LocationService.this, "nEndPunchTime", "18:00:00"); +// if (TimeUtils.isInTime(nEndWorkTime + "-" + nEndPunchTime, nowHourMM)) { +// sendNotif(23); +// } +// } else { +// //片长 +// String amEndWorkTime = mAmEndWorkTime;//GlobalProvider.getString(LocationService.this, "amEndWorkTime", "11:30:00"); +// String amEndPunchTime = mAmEndPunchTime; //GlobalProvider.getString(LocationService.this, "amEndPunchTime", "12:30:00"); +// String pmEndWorkTime = mPmEndWorkTime;// GlobalProvider.getString(LocationService.this, "pmEndWorkTime", "16:30:00"); +// String pmEndPunchTime = mPmEndPunchTime;// GlobalProvider.getString(LocationService.this, "pmEndPunchTime", "17:30:00"); +// if (TimeUtils.isInTime(amEndWorkTime + "-" + amEndPunchTime, nowHourMM) || TimeUtils.isInTime(pmEndWorkTime + "-" + pmEndPunchTime, nowHourMM)) { +// sendNotif(23); +// } +// } +// } +// } +// } +// } +// } +// +// @Override +// public void onError(Throwable e) { +// } +// +// @Override +// public void onComplete() { +// +// } +// }); +// } +// +// } +// +// +// /** +// * 电子围栏数据 +// */ +// private void getUserPenList() { +// String token = GlobalProvider.getString(LocationService.this, "token"); +// if (!TextUtils.isEmpty(token)) { +// RetrofitManager.getInstance() +// .create(LocationApiService.class) +// .getUserPenList(token) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer>() { +// @Override +// public void onSubscribe(Disposable d) { +// +// } +// +// @Override +// public void onNext(List penLineBeans) { +// if (penLineBeans != null && penLineBeans.size() > 0) { +// buildPenList(penLineBeans); +// } +// } +// +// @Override +// public void onError(Throwable e) { +//// ToastUtils.showShort("获取围栏数据失败,请稍后重试"); +// } +// +// @Override +// public void onComplete() { +// +// } +// }); +// } +// +// } +// +// private void buildPenList(List penLineBeans) { +// mPenLineList = new ArrayList<>(); +// for (int i = 0; i < penLineBeans.size(); i++) { +// List areaPoints = penLineBeans.get(i).getAreaPoints(); +// if (areaPoints != null && areaPoints.size() > 0) { +// List tempList = new ArrayList<>(); +// for (int j = 0; j < areaPoints.size(); j++) { +// LatLng latLng = new LatLng(Double.parseDouble(areaPoints.get(j).getLatitude()), Double.parseDouble(areaPoints.get(j).getLongitude())); +// tempList.add(latLng); +// } +// LatLng latLng = new LatLng(Double.parseDouble(areaPoints.get(0).getLatitude()), Double.parseDouble(areaPoints.get(0).getLongitude())); +// tempList.add(latLng); +// mPenLineList.add(tempList); +// } +// } +// } +// +// private void startPlayMusic() { +// new Thread(() -> startPlaySong()).start(); +// } +// +// private void startPlaySong() { +// if (mMediaPlayer == null) { +// mMediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.no_kill); +// mMediaPlayer.start(); +// } else { +// mMediaPlayer.start(); +// } +// try { +// Thread.sleep(3000); +// } catch (InterruptedException e) { // e.printStackTrace(); // } -// } - // /** -// * 本地数据删除 -// */ -// private void deleteLocalCache() { -// String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "backlocation.txt"; -// File locationFile = new File(filePath); -// if (locationFile.exists()) { -// locationFile.delete(); +// if (mMediaPlayer != null) { +// mMediaPlayer.pause(); // } // } - /** - * 开启socket - */ -// private void startSocket() { -// initSocketManager(); +// +// @Override +// public void onDestroy() { +// saveFile(13); +// unApplyNotiKeepMech(); +// stopLocation(); +// stopPlaySong(); +// if (mMTimeDis != null && !mMTimeDis.isDisposed()) { +// mMTimeDis.dispose(); +// } +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { +// startForegroundService(new Intent(getApplicationContext(), LocationService.class)); +// } else { +// startService(new Intent(getApplicationContext(), LocationService.class)); +// } +// super.onDestroy(); // } - -// /** -// * 初始化SocketManager -// */ -// private void initSocketManager() { -// Handler handler = new Handler(); -// mInfo = new ConnectionInfo(BaseUrlApi.SOCKET_IP, 8080); -// mOkOptions = new OkSocketOptions.Builder() -// .setReconnectionManager(OkSocketOptions.getDefault().getReconnectionManager())//重连 -// .setConnectTimeoutSecond(10) -// .setCallbackThreadModeToken(new OkSocketOptions.ThreadModeToken() { -// @Override -// public void handleCallbackEvent(ActionDispatcher.ActionRunnable runnable) { -// handler.post(runnable); +// +// private void stopPlaySong() { +// if (mMediaPlayer != null) { +// mMediaPlayer.pause(); +// mMediaPlayer.stop(); +// mMediaPlayer.release(); +// mMediaPlayer = null; +// } +// } +// +// private class MyLocationListener extends BDAbstractLocationListener { +// +// @Override +// public void onReceiveLocation(BDLocation bdLocation) { +// if (bdLocation != null && bdLocation.getLatitude() != 0 && bdLocation.getLongitude() != 0) { +// if (bdLocation.getLongitude() != Double.MIN_VALUE && bdLocation.getLongitude() != Double.MIN_VALUE) { +// checkPointIs(bdLocation); +// sendLocationBroadcast(bdLocation); +// mWifiAutoCloseDelegate.onLocateSuccess(getApplicationContext(), PowerManagerUtil.getInstance().isScreenOn(getApplicationContext()), NetUtil.getInstance().isMobileAva(getApplicationContext())); +// } +// } else { +// mWifiAutoCloseDelegate.onLocateFail(getApplicationContext(), 10, PowerManagerUtil.getInstance().isScreenOn(getApplicationContext()), NetUtil.getInstance().isWifiCon(getApplicationContext())); +// } +// } +// +// private void sendLocationBroadcast(BDLocation bdLocation) { +// if (null != bdLocation) { +// if (checkSinglePoint(bdLocation)) { +// if (mTempList.size() >= 25) { +// checkPoints(); +// } else { +// mTempList.add(bdLocation); // } -// }) -// .build(); -// mManager = OkSocket.open(mInfo).option(mOkOptions); -// mManager.registerReceiver(socketListener); -// mManager.connect(); +// } +// } +// } // } +// +// private void checkPointIs(BDLocation bdLocation) { +// if (PathConfig.CITY_CODE_DEFAULT.equals(bdLocation.getCityCode()) && bdLocation.getRadius() <= 300) { +// Intent mIntent = new Intent(PathConfig.ACTION_LOCATION_MESSAGE); +// mIntent.putExtra("data", bdLocation); +// sendBroadcast(mIntent); +//// LatLng latLng1 = new LatLng(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude()); +//// LatLng latLng2 = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude()); +//// boolean circleContainsPoint = SpatialRelationUtil.isCircleContainsPoint(latLng1, 50, latLng2); +//// if (circleContainsPoint) { +//// +//// } +// } +// } +// +// /** +// * 校验定位点的合法性 +// * +// * @param bdLocation +// * @return +// */ +// private boolean checkSinglePoint(BDLocation bdLocation) { +// boolean isLegal = false; +// if (isFirst) { +// if (PathConfig.CITY_CODE_DEFAULT.equals(bdLocation.getCityCode())) { +// isLegal = true; +// } else { +// isLegal = false; +// } +// } else { +// if (PathConfig.CITY_CODE_DEFAULT.equals(bdLocation.getCityCode()) && bdLocation.getRadius() <= mPrecision) { +// if (mCurrentLocation != null) { +// LatLng latLng1 = new LatLng(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude()); +// LatLng latLng2 = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude()); +// boolean circleContainsPoint = SpatialRelationUtil.isCircleContainsPoint(latLng1, 50, latLng2); +// if (circleContainsPoint) { +// mCurrentLocation = bdLocation; +// isLegal = true; +// } else { +// isLegal = false; +// } +// } else { +// mCurrentLocation = bdLocation; +// isLegal = true; +// } +// } else { +// isLegal = false; +// } +// } +// return isLegal; +// } +// +// /** +// * 根据定位精度取最小精度 +// */ +// private void checkPoints() { +// Collections.sort(mTempList, (o1, o2) -> { +// if (o1.getRadius() > o2.getRadius()) { +// return 1; +// } else if (o1.getRadius() < o2.getRadius()) { +// return -1; +// } else { +// return 0; +// } +// }); +// buildUploadPoint(); +// } +// +// /** +// * 存在网络上传 +// */ +// private void buildUploadPoint() { +// isFirst = false; +// if (mTempList.size() > 0) { +// if (NetUtil.getInstance().isNetworkConnected(getApplicationContext())) { +// LocationPosition position = new LocationPosition(); +// position.setUserLatitude(mTempList.get(0).getLatitude() + ""); +// position.setUserLongitude(mTempList.get(0).getLongitude() + ""); +// position.setUserLocation(mTempList.get(0).getAddress().address); +// position.setUserSpeed(mTempList.get(0).getSpeed() + ""); +// Gson gson = new Gson(); +// String s = gson.toJson(position); +// uploadLocation(s); +// checkCurrenPointIsBeyond(mTempList.get(0)); +// } else { +// //TODO 无网络状态下是否保存 +// if (isSaveLocal) { +// String textPoint = "{\"userLongitude\":" + mTempList.get(0).getLongitude() + ",\"userLatitude\":" + mTempList.get(0).getLatitude() + ",\"userLocation\":\"" + mTempList.get(0).getAddrStr() + "\",\"createTime\":\"" + Utils.formatUTC(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss") + "\"}"; +// Utils.saveFile(textPoint, "testLocation.txt", true); +// } +// } +// } +// } +// +// /** +// * 是否在片区内 +// * +// * @param cur +// * @return true 在片区内 false 不在片区内 +// */ +// private boolean isBeyond(LatLng cur) { +// boolean isBeyond = false; +// for (int i = 0; i < mPenLineList.size(); i++) { +// boolean inPolygon = PointUtils.isInPolygon(cur, mPenLineList.get(i)); +// if (inPolygon) { +// isBeyond = true; +// break; +// } +// } +// return isBeyond; +// } +// +// /** +// * 判断是否越界 +// * +// * @param bdLocation +// */ +// private void checkCurrenPointIsBeyond(BDLocation bdLocation) { +// if (!mIsHolday) { +// String chineseWeek = TimeUtils.getDayOfWeek(); +// if (!TextUtils.isEmpty(chineseWeek) && !"六".equals(chineseWeek) && !"日".equals(chineseWeek)) { +// if (mPenLineList != null && mPenLineList.size() > 0) { +// LatLng latLng = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude()); +// boolean isByond = isBeyond(latLng); +// if (!isByond) { +// //越界了 +// if (mCount > 3) { +// if (mCurTime != 0) { +// long timeSpan = TimeUtils.getTimeSpan(System.currentTimeMillis(), mCurTime, TimeConstants.MIN); +// if (timeSpan > 30) { +// String nowHour = TimeUtils.getNowHourMM(); +// if (TimeUtils.isInTime("09:00-12:10", nowHour) || TimeUtils.isInTime("13:30-17:00", nowHour)) { +// NotificationUtils utils = new NotificationUtils(LocationService.this); +// utils.sendNotification("越界提醒", "你当前位置超过了所监管区域"); +// } +// mCurTime = TimeUtils.getNowMills(); +// } +// } else { +// mCurTime = TimeUtils.getNowMills(); +// } +// } else { +// ++mCount; +// String nowHour = TimeUtils.getNowHourMM(); +// if (TimeUtils.isInTime("09:00-12:10", nowHour) || TimeUtils.isInTime("13:30-17:00", nowHour)) { +// NotificationUtils utils = new NotificationUtils(LocationService.this); +// utils.sendNotification("越界提醒", "你当前位置超过了所监管区域"); +// } +// } +// } +// } +// } +// } +// } +// +// private boolean canUpload() { +// String nowHourMM = TimeUtils.getNowHourMM(); +// String upStart = mAmStartPunchTime; +// String upEnd = mNEndPunchTime; +// boolean isup = TimeUtils.isInTime(upStart + "-" + upEnd, nowHourMM); +// return isup; +// } +// +// /** +// * 上传数据 +// * +// * @param points +// */ +// private void uploadLocation(String points) { +// isFirst = false; +// String token = GlobalProvider.getString(LocationService.this, "token"); +// if (!TextUtils.isEmpty(token)) { +// if (isUpload) { +// mCurrentLocation = null; +// mTempList.clear(); +// } else { +// boolean canUp = canUpload(); +// if (canUp) { +// isUpload = true; +// RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), points); +// RetrofitManager.getInstance() +// .create(LocationApiService.class) +// .saveLocationData(body, token) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(Disposable d) { +// +// } +// +// @Override +// public void onNext(SuccessBean successBean) { +// isUpload = false; +// mCurrentLocation = null; +// mTempList.clear(); +// mUploadPointTime = System.currentTimeMillis(); +// Intent intent = new Intent(); +// intent.setAction("com.sucstepsoft.realtimelocation.isonlone"); +// intent.putExtra("uploadTime", mUploadPointTime + ""); +// sendBroadcast(intent); +// } +// +// @Override +// public void onError(Throwable e) { +// isUpload = false; +// mCurrentLocation = null; +// mTempList.clear(); +// e.printStackTrace(); +// } +// +// @Override +// public void onComplete() { +// +// } +// }); +// } else { +// mTempList.clear(); +// } +// } +// } +// } +// +// +// /** +// * 配置定位参数 +// */ +// private void startLocation() { +// stopLocation(); +// mLocationClient = new LocationClient(getApplicationContext()); +// //声明LocationClient类实例并配置定位参数 +// LocationClientOption locationOption = new LocationClientOption(); +// MyLocationListener myLocationListener = new MyLocationListener(); +// //注册监听函数 +// mLocationClient.registerLocationListener(myLocationListener); +// //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 +// locationOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); +// //可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll; +// locationOption.setCoorType("bd09ll"); +// //可选,默认0,即仅定位一次,设置发起连续定位请求的间隔需要大于等于1000ms才是有效的 +// locationOption.setScanSpan(5000); +// //可选,设置是否需要地址信息,默认不需要 +// locationOption.setIsNeedAddress(true); +// //设置是否运行模拟GPS +//// locationOption.setEnableSimulateGps(false); +// //可选,设置是否需要设备方向结果 +// locationOption.setNeedDeviceDirect(false); +// //可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果 +// locationOption.setLocationNotify(true); +// //可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死 +// locationOption.setIgnoreKillProcess(true); +// //可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近” +// locationOption.setIsNeedLocationDescribe(true); +// //可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到 +// locationOption.setIsNeedLocationPoiList(true); +// //可选,默认false,设置是否收集CRASH信息,默认收集 +// locationOption.SetIgnoreCacheException(false); +// //可选,默认false,设置是否开启Gps定位 +// locationOption.setOpenGps(true); +// //可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用 +// locationOption.setIsNeedAltitude(false); +// //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者,该模式下开发者无需再关心定位间隔是多少,定位SDK本身发现位置变化就会及时回调给开发者 +//// locationOption.setOpenAutoNotifyMode(); +// //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者 +//// locationOption.setOpenAutoNotifyMode(3000, 1, LocationClientOption.LOC_SENSITIVITY_HIGHT); +// //需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用 +// mLocationClient.setLocOption(locationOption); +// //开始定位 +// mLocationClient.start(); +// } +// +// void stopLocation() { +// if (null != mLocationClient) { +// mLocationClient.stop(); +// } +// } +// +// +// /** +// * 签到时间改变 +// */ +// private class PunchTimeReceiver extends BroadcastReceiver { +// +// @Override +// public void onReceive(Context context, Intent intent) { +// String action = intent.getAction(); +// if (PathConfig.ACTION_PUNCH_TIME_MESSAGE.equals(action)) { +// SignTimeBean timeBean = (SignTimeBean) intent.getSerializableExtra("timeBean"); +// mUType = intent.getIntExtra("uType", 2); +// if (timeBean != null) { +// mAmStartPunchTime = timeBean.getAmStartPunchTime();//上午开始打卡时间 +// mAmStartWorkTime = timeBean.getAmStartWorkTime();//"09:30:00";//上午工作开始时间 +// mAmEndWorkTime = timeBean.getAmEndWorkTime();//"11:30:00";//上午工作结束时间 +// mAmEndPunchTime = timeBean.getAmEndPunchTime();//"12:30:00";//上午结束打卡时间 +// mPmStartPunchTime = timeBean.getPmStartPunchTime();//"13:30:00";//下午开始打卡时间 +// mPmStartWorkTime = timeBean.getPmStartWorkTime();//"14:30:00";//下午开始工作时间 +// mPmEndWorkTime = timeBean.getPmEndWorkTime();//"16:30:00";//下午结束工作时间 +// mPmEndPunchTime = timeBean.getPmEndPunchTime();//"17:30:00";//下午结束打卡时间 +// mNStartPunchTime = timeBean.getNStartPunchTime();//"08:30:00";//N员开始打卡时间 +// mNStartWorkTime = timeBean.getNStartWorkTime();//"10:00:00";//N员开始工作时间 +// mNEndWorkTime = timeBean.getNEndWorkTime();// "17:00:00";//N员结束工作时间 +// mNEndPunchTime = timeBean.getNEndPunchTime();// "18:00:00";//N员结束打开时间 +// } +// } else if (PathConfig.ACTION_STOP_LOCATION.equals(action)) { +// startLocation(); +// } else if (PathConfig.ACTION_START_LOCATION.equals(action)) { +// startLocation(); +// } +// } +// } +//// 109.91829190601483 40.59518382351867 +//// 109.91825597379443 40.59669718527541 +//// 109.92120480199132 40.596745087745845 +//// 109.92360987463378 40.596796480184544 +//// 109.92366826449192 40.59486540000251 +//// 109.9212017140661 40.59484141029425 +//// 109.9197561439961 40.59517012777953 +// +//// private SocketActionAdapter socketListener = new SocketActionAdapter() { +//// //当Socket连接建立成功后 +//// @Override +//// public void onSocketConnectionSuccess(ConnectionInfo info, String action) { +//// LogUtils.e("当Socket连接建立成功后==" + action); +//// mManager.send(new HandShakeBean()); +//// mManager.getPulseManager().setPulseSendable(new PulseBean()); +//// } +//// +//// //Socket断开后进行的回调 +//// @Override +//// public void onSocketDisconnection(ConnectionInfo info, String action, Exception e) { +//// LogUtils.e("Socket断开后进行的回调==" + action); +//// } +//// +//// //当Socket连接失败时会进行回调 +//// @Override +//// public void onSocketConnectionFailed(ConnectionInfo info, String action, Exception e) { +//// LogUtils.e("当Socket连接失败时会进行回调==" + action); +//// } +//// +//// //Socket通讯从服务器读取到消息后的响应 +//// @Override +//// public void onSocketReadResponse(ConnectionInfo info, String action, OriginalData data) { +//// LogUtils.e("Socket通讯从服务器读取到消息后的响应==" + action); +//// String str = new String(data.getBodyBytes(), Charset.forName("utf-8")); +//// JsonObject jsonObject = new JsonParser().parse(str).getAsJsonObject(); +//// int cmd = jsonObject.get("cmd").getAsInt(); +//// if (cmd == 54) {//登陆成功 +//// String handshake = jsonObject.get("handshake").getAsString(); +//// } else if (cmd == 57) {//切换,重定向.(暂时无法演示,如有疑问请咨询github) +//// LogUtils.e("=====重定向===="); +//// } else if (cmd == 14) {//心跳 +//// mManager.getPulseManager().feed(); +//// LogUtils.e("心跳包发送"); +//// } else { +//// } +//// } +//// +//// //Socket通讯写出后的响应回调 +//// @Override +//// public void onSocketWriteResponse(ConnectionInfo info, String action, ISendable data) { +//// mManager.getPulseManager().pulse(); +//// LogUtils.e("Socket通讯写出后的响应回调==" + action); +//// } +//// +//// +//// //Socket心跳发送后的回调 +//// @Override +//// public void onPulseSend(ConnectionInfo info, IPulseSendable data) { +//// LogUtils.e("==Socket心跳发送后的回调=="); +//// } +//// }; +// +// +//// /** +//// * 上传本地数据 +//// * +//// * @param bdLocation +//// * @param file +//// */ +//// private void uploadLocalPoint(BDLocation bdLocation, File file) { +//// Gson gson = new Gson(); +//// Type type = new TypeToken() { +//// }.getType(); +//// try { +//// List pos = new ArrayList<>(); +//// List strings = FileIOUtils.readFile2List(file); +//// for (int i = 0; i < strings.size(); i++) { +//// MapPosition bena = gson.fromJson(strings.get(i), type); +//// pos.add(bena); +//// } +//// MapPosition current = new MapPosition(); +//// current.setCreateTime(TimeUtils.getNowString()); +//// current.setLatitude(bdLocation.getLatitude()); +//// current.setLongitude(bdLocation.getLongitude()); +//// String s = gson.toJson(pos); +//// uploadLocation(s); +//// } catch (Exception e) { +//// e.printStackTrace(); +//// } +//// } +// // /** +//// * 本地数据删除 +//// */ +//// private void deleteLocalCache() { +//// String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "backlocation.txt"; +//// File locationFile = new File(filePath); +//// if (locationFile.exists()) { +//// locationFile.delete(); +//// } +//// } +// /** +// * 开启socket +// */ +//// private void startSocket() { +//// initSocketManager(); +//// } +// +//// /** +//// * 初始化SocketManager +//// */ +//// private void initSocketManager() { +//// Handler handler = new Handler(); +//// mInfo = new ConnectionInfo(BaseUrlApi.SOCKET_IP, 8080); +//// mOkOptions = new OkSocketOptions.Builder() +//// .setReconnectionManager(OkSocketOptions.getDefault().getReconnectionManager())//重连 +//// .setConnectTimeoutSecond(10) +//// .setCallbackThreadModeToken(new OkSocketOptions.ThreadModeToken() { +//// @Override +//// public void handleCallbackEvent(ActionDispatcher.ActionRunnable runnable) { +//// handler.post(runnable); +//// } +//// }) +//// .build(); +//// mManager = OkSocket.open(mInfo).option(mOkOptions); +//// mManager.registerReceiver(socketListener); +//// mManager.connect(); +//// } } diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/Utils.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/Utils.java index 68f7e38..7342e92 100755 --- a/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/Utils.java +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/Utils.java @@ -41,41 +41,41 @@ public class Utils { // private final static String PRIMARY_CHANNEL = "default"; private final static String PRIMARY_CHANNEL = "txrealtimelocation"; - public synchronized static String getLocationStr(BDLocation location) { - if (null == location) { - return null; - } - StringBuffer sb = new StringBuffer(); - if (location != null) { - sb.append("定位成功" + "\n"); - sb.append("定位类型: " + location.getLocType() + "\n"); - sb.append("经 度 : " + location.getLongitude() + "\n"); - sb.append("纬 度 : " + location.getLatitude() + "\n"); - sb.append("精 度 : " + location.getRadius() + "米" + "\n"); - - sb.append("海 拔 : " + location.getAltitude() + "米" + "\n"); - sb.append("速 度 : " + location.getSpeed() + "米/秒" + "\n"); - sb.append("角 度 : " + location.getDirection() + "\n"); - - //逆地理信息 - sb.append("国 家 : " + location.getCountry() + "\n"); - sb.append("省 : " + location.getProvince() + "\n"); - sb.append("市 : " + location.getCity() + "\n"); - sb.append("城市编码 : " + location.getCityCode() + "\n"); - sb.append("区 : " + location.getDistrict() + "\n"); - sb.append("区域 码 : " + location.getAdCode() + "\n"); - sb.append("地 址 : " + location.getAddress() + "\n"); - //定位完成的时间 - sb.append("定位时间: " + location.getTime() + "\n"); - - } else { - //定位失败 - sb.append("定位失败" + location.toString() + "\n"); - } - //定位之后的回调时间 - sb.append("回调时间: " + formatUTC(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss") + "\n"); - return sb.toString(); - } +// public synchronized static String getLocationStr(BDLocation location) { +// if (null == location) { +// return null; +// } +// StringBuffer sb = new StringBuffer(); +// if (location != null) { +// sb.append("定位成功" + "\n"); +// sb.append("定位类型: " + location.getLocType() + "\n"); +// sb.append("经 度 : " + location.getLongitude() + "\n"); +// sb.append("纬 度 : " + location.getLatitude() + "\n"); +// sb.append("精 度 : " + location.getRadius() + "米" + "\n"); +// +// sb.append("海 拔 : " + location.getAltitude() + "米" + "\n"); +// sb.append("速 度 : " + location.getSpeed() + "米/秒" + "\n"); +// sb.append("角 度 : " + location.getDirection() + "\n"); +// +// //逆地理信息 +// sb.append("国 家 : " + location.getCountry() + "\n"); +// sb.append("省 : " + location.getProvince() + "\n"); +// sb.append("市 : " + location.getCity() + "\n"); +// sb.append("城市编码 : " + location.getCityCode() + "\n"); +// sb.append("区 : " + location.getDistrict() + "\n"); +// sb.append("区域 码 : " + location.getAdCode() + "\n"); +// sb.append("地 址 : " + location.getAddress() + "\n"); +// //定位完成的时间 +// sb.append("定位时间: " + location.getTime() + "\n"); +// +// } else { +// //定位失败 +// sb.append("定位失败" + location.toString() + "\n"); +// } +// //定位之后的回调时间 +// sb.append("回调时间: " + formatUTC(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss") + "\n"); +// return sb.toString(); +// } public synchronized static String formatUTC(long l, String strPattern) { if (TextUtils.isEmpty(strPattern)) { diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/ExampleUtil.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/ExampleUtil.java index d715eb8..4c21ba0 100755 --- a/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/ExampleUtil.java +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/ExampleUtil.java @@ -1,134 +1,134 @@ -package com.sucstepsoft.txrealtimelocation.services.jpush; - -import android.content.Context; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; -import android.os.Bundle; -import android.os.Looper; -import android.telephony.TelephonyManager; -import android.text.TextUtils; -import android.widget.Toast; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import cn.jpush.android.api.JPushInterface; -import cn.jpush.android.helper.Logger; - -public class ExampleUtil { - public static final String PREFS_NAME = "JPUSH_EXAMPLE"; - public static final String PREFS_DAYS = "JPUSH_EXAMPLE_DAYS"; - public static final String PREFS_START_TIME = "PREFS_START_TIME"; - public static final String PREFS_END_TIME = "PREFS_END_TIME"; - public static final String KEY_APP_KEY = "JPUSH_APPKEY"; - - public static boolean isEmpty(String s) { - if (null == s) - return true; - if (s.length() == 0) - return true; - if (s.trim().length() == 0) - return true; - return false; - } - /** - * 只能以 “+” 或者 数字开头;后面的内容只能包含 “-” 和 数字。 - * */ - private final static String MOBILE_NUMBER_CHARS = "^[+0-9][-0-9]{1,}$"; - public static boolean isValidMobileNumber(String s) { - if(TextUtils.isEmpty(s)) return true; - Pattern p = Pattern.compile(MOBILE_NUMBER_CHARS); - Matcher m = p.matcher(s); - return m.matches(); - } - // 校验Tag Alias 只能是数字,英文字母和中文 - public static boolean isValidTagAndAlias(String s) { - Pattern p = Pattern.compile("^[\u4E00-\u9FA50-9a-zA-Z_!@#$&*+=.|]+$"); - Matcher m = p.matcher(s); - return m.matches(); - } - - // 取得AppKey - public static String getAppKey(Context context) { - Bundle metaData = null; - String appKey = null; - try { - ApplicationInfo ai = context.getPackageManager().getApplicationInfo( - context.getPackageName(), PackageManager.GET_META_DATA); - if (null != ai) - metaData = ai.metaData; - if (null != metaData) { - appKey = metaData.getString(KEY_APP_KEY); - if ((null == appKey) || appKey.length() != 24) { - appKey = null; - } - } - } catch (NameNotFoundException e) { - - } - return appKey; - } - - // 取得版本号 - public static String GetVersion(Context context) { - try { - PackageInfo manager = context.getPackageManager().getPackageInfo( - context.getPackageName(), 0); - return manager.versionName; - } catch (NameNotFoundException e) { - return "Unknown"; - } - } - - public static void showToast(final String toast, final Context context) - { - new Thread(new Runnable() { - - @Override - public void run() { - Looper.prepare(); - Toast.makeText(context, toast, Toast.LENGTH_SHORT).show(); - Looper.loop(); - } - }).start(); - } - - public static boolean isConnected(Context context) { - ConnectivityManager conn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkInfo info = conn.getActiveNetworkInfo(); - return (info != null && info.isConnected()); - } - - public static String getImei(Context context, String imei) { - String ret = null; - try { - TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); - ret = telephonyManager.getDeviceId(); - } catch (Exception e) { - Logger.e(ExampleUtil.class.getSimpleName(), e.getMessage()); - } - if (isReadableASCII(ret)){ - return ret; - } else { - return imei; - } - } - - private static boolean isReadableASCII(CharSequence string){ - if (TextUtils.isEmpty(string)) return false; - try { - Pattern p = Pattern.compile("[\\x20-\\x7E]+"); - return p.matcher(string).matches(); - } catch (Throwable e){ - return true; - } - } - - public static String getDeviceId(Context context) { - return JPushInterface.getUdid(context); - } -} +//package com.sucstepsoft.txrealtimelocation.services.jpush; +// +//import android.content.Context; +//import android.content.pm.ApplicationInfo; +//import android.content.pm.PackageInfo; +//import android.content.pm.PackageManager; +//import android.content.pm.PackageManager.NameNotFoundException; +//import android.net.ConnectivityManager; +//import android.net.NetworkInfo; +//import android.os.Bundle; +//import android.os.Looper; +//import android.telephony.TelephonyManager; +//import android.text.TextUtils; +//import android.widget.Toast; +// +//import java.util.regex.Matcher; +//import java.util.regex.Pattern; +// +//import cn.jpush.android.api.JPushInterface; +//import cn.jpush.android.helper.Logger; +// +//public class ExampleUtil { +// public static final String PREFS_NAME = "JPUSH_EXAMPLE"; +// public static final String PREFS_DAYS = "JPUSH_EXAMPLE_DAYS"; +// public static final String PREFS_START_TIME = "PREFS_START_TIME"; +// public static final String PREFS_END_TIME = "PREFS_END_TIME"; +// public static final String KEY_APP_KEY = "JPUSH_APPKEY"; +// +// public static boolean isEmpty(String s) { +// if (null == s) +// return true; +// if (s.length() == 0) +// return true; +// if (s.trim().length() == 0) +// return true; +// return false; +// } +// /** +// * 只能以 “+” 或者 数字开头;后面的内容只能包含 “-” 和 数字。 +// * */ +// private final static String MOBILE_NUMBER_CHARS = "^[+0-9][-0-9]{1,}$"; +// public static boolean isValidMobileNumber(String s) { +// if(TextUtils.isEmpty(s)) return true; +// Pattern p = Pattern.compile(MOBILE_NUMBER_CHARS); +// Matcher m = p.matcher(s); +// return m.matches(); +// } +// // 校验Tag Alias 只能是数字,英文字母和中文 +// public static boolean isValidTagAndAlias(String s) { +// Pattern p = Pattern.compile("^[\u4E00-\u9FA50-9a-zA-Z_!@#$&*+=.|]+$"); +// Matcher m = p.matcher(s); +// return m.matches(); +// } +// +// // 取得AppKey +// public static String getAppKey(Context context) { +// Bundle metaData = null; +// String appKey = null; +// try { +// ApplicationInfo ai = context.getPackageManager().getApplicationInfo( +// context.getPackageName(), PackageManager.GET_META_DATA); +// if (null != ai) +// metaData = ai.metaData; +// if (null != metaData) { +// appKey = metaData.getString(KEY_APP_KEY); +// if ((null == appKey) || appKey.length() != 24) { +// appKey = null; +// } +// } +// } catch (NameNotFoundException e) { +// +// } +// return appKey; +// } +// +// // 取得版本号 +// public static String GetVersion(Context context) { +// try { +// PackageInfo manager = context.getPackageManager().getPackageInfo( +// context.getPackageName(), 0); +// return manager.versionName; +// } catch (NameNotFoundException e) { +// return "Unknown"; +// } +// } +// +// public static void showToast(final String toast, final Context context) +// { +// new Thread(new Runnable() { +// +// @Override +// public void run() { +// Looper.prepare(); +// Toast.makeText(context, toast, Toast.LENGTH_SHORT).show(); +// Looper.loop(); +// } +// }).start(); +// } +// +// public static boolean isConnected(Context context) { +// ConnectivityManager conn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); +// NetworkInfo info = conn.getActiveNetworkInfo(); +// return (info != null && info.isConnected()); +// } +// +// public static String getImei(Context context, String imei) { +// String ret = null; +// try { +// TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); +// ret = telephonyManager.getDeviceId(); +// } catch (Exception e) { +// Logger.e(ExampleUtil.class.getSimpleName(), e.getMessage()); +// } +// if (isReadableASCII(ret)){ +// return ret; +// } else { +// return imei; +// } +// } +// +// private static boolean isReadableASCII(CharSequence string){ +// if (TextUtils.isEmpty(string)) return false; +// try { +// Pattern p = Pattern.compile("[\\x20-\\x7E]+"); +// return p.matcher(string).matches(); +// } catch (Throwable e){ +// return true; +// } +// } +// +// public static String getDeviceId(Context context) { +// return JPushInterface.getUdid(context); +// } +//} diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/MyReceiver.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/MyReceiver.java index 9f4d1cc..8b6d1b6 100755 --- a/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/MyReceiver.java +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/MyReceiver.java @@ -1,128 +1,128 @@ -package com.sucstepsoft.txrealtimelocation.services.jpush; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.v4.content.LocalBroadcastManager; -import android.text.TextUtils; - -import com.sucstepsoft.txrealtimelocation.activitys.base.MainActivity; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.Iterator; - -import cn.jpush.android.api.JPushInterface; -import cn.jpush.android.helper.Logger; - -/** - * 自定义接收器 - *

- * 如果不定义这个 Receiver,则: - * 1) 默认用户会打开主界面 - * 2) 接收不到自定义消息 - */ -public class MyReceiver extends BroadcastReceiver { - private static final String TAG = "JIGUANG-Example"; - - @Override - public void onReceive(Context context, Intent intent) { - try { - Bundle bundle = intent.getExtras(); - Logger.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle)); - - if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) { - String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID); - Logger.d(TAG, "[MyReceiver] 接收Registration Id : " + regId); - //send the Registration Id to your server... - - } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) { - Logger.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE)); - processCustomMessage(context, bundle); - - } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) { - Logger.d(TAG, "[MyReceiver] 接收到推送下来的通知"); - int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID); - Logger.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId); - - } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) { - Logger.d(TAG, "[MyReceiver] 用户点击打开了通知"); -// //打开自定义的Activity -// Intent i = new Intent(context, MainActivity.class); -// i.putExtras(bundle); -// //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); -// i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); -// context.startActivity(i); - } else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) { - Logger.d(TAG, "[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA)); - //在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码,比如打开新的Activity, 打开一个网页等.. - } else if (JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) { - boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false); - Logger.w(TAG, "[MyReceiver]" + intent.getAction() + " connected state change to " + connected); - } else { - Logger.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction()); - } - } catch (Exception e) { - - } - - } - - // 打印所有的 intent extra 数据 - private static String printBundle(Bundle bundle) { - StringBuilder sb = new StringBuilder(); - for (String key : bundle.keySet()) { - if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) { - sb.append("\nkey:" + key + ", value:" + bundle.getInt(key)); - } else if (key.equals(JPushInterface.EXTRA_CONNECTION_CHANGE)) { - sb.append("\nkey:" + key + ", value:" + bundle.getBoolean(key)); - } else if (key.equals(JPushInterface.EXTRA_EXTRA)) { - if (TextUtils.isEmpty(bundle.getString(JPushInterface.EXTRA_EXTRA))) { - Logger.i(TAG, "This message has no Extra data"); - continue; - } - - try { - JSONObject json = new JSONObject(bundle.getString(JPushInterface.EXTRA_EXTRA)); - Iterator it = json.keys(); - - while (it.hasNext()) { - String myKey = it.next(); - sb.append("\nkey:" + key + ", value: [" + - myKey + " - " + json.optString(myKey) + "]"); - } - } catch (JSONException e) { - Logger.e(TAG, "Get message extra JSON error!"); - } - - } else { - sb.append("\nkey:" + key + ", value:" + bundle.get(key)); - } - } - return sb.toString(); - } - - //send msg to MainActivity - private void processCustomMessage(Context context, Bundle bundle) { - if (MainActivity.isForeground) { - String message = bundle.getString(JPushInterface.EXTRA_MESSAGE); - String extras = bundle.getString(JPushInterface.EXTRA_EXTRA); - Intent msgIntent = new Intent(MainActivity.MESSAGE_JPUSH); - msgIntent.putExtra(MainActivity.KEY_MESSAGE, message); - if (!ExampleUtil.isEmpty(extras)) { - try { - JSONObject extraJson = new JSONObject(extras); - if (extraJson.length() > 0) { - msgIntent.putExtra(MainActivity.KEY_EXTRAS, extras); - } - } catch (JSONException e) { - - } - - } - LocalBroadcastManager.getInstance(context).sendBroadcast(msgIntent); - } - } -} +//package com.sucstepsoft.txrealtimelocation.services.jpush; +// +//import android.content.BroadcastReceiver; +//import android.content.Context; +//import android.content.Intent; +//import android.os.Bundle; +//import android.support.v4.content.LocalBroadcastManager; +//import android.text.TextUtils; +// +//import com.sucstepsoft.txrealtimelocation.activitys.base.MainActivity; +// +//import org.json.JSONException; +//import org.json.JSONObject; +// +//import java.util.Iterator; +// +//import cn.jpush.android.api.JPushInterface; +//import cn.jpush.android.helper.Logger; +// +///** +// * 自定义接收器 +// *

+// * 如果不定义这个 Receiver,则: +// * 1) 默认用户会打开主界面 +// * 2) 接收不到自定义消息 +// */ +//public class MyReceiver extends BroadcastReceiver { +// private static final String TAG = "JIGUANG-Example"; +// +// @Override +// public void onReceive(Context context, Intent intent) { +// try { +// Bundle bundle = intent.getExtras(); +// Logger.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle)); +// +// if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) { +// String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID); +// Logger.d(TAG, "[MyReceiver] 接收Registration Id : " + regId); +// //send the Registration Id to your server... +// +// } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) { +// Logger.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE)); +// processCustomMessage(context, bundle); +// +// } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) { +// Logger.d(TAG, "[MyReceiver] 接收到推送下来的通知"); +// int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID); +// Logger.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId); +// +// } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) { +// Logger.d(TAG, "[MyReceiver] 用户点击打开了通知"); +//// //打开自定义的Activity +//// Intent i = new Intent(context, MainActivity.class); +//// i.putExtras(bundle); +//// //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +//// i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); +//// context.startActivity(i); +// } else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) { +// Logger.d(TAG, "[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA)); +// //在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码,比如打开新的Activity, 打开一个网页等.. +// } else if (JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) { +// boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false); +// Logger.w(TAG, "[MyReceiver]" + intent.getAction() + " connected state change to " + connected); +// } else { +// Logger.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction()); +// } +// } catch (Exception e) { +// +// } +// +// } +// +// // 打印所有的 intent extra 数据 +// private static String printBundle(Bundle bundle) { +// StringBuilder sb = new StringBuilder(); +// for (String key : bundle.keySet()) { +// if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) { +// sb.append("\nkey:" + key + ", value:" + bundle.getInt(key)); +// } else if (key.equals(JPushInterface.EXTRA_CONNECTION_CHANGE)) { +// sb.append("\nkey:" + key + ", value:" + bundle.getBoolean(key)); +// } else if (key.equals(JPushInterface.EXTRA_EXTRA)) { +// if (TextUtils.isEmpty(bundle.getString(JPushInterface.EXTRA_EXTRA))) { +// Logger.i(TAG, "This message has no Extra data"); +// continue; +// } +// +// try { +// JSONObject json = new JSONObject(bundle.getString(JPushInterface.EXTRA_EXTRA)); +// Iterator it = json.keys(); +// +// while (it.hasNext()) { +// String myKey = it.next(); +// sb.append("\nkey:" + key + ", value: [" + +// myKey + " - " + json.optString(myKey) + "]"); +// } +// } catch (JSONException e) { +// Logger.e(TAG, "Get message extra JSON error!"); +// } +// +// } else { +// sb.append("\nkey:" + key + ", value:" + bundle.get(key)); +// } +// } +// return sb.toString(); +// } +// +// //send msg to MainActivity +// private void processCustomMessage(Context context, Bundle bundle) { +// if (MainActivity.isForeground) { +// String message = bundle.getString(JPushInterface.EXTRA_MESSAGE); +// String extras = bundle.getString(JPushInterface.EXTRA_EXTRA); +// Intent msgIntent = new Intent(MainActivity.MESSAGE_JPUSH); +// msgIntent.putExtra(MainActivity.KEY_MESSAGE, message); +// if (!ExampleUtil.isEmpty(extras)) { +// try { +// JSONObject extraJson = new JSONObject(extras); +// if (extraJson.length() > 0) { +// msgIntent.putExtra(MainActivity.KEY_EXTRAS, extras); +// } +// } catch (JSONException e) { +// +// } +// +// } +// LocalBroadcastManager.getInstance(context).sendBroadcast(msgIntent); +// } +// } +//} diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/PushMessageReceiver.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/PushMessageReceiver.java index 3c2a934..7499761 100755 --- a/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/PushMessageReceiver.java +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/PushMessageReceiver.java @@ -1,138 +1,138 @@ -package com.sucstepsoft.txrealtimelocation.services.jpush; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.v4.content.LocalBroadcastManager; -import android.util.Log; - -import com.sucstepsoft.txrealtimelocation.activitys.base.LoginActivity; -import com.sucstepsoft.txrealtimelocation.activitys.base.MainActivity; - -import org.json.JSONException; -import org.json.JSONObject; - -import cn.jpush.android.api.CmdMessage; -import cn.jpush.android.api.CustomMessage; -import cn.jpush.android.api.JPushInterface; -import cn.jpush.android.api.JPushMessage; -import cn.jpush.android.api.NotificationMessage; -import cn.jpush.android.service.JPushMessageReceiver; - -public class PushMessageReceiver extends JPushMessageReceiver{ - private static final String TAG = "PushMessageReceiver"; - @Override - public void onMessage(Context context, CustomMessage customMessage) { - Log.e(TAG,"[onMessage] "+customMessage); - processCustomMessage(context,customMessage); - } - - @Override - public void onNotifyMessageOpened(Context context, NotificationMessage message) { - Log.e(TAG,"[onNotifyMessageOpened] "+message); - try{ - //打开自定义的Activity - Intent i = new Intent(context, LoginActivity.class); - Bundle bundle = new Bundle(); - bundle.putString(JPushInterface.EXTRA_NOTIFICATION_TITLE,message.notificationTitle); - bundle.putString(JPushInterface.EXTRA_ALERT,message.notificationContent); - i.putExtras(bundle); - //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP ); - context.startActivity(i); - }catch (Throwable throwable){ - - } - } - - @Override - public void onMultiActionClicked(Context context, Intent intent) { - Log.e(TAG, "[onMultiActionClicked] 用户点击了通知栏按钮"); - String nActionExtra = intent.getExtras().getString(JPushInterface.EXTRA_NOTIFICATION_ACTION_EXTRA); - - //开发者根据不同 Action 携带的 extra 字段来分配不同的动作。 - if(nActionExtra==null){ - Log.d(TAG,"ACTION_NOTIFICATION_CLICK_ACTION nActionExtra is null"); - return; - } - if (nActionExtra.equals("my_extra1")) { - Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮一"); - } else if (nActionExtra.equals("my_extra2")) { - Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮二"); - } else if (nActionExtra.equals("my_extra3")) { - Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮三"); - } else { - Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮未定义"); - } - } - - @Override - public void onNotifyMessageArrived(Context context, NotificationMessage message) { - Log.e(TAG,"[onNotifyMessageArrived] "+message); - } - - @Override - public void onNotifyMessageDismiss(Context context, NotificationMessage message) { - Log.e(TAG,"[onNotifyMessageDismiss] "+message); - } - - @Override - public void onRegister(Context context, String registrationId) { - Log.e(TAG,"[onRegister] "+registrationId); - } - - @Override - public void onConnected(Context context, boolean isConnected) { - Log.e(TAG,"[onConnected] "+isConnected); - } - - @Override - public void onCommandResult(Context context, CmdMessage cmdMessage) { - Log.e(TAG,"[onCommandResult] "+cmdMessage); - } - - @Override - public void onTagOperatorResult(Context context,JPushMessage jPushMessage) { - TagAliasOperatorHelper.getInstance().onTagOperatorResult(context,jPushMessage); - super.onTagOperatorResult(context, jPushMessage); - } - @Override - public void onCheckTagOperatorResult(Context context,JPushMessage jPushMessage){ - TagAliasOperatorHelper.getInstance().onCheckTagOperatorResult(context,jPushMessage); - super.onCheckTagOperatorResult(context, jPushMessage); - } - @Override - public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) { - TagAliasOperatorHelper.getInstance().onAliasOperatorResult(context,jPushMessage); - super.onAliasOperatorResult(context, jPushMessage); - } - - @Override - public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) { - TagAliasOperatorHelper.getInstance().onMobileNumberOperatorResult(context,jPushMessage); - super.onMobileNumberOperatorResult(context, jPushMessage); - } - - //send msg to MainActivity - private void processCustomMessage(Context context, CustomMessage customMessage) { - if (MainActivity.isForeground) { - String message = customMessage.message; - String extras = customMessage.extra; - Intent msgIntent = new Intent(MainActivity.MESSAGE_JPUSH); - msgIntent.putExtra(MainActivity.KEY_MESSAGE, message); - if (!ExampleUtil.isEmpty(extras)) { - try { - JSONObject extraJson = new JSONObject(extras); - if (extraJson.length() > 0) { - msgIntent.putExtra(MainActivity.KEY_EXTRAS, extras); - } - } catch (JSONException e) { - - } - - } - LocalBroadcastManager.getInstance(context).sendBroadcast(msgIntent); - } - } - -} +//package com.sucstepsoft.txrealtimelocation.services.jpush; +// +//import android.content.Context; +//import android.content.Intent; +//import android.os.Bundle; +//import android.support.v4.content.LocalBroadcastManager; +//import android.util.Log; +// +//import com.sucstepsoft.txrealtimelocation.activitys.base.LoginActivity; +//import com.sucstepsoft.txrealtimelocation.activitys.base.MainActivity; +// +//import org.json.JSONException; +//import org.json.JSONObject; +// +//import cn.jpush.android.api.CmdMessage; +//import cn.jpush.android.api.CustomMessage; +//import cn.jpush.android.api.JPushInterface; +//import cn.jpush.android.api.JPushMessage; +//import cn.jpush.android.api.NotificationMessage; +//import cn.jpush.android.service.JPushMessageReceiver; +// +//public class PushMessageReceiver extends JPushMessageReceiver{ +// private static final String TAG = "PushMessageReceiver"; +// @Override +// public void onMessage(Context context, CustomMessage customMessage) { +// Log.e(TAG,"[onMessage] "+customMessage); +// processCustomMessage(context,customMessage); +// } +// +// @Override +// public void onNotifyMessageOpened(Context context, NotificationMessage message) { +// Log.e(TAG,"[onNotifyMessageOpened] "+message); +// try{ +// //打开自定义的Activity +// Intent i = new Intent(context, LoginActivity.class); +// Bundle bundle = new Bundle(); +// bundle.putString(JPushInterface.EXTRA_NOTIFICATION_TITLE,message.notificationTitle); +// bundle.putString(JPushInterface.EXTRA_ALERT,message.notificationContent); +// i.putExtras(bundle); +// //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +// i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP ); +// context.startActivity(i); +// }catch (Throwable throwable){ +// +// } +// } +// +// @Override +// public void onMultiActionClicked(Context context, Intent intent) { +// Log.e(TAG, "[onMultiActionClicked] 用户点击了通知栏按钮"); +// String nActionExtra = intent.getExtras().getString(JPushInterface.EXTRA_NOTIFICATION_ACTION_EXTRA); +// +// //开发者根据不同 Action 携带的 extra 字段来分配不同的动作。 +// if(nActionExtra==null){ +// Log.d(TAG,"ACTION_NOTIFICATION_CLICK_ACTION nActionExtra is null"); +// return; +// } +// if (nActionExtra.equals("my_extra1")) { +// Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮一"); +// } else if (nActionExtra.equals("my_extra2")) { +// Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮二"); +// } else if (nActionExtra.equals("my_extra3")) { +// Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮三"); +// } else { +// Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮未定义"); +// } +// } +// +// @Override +// public void onNotifyMessageArrived(Context context, NotificationMessage message) { +// Log.e(TAG,"[onNotifyMessageArrived] "+message); +// } +// +// @Override +// public void onNotifyMessageDismiss(Context context, NotificationMessage message) { +// Log.e(TAG,"[onNotifyMessageDismiss] "+message); +// } +// +// @Override +// public void onRegister(Context context, String registrationId) { +// Log.e(TAG,"[onRegister] "+registrationId); +// } +// +// @Override +// public void onConnected(Context context, boolean isConnected) { +// Log.e(TAG,"[onConnected] "+isConnected); +// } +// +// @Override +// public void onCommandResult(Context context, CmdMessage cmdMessage) { +// Log.e(TAG,"[onCommandResult] "+cmdMessage); +// } +// +// @Override +// public void onTagOperatorResult(Context context,JPushMessage jPushMessage) { +// TagAliasOperatorHelper.getInstance().onTagOperatorResult(context,jPushMessage); +// super.onTagOperatorResult(context, jPushMessage); +// } +// @Override +// public void onCheckTagOperatorResult(Context context,JPushMessage jPushMessage){ +// TagAliasOperatorHelper.getInstance().onCheckTagOperatorResult(context,jPushMessage); +// super.onCheckTagOperatorResult(context, jPushMessage); +// } +// @Override +// public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) { +// TagAliasOperatorHelper.getInstance().onAliasOperatorResult(context,jPushMessage); +// super.onAliasOperatorResult(context, jPushMessage); +// } +// +// @Override +// public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) { +// TagAliasOperatorHelper.getInstance().onMobileNumberOperatorResult(context,jPushMessage); +// super.onMobileNumberOperatorResult(context, jPushMessage); +// } +// +// //send msg to MainActivity +// private void processCustomMessage(Context context, CustomMessage customMessage) { +// if (MainActivity.isForeground) { +// String message = customMessage.message; +// String extras = customMessage.extra; +// Intent msgIntent = new Intent(MainActivity.MESSAGE_JPUSH); +// msgIntent.putExtra(MainActivity.KEY_MESSAGE, message); +// if (!ExampleUtil.isEmpty(extras)) { +// try { +// JSONObject extraJson = new JSONObject(extras); +// if (extraJson.length() > 0) { +// msgIntent.putExtra(MainActivity.KEY_EXTRAS, extras); +// } +// } catch (JSONException e) { +// +// } +// +// } +// LocalBroadcastManager.getInstance(context).sendBroadcast(msgIntent); +// } +// } +// +//} diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/PushService.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/PushService.java index f3d2cd0..569a0c2 100755 --- a/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/PushService.java +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/PushService.java @@ -1,8 +1,11 @@ package com.sucstepsoft.txrealtimelocation.services.jpush; -import cn.jpush.android.service.JCommonService; +//import cn.jpush.android.service.JCommonService; -public class PushService extends JCommonService { +public class PushService { } +//public class PushService extends JCommonService { +// +//} \ No newline at end of file diff --git a/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/TagAliasOperatorHelper.java b/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/TagAliasOperatorHelper.java index b342ef9..2ba610b 100755 --- a/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/TagAliasOperatorHelper.java +++ b/app/src/main/java/com/sucstepsoft/txrealtimelocation/services/jpush/TagAliasOperatorHelper.java @@ -1,378 +1,378 @@ -package com.sucstepsoft.txrealtimelocation.services.jpush; - -import android.content.Context; -import android.os.Handler; -import android.os.Message; -import android.util.SparseArray; - -import com.sucstepsoft.cm_utils.utils.LogUtils; -import com.sucstepsoft.cm_utils.utils.UserLgUtils; - -import java.util.Locale; -import java.util.Set; - -import cn.jpush.android.api.JPushInterface; -import cn.jpush.android.api.JPushMessage; -import cn.jpush.android.helper.Logger; - -/** - * 处理tagalias相关的逻辑 - */ -public class TagAliasOperatorHelper { - private static final String TAG = "JIGUANG-TagAliasHelper"; - public static int sequence = 1; - /** - * 增加 - */ - public static final int ACTION_ADD = 1; - /** - * 覆盖 - */ - public static final int ACTION_SET = 2; - /** - * 删除部分 - */ - public static final int ACTION_DELETE = 3; - /** - * 删除所有 - */ - public static final int ACTION_CLEAN = 4; - /** - * 查询 - */ - public static final int ACTION_GET = 5; - - public static final int ACTION_CHECK = 6; - - public static final int DELAY_SEND_ACTION = 1; - - public static final int DELAY_SET_MOBILE_NUMBER_ACTION = 2; - - private Context context; - - private static TagAliasOperatorHelper mInstance; - - private TagAliasOperatorHelper() { - } - - public static TagAliasOperatorHelper getInstance() { - if (mInstance == null) { - synchronized (TagAliasOperatorHelper.class) { - if (mInstance == null) { - mInstance = new TagAliasOperatorHelper(); - } - } - } - return mInstance; - } - - public void init(Context context) { - if (context != null) { - this.context = context.getApplicationContext(); - } - } - - private SparseArray setActionCache = new SparseArray(); - - public Object get(int sequence) { - return setActionCache.get(sequence); - } - - public Object remove(int sequence) { - return setActionCache.get(sequence); - } - - public void put(int sequence, Object tagAliasBean) { - setActionCache.put(sequence, tagAliasBean); - } - - private Handler delaySendHandler = new Handler() { - @Override - public void handleMessage(Message msg) { - switch (msg.what) { - case DELAY_SEND_ACTION: - if (msg.obj != null && msg.obj instanceof TagAliasBean) { - Logger.i(TAG, "on delay time"); - sequence++; - TagAliasBean tagAliasBean = (TagAliasBean) msg.obj; - setActionCache.put(sequence, tagAliasBean); - if (context != null) { - handleAction(context, sequence, tagAliasBean); - } else { - Logger.e(TAG, "#unexcepted - context was null"); - } - } else { - Logger.w(TAG, "#unexcepted - msg obj was incorrect"); - } - break; - case DELAY_SET_MOBILE_NUMBER_ACTION: - if (msg.obj != null && msg.obj instanceof String) { - Logger.i(TAG, "retry set mobile number"); - sequence++; - String mobileNumber = (String) msg.obj; - setActionCache.put(sequence, mobileNumber); - if (context != null) { - handleAction(context, sequence, mobileNumber); - } else { - Logger.e(TAG, "#unexcepted - context was null"); - } - } else { - Logger.w(TAG, "#unexcepted - msg obj was incorrect"); - } - break; - } - } - }; - - public void handleAction(Context context, int sequence, String mobileNumber) { - put(sequence, mobileNumber); - Logger.d(TAG, "sequence:" + sequence + ",mobileNumber:" + mobileNumber); - JPushInterface.setMobileNumber(context, sequence, mobileNumber); - } - - /** - * 处理设置tag - */ - public void handleAction(Context context, int sequence, TagAliasBean tagAliasBean) { - init(context); - if (tagAliasBean == null) { - Logger.w(TAG, "tagAliasBean was null"); - return; - } - put(sequence, tagAliasBean); - if (tagAliasBean.isAliasAction) { - switch (tagAliasBean.action) { - case ACTION_GET: - JPushInterface.getAlias(context, sequence); - break; - case ACTION_DELETE: - JPushInterface.deleteAlias(context, sequence); - break; - case ACTION_SET: - JPushInterface.setAlias(context, sequence, tagAliasBean.alias); - break; - default: - Logger.w(TAG, "unsupport alias action type"); - return; - } - } else { - switch (tagAliasBean.action) { - case ACTION_ADD: - JPushInterface.addTags(context, sequence, tagAliasBean.tags); - break; - case ACTION_SET: - JPushInterface.setTags(context, sequence, tagAliasBean.tags); - break; - case ACTION_DELETE: - JPushInterface.deleteTags(context, sequence, tagAliasBean.tags); - break; - case ACTION_CHECK: - //一次只能check一个tag - String tag = (String) tagAliasBean.tags.toArray()[0]; - JPushInterface.checkTagBindState(context, sequence, tag); - break; - case ACTION_GET: - JPushInterface.getAllTags(context, sequence); - break; - case ACTION_CLEAN: - JPushInterface.cleanTags(context, sequence); - break; - default: - Logger.w(TAG, "unsupport tag action type"); - return; - } - } - } - - private boolean RetryActionIfNeeded(int errorCode, TagAliasBean tagAliasBean) { - if (!ExampleUtil.isConnected(context)) { - Logger.w(TAG, "no network"); - return false; - } - //返回的错误码为6002 超时,6014 服务器繁忙,都建议延迟重试 - if (errorCode == 6002 || errorCode == 6014) { - Logger.d(TAG, "need retry"); - if (tagAliasBean != null) { - Message message = new Message(); - message.what = DELAY_SEND_ACTION; - message.obj = tagAliasBean; - delaySendHandler.sendMessageDelayed(message, 1000 * 60); - String logs = getRetryStr(tagAliasBean.isAliasAction, tagAliasBean.action, errorCode); - ExampleUtil.showToast(logs, context); - return true; - } - } - return false; - } - - private boolean RetrySetMObileNumberActionIfNeeded(int errorCode, String mobileNumber) { - if (!ExampleUtil.isConnected(context)) { - Logger.w(TAG, "no network"); - return false; - } - //返回的错误码为6002 超时,6024 服务器内部错误,建议稍后重试 - if (errorCode == 6002 || errorCode == 6024) { - Logger.d(TAG, "need retry"); - Message message = new Message(); - message.what = DELAY_SET_MOBILE_NUMBER_ACTION; - message.obj = mobileNumber; - delaySendHandler.sendMessageDelayed(message, 1000 * 60); - String str = "Failed to set mobile number due to %s. Try again after 60s."; - str = String.format(Locale.ENGLISH, str, (errorCode == 6002 ? "timeout" : "server internal error”")); - ExampleUtil.showToast(str, context); - return true; - } - return false; - - } - - private String getRetryStr(boolean isAliasAction, int actionType, int errorCode) { - String str = "Failed to %s %s due to %s. Try again after 60s."; - str = String.format(Locale.ENGLISH, str, getActionStr(actionType), (isAliasAction ? "alias" : " tags"), (errorCode == 6002 ? "timeout" : "server too busy")); - return str; - } - - private String getActionStr(int actionType) { - switch (actionType) { - case ACTION_ADD: - return "add"; - case ACTION_SET: - return "set"; - case ACTION_DELETE: - return "delete"; - case ACTION_GET: - return "get"; - case ACTION_CLEAN: - return "clean"; - case ACTION_CHECK: - return "check"; - } - return "unkonw operation"; - } - - public void onTagOperatorResult(Context context, JPushMessage jPushMessage) { - int sequence = jPushMessage.getSequence(); - Logger.i(TAG, "action - onTagOperatorResult, sequence:" + sequence + ",tags:" + jPushMessage.getTags()); - Logger.i(TAG, "tags size:" + jPushMessage.getTags().size()); - init(context); - //根据sequence从之前操作缓存中获取缓存记录 - TagAliasBean tagAliasBean = (TagAliasBean) setActionCache.get(sequence); - if (tagAliasBean == null) { -// ExampleUtil.showToast("获取缓存记录失败", context); - return; - } - if (jPushMessage.getErrorCode() == 0) { - Logger.i(TAG, "action - modify tag Success,sequence:" + sequence); - setActionCache.remove(sequence); - String logs = getActionStr(tagAliasBean.action) + " tags success"; - Logger.i(TAG, logs); - ExampleUtil.showToast(logs, context); - } else { - String logs = "Failed to " + getActionStr(tagAliasBean.action) + " tags"; - if (jPushMessage.getErrorCode() == 6018) { - //tag数量超过限制,需要先清除一部分再add - logs += ", tags is exceed limit need to clean"; - } - logs += ", errorCode:" + jPushMessage.getErrorCode(); - Logger.e(TAG, logs); - if (!RetryActionIfNeeded(jPushMessage.getErrorCode(), tagAliasBean)) { - ExampleUtil.showToast(logs, context); - } - } - } - - /** - * 设置别名回调 - * - * @param context - * @param jPushMessage - */ - public void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage) { - int sequence = jPushMessage.getSequence(); - Logger.i(TAG, "action - onCheckTagOperatorResult, sequence:" + sequence + ",checktag:" + jPushMessage.getCheckTag()); - init(context); - //根据sequence从之前操作缓存中获取缓存记录 - TagAliasBean tagAliasBean = (TagAliasBean) setActionCache.get(sequence); - if (tagAliasBean == null) { -// ExampleUtil.showToast("获取缓存记录失败", context); - return; - } - if (jPushMessage.getErrorCode() == 0) { - Logger.i(TAG, "tagBean:" + tagAliasBean); - setActionCache.remove(sequence); - String logs = getActionStr(tagAliasBean.action) + " tag " + jPushMessage.getCheckTag() + " bind state success,state:" + jPushMessage.getTagCheckStateResult(); - Logger.i(TAG, logs); - ExampleUtil.showToast(logs, context); - } else { - String logs = "Failed to " + getActionStr(tagAliasBean.action) + " tags, errorCode:" + jPushMessage.getErrorCode(); - Logger.e(TAG, logs); - if (!RetryActionIfNeeded(jPushMessage.getErrorCode(), tagAliasBean)) { - ExampleUtil.showToast(logs, context); - } - } - } - - public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) { - int sequence = jPushMessage.getSequence(); - Logger.i(TAG, "action - onAliasOperatorResult, sequence:" + sequence + ",alias:" + jPushMessage.getAlias()); - init(context); - //根据sequence从之前操作缓存中获取缓存记录 - TagAliasBean tagAliasBean = (TagAliasBean) setActionCache.get(sequence); - if (tagAliasBean == null) { -// ExampleUtil.showToast("获取缓存记录失败", context); - return; - } - if (jPushMessage.getErrorCode() == 0) { - UserLgUtils.setAlias(true); - LogUtils.e("设置成功"); - Logger.i(TAG, "action - modify alias Success,sequence:" + sequence); - setActionCache.remove(sequence); - String logs = getActionStr(tagAliasBean.action) + " alias success"; - Logger.i(TAG, logs); - ExampleUtil.showToast(logs, context); - } else { - UserLgUtils.setAlias(false); - String logs = "Failed to " + getActionStr(tagAliasBean.action) + " alias, errorCode:" + jPushMessage.getErrorCode(); - Logger.e(TAG, logs); - if (!RetryActionIfNeeded(jPushMessage.getErrorCode(), tagAliasBean)) { - ExampleUtil.showToast(logs, context); - } - } - } - - //设置手机号码回调 - public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) { - int sequence = jPushMessage.getSequence(); - Logger.i(TAG, "action - onMobileNumberOperatorResult, sequence:" + sequence + ",mobileNumber:" + jPushMessage.getMobileNumber()); - init(context); - if (jPushMessage.getErrorCode() == 0) { - Logger.i(TAG, "action - set mobile number Success,sequence:" + sequence); - setActionCache.remove(sequence); - } else { - String logs = "Failed to set mobile number, errorCode:" + jPushMessage.getErrorCode(); - Logger.e(TAG, logs); - if (!RetrySetMObileNumberActionIfNeeded(jPushMessage.getErrorCode(), jPushMessage.getMobileNumber())) { - ExampleUtil.showToast(logs, context); - } - } - } - - public static class TagAliasBean { - int action; - Set tags; - String alias; - boolean isAliasAction; - - @Override - public String toString() { - return "TagAliasBean{" + - "action=" + action + - ", tags=" + tags + - ", alias='" + alias + '\'' + - ", isAliasAction=" + isAliasAction + - '}'; - } - } - - -} +//package com.sucstepsoft.txrealtimelocation.services.jpush; +// +//import android.content.Context; +//import android.os.Handler; +//import android.os.Message; +//import android.util.SparseArray; +// +//import com.sucstepsoft.cm_utils.utils.LogUtils; +//import com.sucstepsoft.cm_utils.utils.UserLgUtils; +// +//import java.util.Locale; +//import java.util.Set; +// +//import cn.jpush.android.api.JPushInterface; +//import cn.jpush.android.api.JPushMessage; +//import cn.jpush.android.helper.Logger; +// +///** +// * 处理tagalias相关的逻辑 +// */ +//public class TagAliasOperatorHelper { +// private static final String TAG = "JIGUANG-TagAliasHelper"; +// public static int sequence = 1; +// /** +// * 增加 +// */ +// public static final int ACTION_ADD = 1; +// /** +// * 覆盖 +// */ +// public static final int ACTION_SET = 2; +// /** +// * 删除部分 +// */ +// public static final int ACTION_DELETE = 3; +// /** +// * 删除所有 +// */ +// public static final int ACTION_CLEAN = 4; +// /** +// * 查询 +// */ +// public static final int ACTION_GET = 5; +// +// public static final int ACTION_CHECK = 6; +// +// public static final int DELAY_SEND_ACTION = 1; +// +// public static final int DELAY_SET_MOBILE_NUMBER_ACTION = 2; +// +// private Context context; +// +// private static TagAliasOperatorHelper mInstance; +// +// private TagAliasOperatorHelper() { +// } +// +// public static TagAliasOperatorHelper getInstance() { +// if (mInstance == null) { +// synchronized (TagAliasOperatorHelper.class) { +// if (mInstance == null) { +// mInstance = new TagAliasOperatorHelper(); +// } +// } +// } +// return mInstance; +// } +// +// public void init(Context context) { +// if (context != null) { +// this.context = context.getApplicationContext(); +// } +// } +// +// private SparseArray setActionCache = new SparseArray(); +// +// public Object get(int sequence) { +// return setActionCache.get(sequence); +// } +// +// public Object remove(int sequence) { +// return setActionCache.get(sequence); +// } +// +// public void put(int sequence, Object tagAliasBean) { +// setActionCache.put(sequence, tagAliasBean); +// } +// +// private Handler delaySendHandler = new Handler() { +// @Override +// public void handleMessage(Message msg) { +// switch (msg.what) { +// case DELAY_SEND_ACTION: +// if (msg.obj != null && msg.obj instanceof TagAliasBean) { +// Logger.i(TAG, "on delay time"); +// sequence++; +// TagAliasBean tagAliasBean = (TagAliasBean) msg.obj; +// setActionCache.put(sequence, tagAliasBean); +// if (context != null) { +// handleAction(context, sequence, tagAliasBean); +// } else { +// Logger.e(TAG, "#unexcepted - context was null"); +// } +// } else { +// Logger.w(TAG, "#unexcepted - msg obj was incorrect"); +// } +// break; +// case DELAY_SET_MOBILE_NUMBER_ACTION: +// if (msg.obj != null && msg.obj instanceof String) { +// Logger.i(TAG, "retry set mobile number"); +// sequence++; +// String mobileNumber = (String) msg.obj; +// setActionCache.put(sequence, mobileNumber); +// if (context != null) { +// handleAction(context, sequence, mobileNumber); +// } else { +// Logger.e(TAG, "#unexcepted - context was null"); +// } +// } else { +// Logger.w(TAG, "#unexcepted - msg obj was incorrect"); +// } +// break; +// } +// } +// }; +// +// public void handleAction(Context context, int sequence, String mobileNumber) { +// put(sequence, mobileNumber); +// Logger.d(TAG, "sequence:" + sequence + ",mobileNumber:" + mobileNumber); +// JPushInterface.setMobileNumber(context, sequence, mobileNumber); +// } +// +// /** +// * 处理设置tag +// */ +// public void handleAction(Context context, int sequence, TagAliasBean tagAliasBean) { +// init(context); +// if (tagAliasBean == null) { +// Logger.w(TAG, "tagAliasBean was null"); +// return; +// } +// put(sequence, tagAliasBean); +// if (tagAliasBean.isAliasAction) { +// switch (tagAliasBean.action) { +// case ACTION_GET: +// JPushInterface.getAlias(context, sequence); +// break; +// case ACTION_DELETE: +// JPushInterface.deleteAlias(context, sequence); +// break; +// case ACTION_SET: +// JPushInterface.setAlias(context, sequence, tagAliasBean.alias); +// break; +// default: +// Logger.w(TAG, "unsupport alias action type"); +// return; +// } +// } else { +// switch (tagAliasBean.action) { +// case ACTION_ADD: +// JPushInterface.addTags(context, sequence, tagAliasBean.tags); +// break; +// case ACTION_SET: +// JPushInterface.setTags(context, sequence, tagAliasBean.tags); +// break; +// case ACTION_DELETE: +// JPushInterface.deleteTags(context, sequence, tagAliasBean.tags); +// break; +// case ACTION_CHECK: +// //一次只能check一个tag +// String tag = (String) tagAliasBean.tags.toArray()[0]; +// JPushInterface.checkTagBindState(context, sequence, tag); +// break; +// case ACTION_GET: +// JPushInterface.getAllTags(context, sequence); +// break; +// case ACTION_CLEAN: +// JPushInterface.cleanTags(context, sequence); +// break; +// default: +// Logger.w(TAG, "unsupport tag action type"); +// return; +// } +// } +// } +// +// private boolean RetryActionIfNeeded(int errorCode, TagAliasBean tagAliasBean) { +// if (!ExampleUtil.isConnected(context)) { +// Logger.w(TAG, "no network"); +// return false; +// } +// //返回的错误码为6002 超时,6014 服务器繁忙,都建议延迟重试 +// if (errorCode == 6002 || errorCode == 6014) { +// Logger.d(TAG, "need retry"); +// if (tagAliasBean != null) { +// Message message = new Message(); +// message.what = DELAY_SEND_ACTION; +// message.obj = tagAliasBean; +// delaySendHandler.sendMessageDelayed(message, 1000 * 60); +// String logs = getRetryStr(tagAliasBean.isAliasAction, tagAliasBean.action, errorCode); +// ExampleUtil.showToast(logs, context); +// return true; +// } +// } +// return false; +// } +// +// private boolean RetrySetMObileNumberActionIfNeeded(int errorCode, String mobileNumber) { +// if (!ExampleUtil.isConnected(context)) { +// Logger.w(TAG, "no network"); +// return false; +// } +// //返回的错误码为6002 超时,6024 服务器内部错误,建议稍后重试 +// if (errorCode == 6002 || errorCode == 6024) { +// Logger.d(TAG, "need retry"); +// Message message = new Message(); +// message.what = DELAY_SET_MOBILE_NUMBER_ACTION; +// message.obj = mobileNumber; +// delaySendHandler.sendMessageDelayed(message, 1000 * 60); +// String str = "Failed to set mobile number due to %s. Try again after 60s."; +// str = String.format(Locale.ENGLISH, str, (errorCode == 6002 ? "timeout" : "server internal error”")); +// ExampleUtil.showToast(str, context); +// return true; +// } +// return false; +// +// } +// +// private String getRetryStr(boolean isAliasAction, int actionType, int errorCode) { +// String str = "Failed to %s %s due to %s. Try again after 60s."; +// str = String.format(Locale.ENGLISH, str, getActionStr(actionType), (isAliasAction ? "alias" : " tags"), (errorCode == 6002 ? "timeout" : "server too busy")); +// return str; +// } +// +// private String getActionStr(int actionType) { +// switch (actionType) { +// case ACTION_ADD: +// return "add"; +// case ACTION_SET: +// return "set"; +// case ACTION_DELETE: +// return "delete"; +// case ACTION_GET: +// return "get"; +// case ACTION_CLEAN: +// return "clean"; +// case ACTION_CHECK: +// return "check"; +// } +// return "unkonw operation"; +// } +// +// public void onTagOperatorResult(Context context, JPushMessage jPushMessage) { +// int sequence = jPushMessage.getSequence(); +// Logger.i(TAG, "action - onTagOperatorResult, sequence:" + sequence + ",tags:" + jPushMessage.getTags()); +// Logger.i(TAG, "tags size:" + jPushMessage.getTags().size()); +// init(context); +// //根据sequence从之前操作缓存中获取缓存记录 +// TagAliasBean tagAliasBean = (TagAliasBean) setActionCache.get(sequence); +// if (tagAliasBean == null) { +//// ExampleUtil.showToast("获取缓存记录失败", context); +// return; +// } +// if (jPushMessage.getErrorCode() == 0) { +// Logger.i(TAG, "action - modify tag Success,sequence:" + sequence); +// setActionCache.remove(sequence); +// String logs = getActionStr(tagAliasBean.action) + " tags success"; +// Logger.i(TAG, logs); +// ExampleUtil.showToast(logs, context); +// } else { +// String logs = "Failed to " + getActionStr(tagAliasBean.action) + " tags"; +// if (jPushMessage.getErrorCode() == 6018) { +// //tag数量超过限制,需要先清除一部分再add +// logs += ", tags is exceed limit need to clean"; +// } +// logs += ", errorCode:" + jPushMessage.getErrorCode(); +// Logger.e(TAG, logs); +// if (!RetryActionIfNeeded(jPushMessage.getErrorCode(), tagAliasBean)) { +// ExampleUtil.showToast(logs, context); +// } +// } +// } +// +// /** +// * 设置别名回调 +// * +// * @param context +// * @param jPushMessage +// */ +// public void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage) { +// int sequence = jPushMessage.getSequence(); +// Logger.i(TAG, "action - onCheckTagOperatorResult, sequence:" + sequence + ",checktag:" + jPushMessage.getCheckTag()); +// init(context); +// //根据sequence从之前操作缓存中获取缓存记录 +// TagAliasBean tagAliasBean = (TagAliasBean) setActionCache.get(sequence); +// if (tagAliasBean == null) { +//// ExampleUtil.showToast("获取缓存记录失败", context); +// return; +// } +// if (jPushMessage.getErrorCode() == 0) { +// Logger.i(TAG, "tagBean:" + tagAliasBean); +// setActionCache.remove(sequence); +// String logs = getActionStr(tagAliasBean.action) + " tag " + jPushMessage.getCheckTag() + " bind state success,state:" + jPushMessage.getTagCheckStateResult(); +// Logger.i(TAG, logs); +// ExampleUtil.showToast(logs, context); +// } else { +// String logs = "Failed to " + getActionStr(tagAliasBean.action) + " tags, errorCode:" + jPushMessage.getErrorCode(); +// Logger.e(TAG, logs); +// if (!RetryActionIfNeeded(jPushMessage.getErrorCode(), tagAliasBean)) { +// ExampleUtil.showToast(logs, context); +// } +// } +// } +// +// public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) { +// int sequence = jPushMessage.getSequence(); +// Logger.i(TAG, "action - onAliasOperatorResult, sequence:" + sequence + ",alias:" + jPushMessage.getAlias()); +// init(context); +// //根据sequence从之前操作缓存中获取缓存记录 +// TagAliasBean tagAliasBean = (TagAliasBean) setActionCache.get(sequence); +// if (tagAliasBean == null) { +//// ExampleUtil.showToast("获取缓存记录失败", context); +// return; +// } +// if (jPushMessage.getErrorCode() == 0) { +// UserLgUtils.setAlias(true); +// LogUtils.e("设置成功"); +// Logger.i(TAG, "action - modify alias Success,sequence:" + sequence); +// setActionCache.remove(sequence); +// String logs = getActionStr(tagAliasBean.action) + " alias success"; +// Logger.i(TAG, logs); +// ExampleUtil.showToast(logs, context); +// } else { +// UserLgUtils.setAlias(false); +// String logs = "Failed to " + getActionStr(tagAliasBean.action) + " alias, errorCode:" + jPushMessage.getErrorCode(); +// Logger.e(TAG, logs); +// if (!RetryActionIfNeeded(jPushMessage.getErrorCode(), tagAliasBean)) { +// ExampleUtil.showToast(logs, context); +// } +// } +// } +// +// //设置手机号码回调 +// public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) { +// int sequence = jPushMessage.getSequence(); +// Logger.i(TAG, "action - onMobileNumberOperatorResult, sequence:" + sequence + ",mobileNumber:" + jPushMessage.getMobileNumber()); +// init(context); +// if (jPushMessage.getErrorCode() == 0) { +// Logger.i(TAG, "action - set mobile number Success,sequence:" + sequence); +// setActionCache.remove(sequence); +// } else { +// String logs = "Failed to set mobile number, errorCode:" + jPushMessage.getErrorCode(); +// Logger.e(TAG, logs); +// if (!RetrySetMObileNumberActionIfNeeded(jPushMessage.getErrorCode(), jPushMessage.getMobileNumber())) { +// ExampleUtil.showToast(logs, context); +// } +// } +// } +// +// public static class TagAliasBean { +// int action; +// Set tags; +// String alias; +// boolean isAliasAction; +// +// @Override +// public String toString() { +// return "TagAliasBean{" + +// "action=" + action + +// ", tags=" + tags + +// ", alias='" + alias + '\'' + +// ", isAliasAction=" + isAliasAction + +// '}'; +// } +// } +// +// +//} diff --git a/app/src/main/res/drawable-xhdpi/bg_login.jpg b/app/src/main/res/drawable-xhdpi/bg_login.jpg new file mode 100644 index 0000000000000000000000000000000000000000..81b4d16caab0f804a1ac45a2449e571d258b0a27 GIT binary patch literal 220339 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�zzr?1cdr2LWf9MqdG#{chgY-0( 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%0D`!93(mgL~y(d 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_uncheck.png b/app/src/main/res/drawable-xhdpi/ic_uncheck.png new file mode 100644 index 0000000000000000000000000000000000000000..bddebdb3c0a15edc2e18d6f2f4c87868b57dbfae GIT binary patch literal 337 zcmV-X0j~auP)(m)zW18E=)q=C*2Tmj3#T + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_company_detail.xml b/app/src/main/res/layout/activity_company_detail.xml new file mode 100644 index 0000000..f587e54 --- /dev/null +++ b/app/src/main/res/layout/activity_company_detail.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_company_info_edit.xml b/app/src/main/res/layout/activity_company_info_edit.xml new file mode 100644 index 0000000..477f9ab --- /dev/null +++ b/app/src/main/res/layout/activity_company_info_edit.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_company_lib.xml b/app/src/main/res/layout/activity_company_lib.xml new file mode 100644 index 0000000..063f706 --- /dev/null +++ b/app/src/main/res/layout/activity_company_lib.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + +