管灌系统巡查员智能手机App
zuoxiao
2024-12-05 3a4343f647f038a9e8366f17b33a07fdfd8b680c
1.添加巡检时的后台定位权限获取
5个文件已修改
122 ■■■■■ 已修改文件
app/src/main/AndroidManifest.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/observer/LoginObserver.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/utils/NetUtils.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/AndroidManifest.xml
@@ -26,7 +26,6 @@
    <!--如果您的应用需要后台定位权限,且有可能运行在Android Q设备上,并且设置了target>28,必须增加这个权限声明-->
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission
        android:name="android.permission.WRITE_MEDIA_STORAGE"
app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
@@ -53,6 +53,10 @@
import com.dayu.pipirrapp.utils.ToastUtil;
import com.dayu.pipirrapp.utils.WebViewUtils;
import com.dayu.pipirrapp.view.ConfirmDialog;
import com.dayu.pipirrapp.view.TipUtil;
import com.hjq.permissions.OnPermissionCallback;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;
import com.jeremyliao.liveeventbus.LiveEventBus;
import com.tencent.bugly.crashreport.CrashReport;
@@ -300,7 +304,7 @@
//                    }
                    } else {
                        //下载瓦片
                        ApiManager.getInstance().donwLoadTile(MapFragment.this.getContext(),androidUrl);
                        ApiManager.getInstance().donwLoadTile(MapFragment.this.getContext(), androidUrl);
                    }
//                    Log.d(TAG, "在线加载>>>" + url);
                }
@@ -343,7 +347,17 @@
        });
        //巡检按钮
        binding.inspectButton.setOnClickListener(v -> {
            chageInspecState(InspectionUtils.STAT_INSPECTION_ONCLICK);
            if (XXPermissions.isGranted(MapFragment.this.getContext(), Permission.ACCESS_BACKGROUND_LOCATION)) {
                chageInspecState(InspectionUtils.STAT_INSPECTION_ONCLICK);
            } else {
                TipUtil.show(MapFragment.this.getActivity(), "巡检定位需要您选择\"始终允许\"定位信息,否则无法巡检。", new TipUtil.TipListener() {
                    @Override
                    public void onCancle() {
                        getPermissions();
                    }
                });
            }
        });
        //暂停巡检
        binding.inspectPause.setOnClickListener(v -> {
@@ -522,18 +536,21 @@
                        confirmDialog.dismiss();
                        chageInspecState(InspectionUtils.NO_INSPECTION);
                        SharedPreferencesHelper.getInstance(MapFragment.this.getContext()).put(CommonKeyName.inspectionState, InspectionUtils.NO_INSPECTION);
                        //更新本地数据库结束时间
                        mInspectionBean.setStopTime(DateUtils.getNowDateStr());
                        InspectionUtils.upataInspectionData(MapFragment.this.getContext(), mInspectionBean);
                        //上报结束时间
                        InspectionLocationBean inspectionLocationBean = InspectionUtils.createInspectionLocation(lastLatLonBean, mInspectionBean);
                        InspectionUtils.addInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean);
                        pushLocationData(inspectionLocationBean);
                        mInspectionBean = new InspectionBean();
                        //清除地图巡检轨迹
                        mWebView.evaluateJavascript("javascript:cleanLocationLay()", value -> {
                        });
                        lastLatLonBean = null;
                        //有可能还没获取到定位信息就结束巡检了
                        if (lastLatLonBean != null) {
                            //更新本地数据库结束时间
                            mInspectionBean.setStopTime(DateUtils.getNowDateStr());
                            InspectionUtils.upataInspectionData(MapFragment.this.getContext(), mInspectionBean);
                            //上报结束时间
                            InspectionLocationBean inspectionLocationBean = InspectionUtils.createInspectionLocation(lastLatLonBean, mInspectionBean);
                            InspectionUtils.addInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean);
                            pushLocationData(inspectionLocationBean);
                            mInspectionBean = new InspectionBean();
                            //清除地图巡检轨迹
                            mWebView.evaluateJavascript("javascript:cleanLocationLay()", value -> {
                            });
                            lastLatLonBean = null;
                        }
                    }
                });
                confirmDialog.show();
@@ -590,4 +607,42 @@
        SharedPreferencesHelper.getInstance(this.getContext()).put(CommonKeyName.inspectionState, InspectionUtils.STAT_INSPECTION);
    }
    /**
     * 申请后台定位权限
     */
    private void getPermissions() {
        try {
            XXPermissions.with(MapFragment.this.getContext())
                    // 申请多个权限
                    .permission(Permission.ACCESS_BACKGROUND_LOCATION)
                    .request(new OnPermissionCallback() {
                        @Override
                        public void onGranted(@NonNull List<String> permissions, boolean allGranted) {
                            if (allGranted) {
                                chageInspecState(InspectionUtils.STAT_INSPECTION_ONCLICK);
                            }
                        }
                        @Override
                        public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
                            if (doNotAskAgain) {
                                // 如果是被永久拒绝就跳转到应用权限系统设置页面
                                TipUtil.show(MapFragment.this.getActivity(), "被永久拒绝授权,请手动授予定位始终允许权限!选择“权限”-->“位置信息”-->“始终允许”,然后返回应用。", new TipUtil.TipListener() {
                                    @Override
                                    public void onCancle() {
                                        XXPermissions.startPermissionActivity(MapFragment.this.getContext(), permissions);
                                    }
                                });
                            } else {
                                ToastUtil.showToastLong(MapFragment.this.getContext(), "获取定位始终允许权限失败");
                            }
                        }
                    });
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }
}
app/src/main/java/com/dayu/pipirrapp/observer/LoginObserver.java
@@ -30,6 +30,7 @@
            Permission.WRITE_EXTERNAL_STORAGE,
            Permission.READ_EXTERNAL_STORAGE,
            Permission.READ_PHONE_STATE
    };
    Activity myActivity;
@@ -60,7 +61,7 @@
                        @Override
                        public void onGranted(@NonNull List<String> permissions, boolean allGranted) {
                            if (permissions.contains(Permission.WRITE_EXTERNAL_STORAGE)){
                            if (permissions.contains(Permission.WRITE_EXTERNAL_STORAGE)) {
                                TagBean tagBean = DaoSingleton.getInstance(myActivity).tagDao().findFirst();
                                if (tagBean == null || TextUtils.isEmpty(tagBean.getTag())) {
                                    choesLibrary();
@@ -68,24 +69,9 @@
                                    MyApplication.myApplication.myTag = tagBean.getTag();
                                }
                            }
                            if (allGranted) {
                            }
                            if (!allGranted) {
//                                toast("获取部分权限成功,但部分权限未正常授予");
                                return;
                            }
//                            if (!XXPermissions.isGranted(myActivity, Permission.SYSTEM_ALERT_WINDOW)) {
//                                new TipDialog(MainActivity.this, "请开启悬浮窗权限,允许本应用显示在其他应用的上层", new TipUtil.TipListener() {
//                                    @Override
//                                    public void onCancle() {
//                                        XXPermissions.startPermissionActivity(MainActivity.this, Permission.SYSTEM_ALERT_WINDOW);
//                                    }
//                                }).show();
//                            }
//                            toast("获取录音和日历权限成功");
                        }
                        @Override
@@ -93,8 +79,6 @@
                            if (doNotAskAgain) {
//                                toast("被永久拒绝授权,请手动授予录音和日历权限");
                                // 如果是被永久拒绝就跳转到应用权限系统设置页面
                            } else {
//                                toast("获取录音和日历权限失败");
                            }
app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java
@@ -21,14 +21,13 @@
import com.dayu.pipirrapp.net.BaseResponse;
import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
import com.dayu.pipirrapp.utils.DateUtils;
import com.dayu.pipirrapp.utils.MyLog;
import com.tencent.bugly.crashreport.CrashReport;
import java.util.List;
import java.util.UUID;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.functions.Action;
import io.reactivex.rxjava3.functions.Consumer;
import io.reactivex.rxjava3.schedulers.Schedulers;
/**
@@ -163,6 +162,7 @@
     * @param inspectionLocationBeans
     */
    private static void postInspectionData(Context context, InspectionBean inspectionBean, List<InspectionLocationBean> inspectionLocationBeans) {
        MyLog.d("postInspectionData>>>上传未上传成功的数据");
        InspectionRequest inspectionRequest = new InspectionRequest();
        inspectionRequest.setInspectId(inspectionBean.getInspectId());
        inspectionRequest.setInspectorId(inspectionBean.getInspectorId());
@@ -182,19 +182,20 @@
            public void onNext(BaseResponse<List<InsectionResult>> t) {
                try {
                    if (t.isSuccess()) {
                        MyLog.d("postInspectionData>>>上传未上传成功的数据》》》》成功");
                        if (t.getContent() != null) {
                            inspectionBean.setInspectId(String.valueOf(t.getContent().get(0).getInspectId()));
                            InspectionUtils.upataInspectionData(context, inspectionBean);
                        }
                        DaoSingleton.getAsynchInstance(context).inspectionLocationDao().updataByInspectIdSetIsPost(inspectionBean.getmInspectId()).subscribeOn(Schedulers.io()).observeOn(Schedulers.io()).subscribe(() -> {
                            // 插入成功的回调
                            Log.d(TAG, "addInspectionLocationData数据插入成功");
                            Log.d(TAG, "updataByInspectIdSetIsPost数据插入成功");
                        }, throwable -> {
                            // 处理错误
                            Log.e(TAG, "addInspectionLocationData数据插入失败", throwable);
                            Log.e(TAG, "updataByInspectIdSetIsPost数据插入失败", throwable);
                        });
                    } else {
                        MyLog.d("postInspectionData>>>上传未上传成功的数据》》》》失败");
                    }
                } catch (Exception e) {
                    e.printStackTrace();
@@ -272,7 +273,6 @@
        inspectionLocationBean.setmInspectId(mInspectionBean.getmInspectId());
        inspectionLocationBean.setLocateTime(DateUtils.getNowDateStr());
        inspectionLocationBean.setPost(false);
        inspectionLocationBean.setLng(String.valueOf(latLonBean.getLongitude()));
        inspectionLocationBean.setLat(String.valueOf(latLonBean.getLatitude()));
        return inspectionLocationBean;
app/src/main/java/com/dayu/pipirrapp/utils/NetUtils.java
@@ -51,17 +51,11 @@
    public static void registerNetCallBack(Context context, ConnectivityManager.NetworkCallback networkCallback) {
        // 注册网络状态监听
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        // 构建一个 NetworkRequest,指定感兴趣的网络类型
        NetworkRequest networkRequest = new NetworkRequest.Builder()
                .build();
        // 网络回调
        // 注册网络监听
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            cm.registerNetworkCallback(networkRequest, networkCallback);