From 6c5f3267bbf0ae2bb3ee256f5f32e92c06577c59 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期二, 16 一月 2024 09:11:56 +0800
Subject: [PATCH] 定位模块

---
 app/src/main/java/com/dayu/pipirrapp/observer/LoginObserver.java      |   96 ++++++
 app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java   |  249 ++++++++++++++++
 app/src/main/res/drawable/vt_ps_open.xml                              |   18 +
 app/src/main/res/mipmap-xhdpi/login_bg1.jpeg                          |    0 
 app/src/main/AndroidManifest.xml                                      |   57 +++
 app/src/main/java/com/dayu/pipirrapp/MyApplication.java               |    3 
 app/src/main/res/values/colors.xml                                    |    3 
 gradle.properties                                                     |    1 
 app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java      |   83 +++++
 dycz.jks                                                              |    0 
 app/src/main/res/layout/activity_login.xml                            |   36 +
 app/src/main/java/com/dayu/pipirrapp/observer/MapFragmenObserver.java |   23 +
 app/src/main/java/com/dayu/pipirrapp/service/MyCommonService.java     |   12 
 app/src/main/res/drawable/vt_ps_close.xml                             |   27 +
 app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java       |    7 
 app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java        |   38 +-
 app/src/main/res/drawable/ic_edt_gray_bg.xml                          |    8 
 app/proguard-rules.pro                                                |  129 ++++++++
 app/src/main/java/com/dayu/pipirrapp/utils/MyLog.java                 |   19 +
 app/build.gradle                                                      |   81 +++-
 20 files changed, 822 insertions(+), 68 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index f970e16..475016c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,17 +3,51 @@
 }
 
 android {
+    signingConfigs {
+        debug {
+            storeFile file('../dycz.jks')
+            storePassword 'dycz@2023'
+            keyAlias 'dayu'
+            keyPassword 'dycz@2023'
+        }
+    }
     namespace 'com.dayu.pipirrapp'
     compileSdk 33
 
     defaultConfig {
         applicationId "com.dayu.pipirrapp"
         minSdk 24
-        targetSdk 33
+        targetSdk 31
         versionCode 1
         versionName "1.0"
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+
+        signingConfig signingConfigs.debug
+
+        manifestPlaceholders = [
+                JPUSH_PKGNAME : applicationId,
+                //JPush 涓婃敞鍐岀殑鍖呭悕瀵瑰簲鐨� Appkey.
+                JPUSH_APPKEY : "375adbd599ceb9977566b929",
+                //鏆傛椂濉啓榛樿鍊煎嵆鍙�.
+                JPUSH_CHANNEL : "developer-default",
+
+                //鑻ヤ笉闆嗘垚鍘傚晢閫氶亾锛屽彲鐩存帴璺宠繃浠ヤ笅閰嶇疆
+                MEIZU_APPKEY : "MZ-榄呮棌鐨凙PPKEY",
+                MEIZU_APPID : "MZ-榄呮棌鐨凙PPID",
+                XIAOMI_APPID : "MI-灏忕背鐨凙PPID",
+                XIAOMI_APPKEY : "MI-灏忕背鐨凙PPKEY",
+                OPPO_APPKEY : "OP-oppo鐨凙PPKEY",
+                OPPO_APPID : "OP-oppo鐨凙PPID",
+                OPPO_APPSECRET : "OP-oppo鐨凙PPSECRET",
+                VIVO_APPKEY : "vivo鐨凙PPKEY",
+                VIVO_APPID : "vivo鐨凙PPID",
+                HONOR_APPID : "Honor鐨凙PP ID",
+        ]
+        ndk {
+            // 璁剧疆鏀寔鐨凷O搴撴灦鏋勶紙寮�鍙戣�呭彲浠ユ牴鎹渶瑕侊紝閫夋嫨涓�涓垨澶氫釜骞冲彴鐨剆o锛�
+            abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64"
+        }
     }
 
     buildTypes {
@@ -50,11 +84,7 @@
 //    implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))
     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.10"
     //鏉冮檺
-    implementation('com.guolindev.permissionx:permissionx:1.7.1') {
-        exclude group: 'androidx.core';
-        exclude group: 'androidx.appcompat';
-        exclude group: 'androidx.annotation';
-    }
+    implementation 'com.github.getActivity:XXPermissions:18.5'
     //鍒楄〃
     implementation 'io.github.scwang90:refresh-layout-kernel:2.0.5'
     implementation 'io.github.scwang90:refresh-header-classics:2.0.5'
@@ -79,38 +109,39 @@
     //loding
     implementation 'com.pnikosis:materialish-progress:1.7'
 
+    //瀹氫綅
+    implementation 'com.baidu.lbsyun:BaiduMapSDK_Location:9.3.7'
 
 
 
-
-    //鎺ㄩ�佺浉鍏�
-    // 姝ゅ浠Push 5.0.0 鐗堟湰涓轰緥锛�5.0.0 鐗堟湰寮�濮嬪彲浠ヨ嚜鍔ㄦ媺鍙� JCore 鍖咃紝鏃犻渶鍙﹀閰嶇疆
+//    //鎺ㄩ�佺浉鍏�
+//    // 姝ゅ浠Push 5.0.0 鐗堟湰涓轰緥锛�5.0.0 鐗堟湰寮�濮嬪彲浠ヨ嚜鍔ㄦ媺鍙� JCore 鍖咃紝鏃犻渶鍙﹀閰嶇疆
     implementation 'cn.jiguang.sdk:jpush:5.2.2'
-    //鑻ヤ笉闆嗘垚鍘傚晢閫氶亾锛屽彲鐩存帴璺宠繃浠ヤ笅渚濊禆
-    // 鏋佸厜鍘傚晢鎻掍欢鐗堟湰涓庢帴鍏� JPush 鐗堟湰淇濇寔涓�鑷达紝涓嬪悓
-    // 鎺ュ叆鍗庝负鍘傚晢
+//    //鑻ヤ笉闆嗘垚鍘傚晢閫氶亾锛屽彲鐩存帴璺宠繃浠ヤ笅渚濊禆
+//    // 鏋佸厜鍘傚晢鎻掍欢鐗堟湰涓庢帴鍏� JPush 鐗堟湰淇濇寔涓�鑷达紝涓嬪悓
+//    // 鎺ュ叆鍗庝负鍘傚晢
     implementation 'com.huawei.hms:push:6.5.0.300'
     implementation 'cn.jiguang.sdk.plugin:huawei:5.2.2'
-    // 鎺ュ叆 FCM 鍘傚晢
-    implementation 'com.google.firebase:firebase-messaging:23.0.5'
-    implementation 'cn.jiguang.sdk.plugin:fcm:5.2.2'
-    // 鎺ュ叆榄呮棌鍘傚晢
+//    // 鎺ュ叆 FCM 鍘傚晢
+//    implementation 'com.google.firebase:firebase-messaging:23.0.5'
+//    implementation 'cn.jiguang.sdk.plugin:fcm:5.2.2'
+//    // 鎺ュ叆榄呮棌鍘傚晢
     implementation 'cn.jiguang.sdk.plugin:meizu:5.2.2'
-    // 鎺ュ叆 VIVO 鍘傚晢
+//    // 鎺ュ叆 VIVO 鍘傚晢
     implementation 'cn.jiguang.sdk.plugin:vivo:5.2.2'
-    // 鎺ュ叆灏忕背鍘傚晢
+//    // 鎺ュ叆灏忕背鍘傚晢
     implementation 'cn.jiguang.sdk.plugin:xiaomi:5.2.2'
-    // 鎺ュ叆 OPPO 鍘傚晢
-    implementation 'cn.jiguang.sdk.plugin:oppo:5.2.2'
-    // JPush Android SDK v4.6.0 寮�濮嬶紝闇�瑕佸崟鐙紩鍏� oppo 鍘傚晢 aar 锛岃涓嬭浇瀹樼綉 SDK 鍖呭苟鎶� jpush-android-xxx-release/third-push/oppo/libs 涓嬬殑 aar 鏂囦欢鍗曠嫭鎷疯礉涓�浠藉埌搴旂敤 module/libs 涓�
-    implementation(name: 'com.heytap.msp-push-3.1.0', ext: 'aar')
-    //浠ヤ笅涓� OPPO 3.1.0 aar闇�瑕佷緷璧�
+//    // 鎺ュ叆 OPPO 鍘傚晢
+//    implementation 'cn.jiguang.sdk.plugin:oppo:5.2.2'
+//    // JPush Android SDK v4.6.0 寮�濮嬶紝闇�瑕佸崟鐙紩鍏� oppo 鍘傚晢 aar 锛岃涓嬭浇瀹樼綉 SDK 鍖呭苟鎶� jpush-android-xxx-release/third-push/oppo/libs 涓嬬殑 aar 鏂囦欢鍗曠嫭鎷疯礉涓�浠藉埌搴旂敤 module/libs 涓�
+//    implementation(name: 'com.heytap.msp-push-3.1.0', ext: 'aar')
+//    //浠ヤ笅涓� OPPO 3.1.0 aar闇�瑕佷緷璧�
     implementation 'com.google.code.gson:gson:2.6.2'
     implementation 'commons-codec:commons-codec:1.6'
     implementation 'androidx.annotation:annotation:1.1.0'
-    // 鎺ュ叆鑽h��鍘傚晢
+//    // 鎺ュ叆鑽h��鍘傚晢
     implementation 'cn.jiguang.sdk.plugin:honor:5.2.2'
 
 //    apply plugin: 'com.google.gms.google-services'
-    apply plugin: 'com.huawei.agconnect'
+//    apply plugin: 'com.huawei.agconnect'
 }
\ No newline at end of file
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 481bb43..bb1430f 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -18,4 +18,131 @@
 
 # If you keep the line number information, uncomment this to
 # hide the original source file name.
-#-renamesourcefileattribute SourceFile
\ No newline at end of file
+#-renamesourcefileattribute SourceFile
+#---------------------------------鍩烘湰鎸囦护鍖�----------------------------------
+-keepattributes SourceFile,LineNumberTable
+-keepattributes Exceptions, Signature, InnerClasses
+-keepclasseswithmembernames class * { # 淇濇寔native鏂规硶涓嶈娣锋穯
+    native <methods>;
+}
+-keep class * implements Android.os.Parcelable { # 淇濇寔Parcelable涓嶈娣锋穯
+    public static final Android.os.Parcelable$Creator *;
+}
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+-keepattributes *Annotation*        #淇濇寔娉ㄨВ
+#---------------------------------榛樿淇濈暀鍖�---------------------------------
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.view.View
+-keep public class com.android.vending.licensing.ILicensingService
+-keep class android.support.** {*;}
+
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+-keepclassmembers class * extends android.app.Activity{
+    public void *(android.view.View);
+}
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+-keep public class * extends android.view.View{
+    *** get*();
+    void set*(***);
+    public <init>(android.content.Context);
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+-keep class * implements android.os.Parcelable {
+  public static final android.os.Parcelable$Creator *;
+}
+-keepclassmembers class * implements java.io.Serializable {
+    static final long serialVersionUID;
+    private static final java.io.ObjectStreamField[] serialPersistentFields;
+    private void writeObject(java.io.ObjectOutputStream);
+    private void readObject(java.io.ObjectInputStream);
+    java.lang.Object writeReplace();
+    java.lang.Object readResolve();
+}
+-keep class **.R$* {
+ *;
+}
+-keepclassmembers class * {
+    void *(**On*Event);
+}
+#----------------------------------------------------------------------------
+
+-keep   class com.amap.api.maps.**{*;}
+-keep   class com.autonavi.**{*;}
+-keep   class com.amap.api.trace.**{*;}
+-keep class com.amap.api.location.**{*;}
+-keep class com.amap.api.fence.**{*;}
+-keep class com.autonavi.aps.amapapi.model.**{*;}
+-keep   class com.amap.api.services.**{*;}
+-keep class com.amap.api.maps2d.**{*;}
+-keep class com.amap.api.mapcore2d.**{*;}
+-keep class com.amap.api.navi.**{*;}
+-keep class com.autonavi.**{*;}
+
+
+-keep public class * implements com.bumptech.glide.module.GlideModule
+-keep public class * extends com.bumptech.glide.module.AppGlideModule
+-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
+  **[] $VALUES;
+  public *;
+}
+
+-keep public class com.zuo.nfcproject.yanzhou.bean.** {*;}
+-keep public class * extends android.view.View {
+}
+-keep class **.R$* {*;}
+
+#okhttp
+-dontwarn okhttp3.**
+-keep class okhttp3.**{*;}
+-keep interface okhttp3.**{*;}
+
+#rxjava
+-keep public class io.reactivex.android.**{*;}
+-keep public class io.reactivex.**{*;}
+-keep public class rx.android.**{*;}
+-keep public class rx.**{*;}
+-keep public class javax.annotation.**{*;}
+-keep public class javax.inject.**{*;}
+-keep class com.google.gson.** { *; }
+#glide
+-keep public class com.bumptech.glide.**{*;}
+-keep public class com.luck.picture.lib.**{*;}
+-keep public class androidx.**{*;}
+
+-keep public class com.bumptech.**{*;}
+-keep public class com.scwang.**{*;}
+-keep public class kotlin.**{*;}
+-keep public class retrofit2.**{*;}
+-keep public class okio.**{*;}
+-keep public class com.zuo.nfcproject.yanzhou.net.**{*;}
+
+# 鑻ndroid API 楂樹簬27娣诲姞浠ヤ笅锛堜笉闇�瑕�/锛�:
+
+-dontwarn com.bumptech.glide.load.resource.bitmap.VideoDecoder
+# for DexGuard only
+#-keep resource xmlelements manifest/application/meta-data@value=GlideModule
+-keep class com.xuexiang.xupdate.entity.** { *; }
+
+# Note: if you use a custom API parser for parsing, you need to add confusion to your custom API entities. Here are the custom API entity obfuscation rules configured in this demo:
+-keep class com.xuexiang.xupdatedemo.entity.** { *; }
+
+-keep class com.hjq.permissions.** {*;}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 417fc70..3b6420b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,35 @@
     xmlns:tools="http://schemas.android.com/tools">
     <!--鍏佽璁块棶缃戠粶锛屽繀閫夋潈闄�-->
     <uses-permission android:name="android.permission.INTERNET" />
+
+
+    <!--鐢ㄤ簬杩涜缃戠粶瀹氫綅-->
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
+    <!--鐢ㄤ簬璁块棶GPS瀹氫綅-->
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
+    <!--鐢ㄤ簬鑾峰彇杩愯惀鍟嗕俊鎭紝鐢ㄤ簬鏀寔鎻愪緵杩愯惀鍟嗕俊鎭浉鍏崇殑鎺ュ彛-->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
+    <!--鐢ㄤ簬璁块棶wifi缃戠粶淇℃伅锛寃ifi淇℃伅浼氱敤浜庤繘琛岀綉缁滃畾浣�-->
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
+    <!--鐢ㄤ簬鑾峰彇wifi鐨勮幏鍙栨潈闄愶紝wifi淇℃伅浼氱敤鏉ヨ繘琛岀綉缁滃畾浣�-->
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
+    <!--鐢ㄤ簬璁块棶缃戠粶锛岀綉缁滃畾浣嶉渶瑕佷笂缃�-->
+    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
+    <!--鐢ㄤ簬鍐欏叆缂撳瓨鏁版嵁鍒版墿灞曞瓨鍌ㄥ崱-->
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
+    <!--鐢ㄤ簬鐢宠璋冪敤A-GPS妯″潡-->
+    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
+    <!--濡傛灉璁剧疆浜唗arget >= 28 濡傛灉闇�瑕佸惎鍔ㄥ悗鍙板畾浣嶅垯蹇呴』澹版槑杩欎釜鏉冮檺-->
+    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
+    <!--濡傛灉鎮ㄧ殑搴旂敤闇�瑕佸悗鍙板畾浣嶆潈闄愶紝涓旀湁鍙兘杩愯鍦ˋndroid Q璁惧涓�,骞朵笖璁剧疆浜唗arget>28锛屽繀椤诲鍔犺繖涓潈闄愬0鏄�-->
+    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
+    <!--     妯℃嫙浣嶇疆-->
+    <uses-permission
+        android:name="android.permission.ACCESS_MOCK_LOCATION"
+        tools:ignore="MockLocation,ProtectedPermissions" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+
+
     <application
         android:allowBackup="true"
         android:dataExtractionRules="@xml/data_extraction_rules"
@@ -14,10 +43,13 @@
         android:theme="@style/Theme.PipIrrApp"
         android:usesCleartextTraffic="true"
         tools:targetApi="31">
-
+        <!-- 鍛婄煡 XXPermissions 褰撳墠椤圭洰宸茬粡閫傞厤浜嗗垎鍖哄瓨鍌ㄧ壒鎬� -->
+        <meta-data
+            android:name="ScopedStorage"
+            android:value="true" />
 
         <activity
-            android:name=".activity.MainActivity"
+            android:name=".activity.LoginActivity"
             android:exported="true">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -25,7 +57,7 @@
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
-        <!--        <activity android:name=".activity.MainActivity" />-->
+        <activity android:name=".activity.MainActivity" />
         <!-- Required since 5.2.0 -->
         <!-- 鏂扮殑 tag/alias 鎺ュ彛缁撴灉杩斿洖闇�瑕佸紑鍙戣�呴厤缃竴涓嚜瀹氫箟鐨凷ervice -->
         <!-- 3.3.0寮�濮嬫墍鏈変簨浠跺皢閫氳繃璇ョ被鍥炶皟 -->
@@ -43,7 +75,8 @@
         <!-- Since JCore2.0.0 Required SDK鏍稿績鍔熻兘-->
         <!-- 鍙厤缃產ndroid:process鍙傛暟灏哠ervice鏀惧湪鍏朵粬杩涚▼涓紱android:enabled灞炴�т笉鑳芥槸false -->
         <!-- 杩欎釜鏄嚜瀹氫箟Service锛岃缁ф壙鏋佸厜JCommonService锛屽彲浠ュ湪鏇村鎵嬫満骞冲彴涓婁娇寰楁帹閫侀�氶亾淇濇寔鐨勬洿绋冲畾 -->
-        <service android:name="xx.xx.XService"
+        <service
+            android:name=".service.MyCommonService"
             android:enabled="true"
             android:exported="false"
             android:process=":pushcore">
@@ -51,6 +84,22 @@
                 <action android:name="cn.jiguang.user.service.action" />
             </intent-filter>
         </service>
+
+        <service
+            android:name=".service.MyLocationService"
+            android:enabled="true"
+            android:exported="false" />
+
+
+        <!--鐧惧害瀹氫綅-->
+        <meta-data
+            android:name="com.baidu.lbsapi.API_KEY"
+            android:value="Ky5wvrB9A9Rztsh3rQO8v8oNRgQM27NV"></meta-data>
+        <service
+            android:name="com.baidu.location.f"
+            android:enabled="true"
+            android:process=":remote"></service>
+
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/app/src/main/java/com/dayu/pipirrapp/MyApplication.java b/app/src/main/java/com/dayu/pipirrapp/MyApplication.java
index 9966b8d..8fc0407 100644
--- a/app/src/main/java/com/dayu/pipirrapp/MyApplication.java
+++ b/app/src/main/java/com/dayu/pipirrapp/MyApplication.java
@@ -2,6 +2,8 @@
 
 import android.app.Application;
 
+import com.tencent.bugly.crashreport.CrashReport;
+
 import cn.jpush.android.api.JPushInterface;
 
 /**
@@ -19,5 +21,6 @@
         myApplication = this;
         JPushInterface.setDebugMode(true);
         JPushInterface.init(this);
+        CrashReport.initCrashReport(getApplicationContext(), "3d4bcf7046", false);
     }
 }
diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java
index 5c0270b..41a44b6 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java
@@ -2,31 +2,46 @@
 
 import android.content.Intent;
 import android.os.Bundle;
+import android.os.PersistableBundle;
 import android.text.InputType;
+import android.util.Log;
 import android.view.LayoutInflater;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 
 import com.dayu.pipirrapp.R;
 import com.dayu.pipirrapp.databinding.ActivityLoginBinding;
+import com.dayu.pipirrapp.observer.LoginObserver;
+import com.hjq.permissions.OnPermissionCallback;
+import com.hjq.permissions.Permission;
+import com.hjq.permissions.XXPermissions;
+
+import java.util.List;
 
 
-public class LoginActivity extends AppCompatActivity {
-    private boolean isPasswordVisible = false;
+public class LoginActivity extends BaseActivity {
+    private final String TAG = "LoginActivity";
+
     ActivityLoginBinding binding;
+    private boolean isPasswordVisible = false;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
+
+        Log.i(TAG, "onCreate");
         super.onCreate(savedInstanceState);
         binding = ActivityLoginBinding.inflate(LayoutInflater.from(this));
         setContentView(binding.getRoot());
+        getLifecycle().addObserver(new LoginObserver(this));
         binding.passwordBtn.setOnClickListener((view) -> {
             togglePasswordVisibility();
         });
         binding.loginBtn.setOnClickListener(v -> {
             Intent intent = new Intent(LoginActivity.this, MainActivity.class);
             startActivity(intent);
+            this.finish();
         });
     }
 
@@ -35,11 +50,11 @@
             // 濡傛灉瀵嗙爜鍙锛岄殣钘忓瘑鐮�
             binding.password.setInputType(
                     InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
-            binding.passwordBtn.setImageResource(R.drawable.ic_visibility_off);
+            binding.passwordBtn.setImageResource(R.drawable.vt_ps_close);
         } else {
             // 濡傛灉瀵嗙爜闅愯棌锛屾樉绀哄瘑鐮�
             binding.password.setInputType(InputType.TYPE_CLASS_TEXT);
-            binding.passwordBtn.setImageResource(R.drawable.ic_visibility);
+            binding.passwordBtn.setImageResource(R.drawable.vt_ps_open);
         }
 
         // 绉诲姩鍏夋爣鍒版湯灏�
@@ -48,4 +63,64 @@
         // 鍒囨崲鏍囧織
         isPasswordVisible = !isPasswordVisible;
     }
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+        Log.i(TAG, "onStart");
+    }
+
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        Log.i(TAG, "onResume");
+    }
+
+
+    @Override
+    protected void onRestart() {
+        super.onRestart();
+        Log.i(TAG, "onRestart");
+    }
+
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        Log.i(TAG, "onPause");
+    }
+
+
+    @Override
+    protected void onStop() {
+        super.onStop();
+        Log.i(TAG, "onStop");
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        Log.i(TAG, "onDestroy");
+    }
+
+
+    @Override
+    protected void onSaveInstanceState(@NonNull Bundle outState) {
+        super.onSaveInstanceState(outState);
+        Log.i(TAG, "onSaveInstanceState");
+    }
+
+    @Override
+    public void onSaveInstanceState(@NonNull Bundle outState, @NonNull PersistableBundle outPersistentState) {
+        super.onSaveInstanceState(outState, outPersistentState);
+        Log.i(TAG, "onSaveInstanceState---outPersistentState");
+    }
+
+    @Override
+    protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
+        super.onRestoreInstanceState(savedInstanceState);
+    }
+
+
 }
diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java
index 5a8268d..0e5e3b7 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java
@@ -33,7 +33,6 @@
         super.onCreate(savedInstanceState);
         binding = ActivityMainBinding.inflate(LayoutInflater.from(this));
         MapFragment mapFragment = new MapFragment();
-
         setContentView(binding.getRoot());
         mFragment.add(mapFragment);
         mFragment.add(new MainFragment());
@@ -41,6 +40,12 @@
         initTab();
     }
 
+    private void getPermission(){
+
+    }
+
+
+
     private void initTab() {
         TabAdapter adapter = new TabAdapter(getSupportFragmentManager(), mFragment);
         binding.viewPager.setAdapter(adapter);
diff --git a/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java b/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
index 9f8833d..ca7bf6e 100644
--- a/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
+++ b/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
@@ -1,13 +1,13 @@
 package com.dayu.pipirrapp.fragment;
 
 import android.content.Context;
+import android.content.Intent;
 import android.location.LocationManager;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.WindowManager;
 import android.webkit.JsResult;
 import android.webkit.WebChromeClient;
 import android.webkit.WebSettings;
@@ -16,12 +16,14 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.lifecycle.DefaultLifecycleObserver;
-import androidx.lifecycle.Lifecycle;
-import androidx.lifecycle.LifecycleEventObserver;
-import androidx.lifecycle.LifecycleObserver;
 import androidx.lifecycle.LifecycleOwner;
 
 import com.dayu.pipirrapp.databinding.FragmentMapBinding;
+import com.dayu.pipirrapp.observer.MapFragmenObserver;
+import com.dayu.pipirrapp.service.MyLocationService;
+import com.dayu.pipirrapp.utils.ToastUtil;
+
+import java.util.List;
 
 /**
  * author: zuo
@@ -29,7 +31,7 @@
  * Time: 10:16
  * 澶囨敞锛氬湴鍥鹃〉
  */
-public class MapFragment extends BaseFragment implements DefaultLifecycleObserver {
+public class MapFragment extends BaseFragment {
 
     FragmentMapBinding binding;
     LocationManager locationManager;
@@ -39,13 +41,12 @@
     @Override
     public void onAttach(@NonNull Context context) {
         super.onAttach(context);
-        requireActivity().getLifecycle().addObserver(this);
+        requireActivity().getLifecycle().addObserver(new MapFragmenObserver());
     }
 
     @Override
     public void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
     }
 
     @Nullable
@@ -57,16 +58,13 @@
         initWebView();
         mWebView.loadUrl("http://192.168.3.178:3002/");
         initView();
+        //寮�鍚畾浣�
+        Intent location = new Intent(this.getActivity(), MyLocationService.class);
+        location.putExtra("isSingle", false);
+        this.getActivity().startService(location);
         return binding.getRoot();
     }
 
-
-    @Override
-    public void onCreate(@NonNull LifecycleOwner owner) {
-        DefaultLifecycleObserver.super.onCreate(owner);
-
-        Log.i("MapFragment", "onCreate");
-    }
 
     @Override
     public void onResume() {
@@ -128,21 +126,21 @@
         webSettings.setBuiltInZoomControls(true); // 璁剧疆鍐呯疆鐨勭缉鏀炬帶浠讹紝鑻ヤ负 false锛屽垯璇� WebView 涓嶅彲缂╂斁
         webSettings.setDisplayZoomControls(false); // 闅愯棌鍘熺敓鐨勭缉鏀炬帶浠�
         //webView寮笿sAlert
-        mWebView.setWebChromeClient(new WebChromeClient(){
-            @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
+        mWebView.setWebChromeClient(new WebChromeClient() {
+            @Override
+            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                 return super.onJsAlert(view, url, message, result);
             }
         });
 
     }
 
-    void initView(){
-        binding.flyBtn.setOnClickListener(v->{
-            mWebView.evaluateJavascript("javascript:data()",value -> {
+    void initView() {
+        binding.flyBtn.setOnClickListener(v -> {
+            mWebView.evaluateJavascript("javascript:moveTo(116.399565,39.89432)", value -> {
 
             });
         });
     }
-
 
 }
diff --git a/app/src/main/java/com/dayu/pipirrapp/observer/LoginObserver.java b/app/src/main/java/com/dayu/pipirrapp/observer/LoginObserver.java
new file mode 100644
index 0000000..802937c
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/observer/LoginObserver.java
@@ -0,0 +1,96 @@
+package com.dayu.pipirrapp.observer;
+
+import android.app.Activity;
+import android.text.InputType;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.DefaultLifecycleObserver;
+import androidx.lifecycle.LifecycleOwner;
+
+import com.dayu.pipirrapp.R;
+import com.dayu.pipirrapp.activity.LoginActivity;
+import com.hjq.permissions.OnPermissionCallback;
+import com.hjq.permissions.Permission;
+import com.hjq.permissions.XXPermissions;
+
+import java.util.List;
+
+/**
+ * author: zuo
+ * Date: 2024-01-11
+ * Time: 15:47
+ * 澶囨敞锛氱櫥褰曢〉鐩稿叧閫昏緫
+ */
+public class LoginObserver implements DefaultLifecycleObserver {
+    protected String[] needPermissions = {
+            Permission.ACCESS_COARSE_LOCATION,
+            Permission.ACCESS_FINE_LOCATION,
+            Permission.WRITE_EXTERNAL_STORAGE,
+            Permission.READ_EXTERNAL_STORAGE,
+            Permission.READ_PHONE_STATE
+    };
+
+    Activity myActivity;
+
+
+    public LoginObserver(@NonNull Activity activity) {
+        myActivity = activity;
+    }
+
+    @Override
+    public void onCreate(@NonNull LifecycleOwner owner) {
+        DefaultLifecycleObserver.super.onCreate(owner);
+        getPermissions();
+
+    }
+
+    private void getPermissions() {
+        try {
+            XXPermissions.with(myActivity)
+                    // 鐢宠鍗曚釜鏉冮檺
+//                    .permission(Permission.RECORD_AUDIO)
+                    // 鐢宠澶氫釜鏉冮檺
+                    .permission(needPermissions)
+                    // 璁剧疆鏉冮檺璇锋眰鎷︽埅鍣紙灞�閮ㄨ缃級
+                    //.interceptor(new PermissionInterceptor())
+                    // 璁剧疆涓嶈Е鍙戦敊璇娴嬫満鍒讹紙灞�閮ㄨ缃級
+                    //.unchecked()
+                    .request(new OnPermissionCallback() {
+
+                        @Override
+                        public void onGranted(@NonNull List<String> permissions, boolean 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
+                        public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
+                            if (doNotAskAgain) {
+//                                toast("琚案涔呮嫆缁濇巿鏉冿紝璇锋墜鍔ㄦ巿浜堝綍闊冲拰鏃ュ巻鏉冮檺");
+                                // 濡傛灉鏄姘镐箙鎷掔粷灏辫烦杞埌搴旂敤鏉冮檺绯荤粺璁剧疆椤甸潰
+
+
+                            } else {
+//                                toast("鑾峰彇褰曢煶鍜屾棩鍘嗘潈闄愬け璐�");
+                            }
+                        }
+                    });
+
+        } catch (Throwable e) {
+            e.printStackTrace();
+        }
+    }
+
+
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/observer/MapFragmenObserver.java b/app/src/main/java/com/dayu/pipirrapp/observer/MapFragmenObserver.java
new file mode 100644
index 0000000..01271c7
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/observer/MapFragmenObserver.java
@@ -0,0 +1,23 @@
+package com.dayu.pipirrapp.observer;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.DefaultLifecycleObserver;
+import androidx.lifecycle.LifecycleOwner;
+
+/**
+ * author: zuo
+ * Date: 2024-01-11
+ * Time: 17:37
+ * 澶囨敞锛氬湴鍥鹃〉鐩稿叧閫昏緫
+ */
+public class MapFragmenObserver implements DefaultLifecycleObserver {
+
+
+
+
+
+    @Override
+    public void onCreate(@NonNull LifecycleOwner owner) {
+        DefaultLifecycleObserver.super.onCreate(owner);
+    }
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/service/MyCommonService.java b/app/src/main/java/com/dayu/pipirrapp/service/MyCommonService.java
new file mode 100644
index 0000000..46f6593
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/service/MyCommonService.java
@@ -0,0 +1,12 @@
+package com.dayu.pipirrapp.service;
+
+import cn.jpush.android.service.JCommonService;
+
+/**
+ * author: zuo
+ * Date: 2024-01-10
+ * Time: 11:51
+ * 澶囨敞锛�
+ */
+public class MyCommonService extends JCommonService {
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java b/app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java
new file mode 100644
index 0000000..61a4cf3
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java
@@ -0,0 +1,249 @@
+package com.dayu.pipirrapp.service;
+
+import android.annotation.SuppressLint;
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Intent;
+import android.graphics.BitmapFactory;
+import android.location.Criteria;
+import android.location.Location;
+import android.location.LocationListener;
+import android.location.LocationManager;
+import android.os.Bundle;
+import android.os.IBinder;
+
+import androidx.annotation.Nullable;
+
+import com.baidu.location.BDAbstractLocationListener;
+import com.baidu.location.BDLocation;
+import com.baidu.location.LocationClient;
+import com.baidu.location.LocationClientOption;
+import com.dayu.pipirrapp.R;
+import com.dayu.pipirrapp.activity.MainActivity;
+import com.dayu.pipirrapp.utils.MyLog;
+import com.tencent.bugly.crashreport.CrashReport;
+
+/**
+ * author: zuo
+ * Date: 2024-01-10
+ * Time: 14:39
+ * 澶囨敞锛�
+ */
+public class MyLocationService extends Service {
+
+    private LocationManager locationManager;
+    private MyLocationListener listener;
+
+    private LocationClient mBDLocationClient = null;
+    private MyBDLocationListener mBDLocationListener;
+
+    /**
+     * 鏄惁涓�娆℃�у畾浣�
+     */
+    boolean isSingle;
+
+    @Nullable
+    @Override
+    public IBinder onBind(Intent intent) {
+        return null;
+    }
+
+
+    @Override
+    public int onStartCommand(Intent intent, int flags, int startId) {
+        MyLog.i("onStartCommand()");
+        isSingle = intent.getBooleanExtra("isSingle", false);
+        if (!isSingle) {
+            // 鍦ˋPI11涔嬪悗鏋勫缓Notification鐨勬柟寮�
+            Notification.Builder builder = new Notification.Builder
+                    (this.getApplicationContext());
+            //鑾峰彇涓�涓狽otification鏋勯�犲櫒
+            Intent nfIntent = new Intent(this, MainActivity.class);
+
+            builder.setContentIntent(PendingIntent.
+                            getActivity(this, 0, nfIntent, PendingIntent.FLAG_IMMUTABLE)) // 璁剧疆PendingIntent
+                    .setLargeIcon(BitmapFactory.decodeResource(this.getResources(),
+                            R.mipmap.ic_launcher)) // 璁剧疆涓嬫媺鍒楄〃涓殑鍥炬爣(澶у浘鏍�)
+                    .setContentTitle(getResources().getString(R.string.app_name)) // 璁剧疆涓嬫媺鍒楄〃閲岀殑鏍囬
+                    .setSmallIcon(R.mipmap.ic_launcher) // 璁剧疆鐘舵�佹爮鍐呯殑灏忓浘鏍�
+                    .setContentText("姝e湪鍚庡彴杩愯") // 璁剧疆涓婁笅鏂囧唴瀹�
+                    .setWhen(System.currentTimeMillis()); // 璁剧疆璇ラ�氱煡鍙戠敓鐨勬椂闂�
+
+            Notification notification = builder.build(); // 鑾峰彇鏋勫缓濂界殑Notification
+            notification.defaults = Notification.DEFAULT_SOUND; //璁剧疆涓洪粯璁ょ殑澹伴煶
+        }
+        return super.onStartCommand(intent, flags, startId);
+    }
+
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+
+        createNativeLocation();
+//        createBDLocation();
+    }
+
+//    /**
+//     * @param isSingle 鏄惁鏄崟娆″畾浣�
+//     */
+//    public MyLocationService(boolean isSingle) {
+//        this.isSingle = isSingle;
+//
+//    }
+
+    /**
+     * 鍘熺敓鐨勫畾浣嶆湇鍔�
+     */
+    @SuppressLint("MissingPermission")
+    private void createNativeLocation() {
+
+        try {
+            locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
+            listener = new MyLocationListener();
+
+            Criteria criteria = new Criteria();
+            // 鏌ヨ绮惧害锛氶珮锛孋riteria.ACCURACY_COARSE姣旇緝绮楃暐锛孋riteria.ACCURACY_FINE鍒欐瘮杈冪簿纭�
+            criteria.setAccuracy(Criteria.ACCURACY_FINE);
+            //涓嶈姹傛捣鎷�
+            criteria.setAltitudeRequired(false);
+            //涓嶈姹傛柟浣�
+            criteria.setBearingRequired(false);
+            //鍏佽鏈夎姳璐�
+            criteria.setCostAllowed(true);
+            //浣庡姛鑰�
+            criteria.setPowerRequirement(Criteria.POWER_LOW);
+            String provider = locationManager.getBestProvider(criteria, true);
+            MyLog.i("瀹氫綅鐨刾rovider:" + provider);
+
+            //绗簩涓弬鏁版槸闂撮殧鏃堕棿 绗笁涓弬鏁版槸闂撮殧澶氬皯璺濈锛岃繖閲屾垜璇曡繃浜嗕笉鍚岀殑鍚勭缁勫悎锛岃兘鑾峰彇鍒颁綅缃氨鏄兘锛屼笉鑳借幏鍙栧氨鏄笉鑳�
+            locationManager.requestLocationUpdates(provider, 1000, 0, listener);
+        } catch (Exception e) {
+            CrashReport.postCatchedException(e);
+        }
+    }
+
+
+    /**
+     * 绗笁鏂圭櫨搴﹀畾浣嶆湇鍔�
+     */
+    private void createBDLocation() {
+        try {
+            LocationClient.setAgreePrivacy(true);
+            mBDLocationClient = new LocationClient(this.getBaseContext());
+            mBDLocationListener = new MyBDLocationListener();
+            //娉ㄥ唽鐩戝惉鍑芥暟
+            mBDLocationClient.registerLocationListener(mBDLocationListener);
+            //閰嶇疆鐧惧害瀹氫綅鐨勯�夐」
+            LocationClientOption option = new LocationClientOption();
+            //鍙�夛紝榛樿楂樼簿搴︼紝璁剧疆瀹氫綅妯″紡锛岄珮绮惧害锛屼綆鍔熻�楋紝浠呰澶�
+            option.setLocationMode(LocationClientOption.LocationMode.Battery_Saving);
+            //鍙�夛紝榛樿gcj02锛岃缃繑鍥炵殑瀹氫綅缁撴灉鍧愭爣绯伙紝濡傛灉閰嶅悎鐧惧害鍦板浘浣跨敤锛屽缓璁缃负bd09ll;
+            option.setCoorType("WGS84");
+            //鍙�夛紝榛樿0锛屽嵆浠呭畾浣嶄竴娆★紝璁剧疆鍙戣捣杩炵画瀹氫綅璇锋眰鐨勯棿闅旈渶瑕佸ぇ浜庣瓑浜�1000ms鎵嶆槸鏈夋晥鐨�
+            option.setScanSpan(1000);
+            //鍙�夛紝璁剧疆鏄惁闇�瑕佸湴鍧�淇℃伅锛岄粯璁や笉闇�瑕�
+            option.setIsNeedAddress(true);
+            //鍙�夛紝璁剧疆鏄惁闇�瑕佸湴鍧�鎻忚堪
+            option.setIsNeedLocationDescribe(false);
+            //鍙�夛紝璁剧疆鏄惁闇�瑕佽澶囨柟鍚戠粨鏋�
+            option.setNeedDeviceDirect(false);
+            //鍙�夛紝榛樿false锛岃缃槸鍚﹀綋鍗槦瀹氫綅鏈夋晥鏃舵寜鐓�1S1娆¢鐜囪緭鍑哄崼鏄熷畾浣嶇粨鏋�
+            option.setLocationNotify(true);
+            //鍙�夛紝榛樿true锛屽畾浣峉DK鍐呴儴鏄竴涓猄ERVICE锛屽苟鏀惧埌浜嗙嫭绔嬭繘绋嬶紝璁剧疆鏄惁鍦╯top鐨勬椂鍊欐潃姝昏繖涓繘绋嬶紝榛樿涓嶆潃姝�
+            option.setIgnoreKillProcess(true);
+            //鍙�夛紝榛樿false锛岃缃槸鍚﹀紑鍚崼鏄熷畾浣�
+            option.setOpenGnss(true);
+            //鍙�夛紝榛樿false锛岃缃畾浣嶆椂鏄惁闇�瑕佹捣鎷斾俊鎭紝榛樿涓嶉渶瑕侊紝闄ゅ熀纭�瀹氫綅鐗堟湰閮藉彲鐢�
+            option.setIsNeedAltitude(false);
+
+            mBDLocationClient.setLocOption(option);
+            //寮�鍚櫨搴﹀畾浣�
+            mBDLocationClient.start();
+        } catch (Exception e) {
+            e.printStackTrace();
+            CrashReport.postCatchedException(e);
+        }
+    }
+
+
+    class MyLocationListener implements LocationListener {
+        // 浣嶇疆鏀瑰彉鏃惰幏鍙栫粡绾害
+        @Override
+        public void onLocationChanged(Location location) {
+
+            String longitude = "Longitude:" + location.getLongitude();
+            String latitude = "Latitude:" + location.getLatitude();
+            MyLog.i("鍘熺敓瀹氫綅onLocationChanged:  Latitude锛�" + latitude + "  Longitude锛�" + longitude);
+//            鏄惁涓�娆℃�у畾浣�
+            if (isSingle) {
+                stopSelf();  // 鑾峰彇鍒扮粡绾害浠ュ悗锛屽仠姝㈣service
+            }
+        }
+
+        // 鐘舵�佹敼鍙樻椂
+        @Override
+        public void onStatusChanged(String provider, int status, Bundle extras) {
+            MyLog.i("onStatusChanged - provider:" + provider + " status:" + status);
+        }
+
+        // 鎻愪緵鑰呭彲浠ヤ娇鐢ㄦ椂
+        @Override
+        public void onProviderEnabled(String provider) {
+            MyLog.i("GPS寮�鍚簡");
+        }
+
+        // 鎻愪緵鑰呬笉鍙互浣跨敤鏃�
+        @Override
+        public void onProviderDisabled(String provider) {
+            MyLog.i("GPS鍏抽棴浜�");
+        }
+
+    }
+
+    /**
+     * 鐧惧害瀹氫綅鐨勭洃鍚�
+     */
+    class MyBDLocationListener extends BDAbstractLocationListener {
+
+        @Override
+        public void onReceiveLocation(BDLocation location) {
+
+            double latitude = location.getLatitude();    //鑾峰彇绾害淇℃伅
+            double longitude = location.getLongitude();    //鑾峰彇缁忓害淇℃伅
+//            MyLog.i("鐧惧害鐨勭洃鍚� latitude锛�" + latitude);
+//            MyLog.i("鐧惧害鐨勭洃鍚� longitude锛�" + longitude);
+            MyLog.i("鐧惧害鐨勭洃鍚�  onBaiduLocationChanged:   latitude锛�" + latitude + "   longitude锛�" + longitude);
+            if (isSingle) {
+                stopSelf();  // 鑾峰彇鍒扮粡绾害浠ュ悗锛屽仠姝㈣service
+            }
+        }
+
+    }
+
+    @Override
+    public void onDestroy() {
+        MyLog.i("MyLocationService--onDestroy");
+        // 鍋滄鍓嶅彴鏈嶅姟--鍙傛暟锛氳〃绀烘槸鍚︾Щ闄や箣鍓嶇殑閫氱煡
+        stopForeground(true);
+        super.onDestroy();
+        // 鍋滄鎵�鏈夌殑瀹氫綅鏈嶅姟
+        try {
+            if (locationManager != null) {
+                locationManager.removeUpdates(listener);
+            }
+            if (mBDLocationClient != null) {
+                mBDLocationClient.stop();
+                mBDLocationClient.unRegisterLocationListener(mBDLocationListener);
+            }
+
+        } catch (Exception e) {
+            CrashReport.postCatchedException(e);
+        }
+
+
+    }
+
+
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/utils/MyLog.java b/app/src/main/java/com/dayu/pipirrapp/utils/MyLog.java
new file mode 100644
index 0000000..bb34e84
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/utils/MyLog.java
@@ -0,0 +1,19 @@
+package com.dayu.pipirrapp.utils;
+
+import android.util.Log;
+
+/**
+ * author: zuo
+ * Date: 2024-01-10
+ * Time: 15:46
+ * 澶囨敞锛�
+ */
+public class MyLog {
+    public static final String TAG = "pipirrappTAG";
+
+    public static void i(String data) {
+        Log.i(TAG, data);
+    }
+
+
+}
diff --git a/app/src/main/res/drawable/ic_edt_gray_bg.xml b/app/src/main/res/drawable/ic_edt_gray_bg.xml
new file mode 100644
index 0000000..2dbd1e6
--- /dev/null
+++ b/app/src/main/res/drawable/ic_edt_gray_bg.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#F6F7FB" />
+    <corners android:radius="5dp" />
+    <stroke
+        android:width="1dp"
+        android:color="#ededed" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/vt_ps_close.xml b/app/src/main/res/drawable/vt_ps_close.xml
new file mode 100644
index 0000000..7236c87
--- /dev/null
+++ b/app/src/main/res/drawable/vt_ps_close.xml
@@ -0,0 +1,27 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="12dp"
+    android:height="12dp"
+    android:viewportWidth="48"
+    android:viewportHeight="48">
+  <path
+      android:pathData="M9.858,18C6.239,21 4,24 4,24C4,24 12.954,36 24,36C25.37,36 26.708,35.815 28,35.492M20.032,12.5C21.314,12.182 22.641,12 24,12C35.046,12 44,24 44,24C44,24 41.761,27 38.142,30"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#3a68fc"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M20.314,20.621C19.498,21.511 19,22.697 19,24C19,26.761 21.239,29 24,29C25.363,29 26.598,28.455 27.5,27.57"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#3a68fc"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M42,42L6,6"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#3a68fc"
+      android:strokeLineCap="round"/>
+</vector>
diff --git a/app/src/main/res/drawable/vt_ps_open.xml b/app/src/main/res/drawable/vt_ps_open.xml
new file mode 100644
index 0000000..0455026
--- /dev/null
+++ b/app/src/main/res/drawable/vt_ps_open.xml
@@ -0,0 +1,18 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="12dp"
+    android:height="12dp"
+    android:viewportWidth="48"
+    android:viewportHeight="48">
+  <path
+      android:pathData="M24,36C35.046,36 44,24 44,24C44,24 35.046,12 24,12C12.954,12 4,24 4,24C4,24 12.954,36 24,36Z"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#3a68fc"/>
+  <path
+      android:pathData="M24,29C26.761,29 29,26.761 29,24C29,21.239 26.761,19 24,19C21.239,19 19,21.239 19,24C19,26.761 21.239,29 24,29Z"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#3a68fc"/>
+</vector>
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index 514bfbf..20d17fe 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -2,41 +2,53 @@
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="vertical">
+    android:background="@mipmap/login_bg1"
+    android:orientation="vertical"
+    android:padding="20dp">
 
 
     <EditText
         android:id="@+id/name"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
+        android:layout_height="45dp"
         android:layout_above="@+id/psLL"
         android:layout_marginLeft="20dp"
         android:layout_marginRight="20dp"
-        android:layout_marginBottom="10dp"
-        android:hint="璇疯緭鍏ヨ处鍙�" />
+        android:layout_marginBottom="20dp"
+        android:background="@drawable/ic_edt_gray_bg"
+        android:hint="璇疯緭鍏ヨ处鍙�"
+        android:paddingLeft="15dp" />
 
     <RelativeLayout
         android:id="@+id/psLL"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
+        android:layout_height="45dp"
         android:layout_above="@+id/loginBtn"
         android:layout_marginLeft="20dp"
         android:layout_marginRight="20dp"
-        android:layout_marginBottom="20dp"
+        android:layout_marginBottom="30dp"
+        android:background="@drawable/ic_edt_gray_bg"
+        android:gravity="center"
         android:orientation="horizontal">
 
         <EditText
             android:id="@+id/password"
             android:layout_width="match_parent"
-            android:layout_height="wrap_content"
+            android:layout_height="40dp"
+            android:layout_centerVertical="true"
             android:layout_toLeftOf="@+id/passwordBtn"
+            android:background="@color/white"
             android:hint="璇疯緭鍏ュ瘑鐮�"
-            android:inputType="textPassword" />
+            android:inputType="textPassword"
+            android:paddingLeft="15dp"
+           />
 
-        <ImageButton
+        <ImageView
             android:id="@+id/passwordBtn"
             android:layout_width="40dp"
-            android:layout_height="40dp"
+            android:layout_height="25dp"
+            android:src="@drawable/vt_ps_close"
+            android:layout_marginRight="5dp"
             android:layout_alignParentRight="true"
             android:layout_centerVertical="true" />
     </RelativeLayout>
@@ -48,10 +60,10 @@
         android:layout_alignParentBottom="true"
         android:layout_marginLeft="20dp"
         android:layout_marginRight="20dp"
-        android:layout_marginBottom="20dp"
+        android:layout_marginBottom="50dp"
         android:background="@drawable/ic_blue_background"
         android:gravity="center"
-        android:text="鐧诲綍"
+        android:text="鐧�    褰�"
         android:textColor="@color/white"
         android:textSize="20sp" />
 
diff --git a/app/src/main/res/mipmap-xhdpi/login_bg1.jpeg b/app/src/main/res/mipmap-xhdpi/login_bg1.jpeg
new file mode 100644
index 0000000..742cd3c
--- /dev/null
+++ b/app/src/main/res/mipmap-xhdpi/login_bg1.jpeg
Binary files differ
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 0f6a9ed..3df516b 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -3,6 +3,7 @@
     <color name="black">#FF000000</color>
     <color name="white">#FFFFFFFF</color>
     <color name="base_blue">#3C9CFF</color>
-    <color name="down_blue">#0C2DEA</color>
+    <color name="down_blue">#3a68fc</color>
     <color name="ws_pay_alpha">#00000000</color>
+    <color name="title_color">#3a68fc</color>
 </resources>
\ No newline at end of file
diff --git a/dycz.jks b/dycz.jks
new file mode 100644
index 0000000..d8a85a0
--- /dev/null
+++ b/dycz.jks
Binary files differ
diff --git a/gradle.properties b/gradle.properties
index 3e927b1..ba32d98 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -15,6 +15,7 @@
 # Android operating system, and which are packaged with your app's APK
 # https://developer.android.com/topic/libraries/support-library/androidx-rn
 android.useAndroidX=true
+android.enableJetifier=true
 # Enables namespacing of each library's R class so that its R class includes only the
 # resources declared in the library itself and none from the library's dependencies,
 # thereby reducing the size of the R class for that library

--
Gitblit v1.8.0