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