diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..146ab09 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..146ab09 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..146ab09 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 9e9754c..fa31bc0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,13 +2,13 @@ android { compileSdkVersion 29 - buildToolsVersion "29.0.1" + buildToolsVersion "29.0.3" defaultConfig { applicationId "com.casic.smartwellapp" minSdkVersion 17 targetSdkVersion 29 - versionCode 6 - versionName "1.1" + versionCode 7 + versionName "v1.1.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true } @@ -42,8 +42,8 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'androidx.appcompat:appcompat:1.0.2' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' @@ -51,7 +51,7 @@ implementation 'com.lbx:xTools:2.1.2' implementation 'org.bouncycastle:bcmail-jdk15on:1.59' implementation 'org.apache.commons:commons-lang3:3.1' - implementation 'com.alibaba:fastjson:1.2.12' + implementation 'com.alibaba:fastjson:1.2.68' implementation files('libs/guava-17.0.jar') implementation files('libs/androidsvg-1.2.2-beta-1.jar') implementation files('libs/EzLicenseAPI4Android.jar') @@ -62,5 +62,4 @@ implementation files('libs/kxml2-2.3.0.jar') implementation files('libs/jackson-mapper-lgpl-1.9.5.jar') implementation files('libs/jackson-core-lgpl-1.9.5.jar') - } diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..146ab09 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 9e9754c..fa31bc0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,13 +2,13 @@ android { compileSdkVersion 29 - buildToolsVersion "29.0.1" + buildToolsVersion "29.0.3" defaultConfig { applicationId "com.casic.smartwellapp" minSdkVersion 17 targetSdkVersion 29 - versionCode 6 - versionName "1.1" + versionCode 7 + versionName "v1.1.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true } @@ -42,8 +42,8 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'androidx.appcompat:appcompat:1.0.2' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' @@ -51,7 +51,7 @@ implementation 'com.lbx:xTools:2.1.2' implementation 'org.bouncycastle:bcmail-jdk15on:1.59' implementation 'org.apache.commons:commons-lang3:3.1' - implementation 'com.alibaba:fastjson:1.2.12' + implementation 'com.alibaba:fastjson:1.2.68' implementation files('libs/guava-17.0.jar') implementation files('libs/androidsvg-1.2.2-beta-1.jar') implementation files('libs/EzLicenseAPI4Android.jar') @@ -62,5 +62,4 @@ implementation files('libs/kxml2-2.3.0.jar') implementation files('libs/jackson-mapper-lgpl-1.9.5.jar') implementation files('libs/jackson-core-lgpl-1.9.5.jar') - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 55d30fd..6e34b75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,20 +23,31 @@ android:allowBackup="true" android:icon="@mipmap/znzj" android:label="@string/app_name" + android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme"> + android:theme="@style/AppThemeNoActionBar" + android:usesCleartextTraffic="true"> - + - + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..146ab09 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 9e9754c..fa31bc0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,13 +2,13 @@ android { compileSdkVersion 29 - buildToolsVersion "29.0.1" + buildToolsVersion "29.0.3" defaultConfig { applicationId "com.casic.smartwellapp" minSdkVersion 17 targetSdkVersion 29 - versionCode 6 - versionName "1.1" + versionCode 7 + versionName "v1.1.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true } @@ -42,8 +42,8 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'androidx.appcompat:appcompat:1.0.2' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' @@ -51,7 +51,7 @@ implementation 'com.lbx:xTools:2.1.2' implementation 'org.bouncycastle:bcmail-jdk15on:1.59' implementation 'org.apache.commons:commons-lang3:3.1' - implementation 'com.alibaba:fastjson:1.2.12' + implementation 'com.alibaba:fastjson:1.2.68' implementation files('libs/guava-17.0.jar') implementation files('libs/androidsvg-1.2.2-beta-1.jar') implementation files('libs/EzLicenseAPI4Android.jar') @@ -62,5 +62,4 @@ implementation files('libs/kxml2-2.3.0.jar') implementation files('libs/jackson-mapper-lgpl-1.9.5.jar') implementation files('libs/jackson-core-lgpl-1.9.5.jar') - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 55d30fd..6e34b75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,20 +23,31 @@ android:allowBackup="true" android:icon="@mipmap/znzj" android:label="@string/app_name" + android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme"> + android:theme="@style/AppThemeNoActionBar" + android:usesCleartextTraffic="true"> - + - + + + + \ No newline at end of file diff --git a/app/src/main/assets/EzServiceClient4Android.lic b/app/src/main/assets/EzServiceClient4Android.lic index 2f9a1c1..15c2e85 100644 --- a/app/src/main/assets/EzServiceClient4Android.lic +++ b/app/src/main/assets/EzServiceClient4Android.lic @@ -1,6 +1,6 @@ -f276fd50425e1516bd5fa1183d719e5188c3d196594315e14e003fa87c9edb2c5172bc06037febce58bc0cb093a6f99f46dfdd1ec48d8741353d2fb3aeb83b914b05c17e9431fcbd51ab5f05bc3ad8c850fcb169aa98094bedcae7c1687ed72580026733d8ea16ed193577111f96acf6b2bde5cbc093595fc611830331fd9409b33655b1d1734b525eda690fd3b9a525c6eb82869de321130dfce541c14dd51560d8def56d7363c23e50c539710bdf33c339fc9f70cd66319412b8684a2956e70c0e8a47586e2acfcb0292156ebfe275a48928e4f1fad576cff804a7e6efedac10faa1144f5c734e8fd877466b116dde7587da47d0ec9d851f3649145eef20baf8e55cce84ce5c2c469fee3374049e50e6d7e6badbd6f331ab55c3bc68df8fba9ed026ca69d0989d87dd101747d6d4e078fd972f8ec6372ae6d7e6badbd6f331da0c0ea0953023b21f3649145eef20ba876ec217701656916b67f9fc6bbfcf54e1d71aa6968e0d522edce43a825f8266ce240451cc3d2a6cb5f148d610d02c343fd149b7c6371aab62fcde50ab3874a019de7eb6e745bf9072215ec225e991125323109221ba90946ba59f7d8c7f4a96 -0cfa6c2c5eec924477d4869070a624f6338800b0cceeb3798744936e17f5dbe5ffc65ef9607dd62f7470c2075f59152b424800a6f3c2377ca4679102c0f410ea85fe94939f7b08cfa0c82baad441753322d07953b79a7c68e171ee41ac939ae90e153fef75c459a8acc519bae9a396a3754123ca956f1ccf4ed57fe0619215b3 -3082049030820255308201bea0030201020208485c64d3fba087a9300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3730303230313135333232385a180f32393730303230313135333232385a304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f7420436572746966696361746530819f300d06092a864886f70d010101050003818d00308189028181009467336181f34b81907f72d59f096b9e0bc71ec89dfe4ed3a3ccb9d4b493864d900fc2522ef090364ec86266c160101175fcceed985f2d63f598c915bc2096a1f7d42103a03f4798943a411c094da3e90666307c371c41e13ad19ee7ae54ec56219e9a80995dfd41199c43431764caff8d04c4c999818b8ac02590ffe7d97f390203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414a90da8091835c082a5e696dfe7f34066bfb2d4f7300d06092a864886f70d0101050500038181000c3163614e6017d01d1af63b67524528b37e8df1d999c7963681e0cebaf4c8846c56618723a25d5b0518cd8488422900e00720ba3f9f51c8bdbb18ee0c449a86f7e4abedce5684c6c4a558d7f8ca1e40028f2bf78d386337b0f7774220f89747107fbe4130e4f8dcd3d97019a499d73e183f626be08bd6e8f16b1fec8b6f46b2308202333082019ca003020102020863db91e7a94c1470300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f74204365727469666963617465301e170d3139303832323136303030305a170d3230303232323136303030305a302a310b300906035504061302434e311b301906035504030c12e58c97e4baace5b882e585ace5ae89e5b18030819f300d06092a864886f70d010101050003818d00308189028181009c67407ffc5a2cd8461f605e8ff0d96b4b6f9d09c0d776e1a1f67bd75d78426dd18525c0d4b3a5fc7252cc5c98c285e86785323190ad002882f8ad73e7b2e0cab6429fa0fa9884404ecc44dd0b560d798dd1dc52da219c781042c29d5e952fa9967748f21923611a564692d7f87d7b2c28737a69c8a499ce1e8687e3d599f6cd0203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414e873cba8b05182fcf5b0923afe0f7689466bd69a300d06092a864886f70d01010505000381810064368d80681403ac336e2d56125e057297ee491311ebda1ff5a050fe595cecabb285f3d395b6f5febf4d1e63767502acc922afe2452c68e02064e20c3c26c95c0a3d47cad4fdffbbb1640b6c03a67032d0a97ff4e2c2b3cb0f47327a3a644c2e9b5646af94d217c2eb0004117438cb1a7807707d345c3245a5e8a177ad5f1c35 +2510c4e69e269c8687aa62b975a8602285b31397afcbad497365138451765ed014ce89dd0005f08b90f365c081e38158037fe2a8aeae5765c59631f1a3703ce533f397bd9d5ad479c384a0434c2e8b6efca6442f38f3ddef31070f468b6f254008220ed4d33115dee053e46413d5f5a1ed74661b2e1f433a62ee986573dd22212f8061a1bded6b1ac13c4f0563986bcbe6c8086e15baefa963ba5b634ece82d902e83594c665b521dc7a8fce05122d7ed1573cf995ee331ab3f6d838d365cec76e443ceee1098d1dd011162692a0d3e10daf7ffc9d3de23eab186ad41e3cec6abb18bd091996d6040d8f536ea5e3328bf684c2dcede64a13b8549f1b024834e7f936fb7277d042c89d2f8d473272d0b7ab3024361f9779e03c63ce5f131295dcf0f167b96fb42626bb73792cf055412c069021d40678c09eab3024361f9779e0eea4a46ce6916af2b8549f1b024834e7a4b02eccbf324d7e75d2377fdb6279c8896959ccf251cac44da4194093c886834e28736e937a21e6e2c6054b8490c7542fc1ff3ec1e4a556293b42e4da1aa87dc72d8ca4659b7834cdc0181c4ec3700b233e26b1f9747324075a0a63335cfcef +4d39594536c496286928e6ca5e8e84aadf7b9c8d59409eb6e7d71d4b5ccd13ade769e96bd98099fe859b394d7572698f43f903af899886cfb54a873b19c7721cc6a20613278b157876401f2a29862c43d8748ac8c967dda527dfbd25923ca9e8183e89dfd88ac818fe94ed03360d7dc5f0a76527d7b82173b8f48a0cc70266a3 +3082049230820255308201bea0030201020208485c64d3fba087a9300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3730303230313135333232385a180f32393730303230313135333232385a304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f7420436572746966696361746530819f300d06092a864886f70d010101050003818d00308189028181009467336181f34b81907f72d59f096b9e0bc71ec89dfe4ed3a3ccb9d4b493864d900fc2522ef090364ec86266c160101175fcceed985f2d63f598c915bc2096a1f7d42103a03f4798943a411c094da3e90666307c371c41e13ad19ee7ae54ec56219e9a80995dfd41199c43431764caff8d04c4c999818b8ac02590ffe7d97f390203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414a90da8091835c082a5e696dfe7f34066bfb2d4f7300d06092a864886f70d0101050500038181000c3163614e6017d01d1af63b67524528b37e8df1d999c7963681e0cebaf4c8846c56618723a25d5b0518cd8488422900e00720ba3f9f51c8bdbb18ee0c449a86f7e4abedce5684c6c4a558d7f8ca1e40028f2bf78d386337b0f7774220f89747107fbe4130e4f8dcd3d97019a499d73e183f626be08bd6e8f16b1fec8b6f46b2308202353082019ea00302010202085a09ebe5b8193320300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3231303431323136303030305a180f32303530303431323136303030305a302a310b300906035504061302434e311b301906035504030c12e58c97e4baace5b882e585ace5ae89e5b18030819f300d06092a864886f70d010101050003818d0030818902818100a9d0c339353cd1747bbcbb1573682de0a41f1c190e6aeb6a8af69e91236c0bfd6e6fec41b287b86ef5d7bd09d3631e34386dc8dd328e18364b3d067bdfb0c64a51de72ac238e026ccb32fc798cc350667fbfbfd3e451d009463ca872a99457499c88c7977e5e9f12118296d825de7febc2813f4e86d5bc96e4b477bf4a22e5bd0203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e041604147499564586404aa44a5ef1ad4b836996fdcb01f3300d06092a864886f70d0101050500038181006b57878916c1a3b8c6c15b7213c5ded9704bb66a59c759a3765194926be4f660fec68a6f7b52ffbb15e580eae637341e0c799a9859760bf463ef44a6263e6dff2ef53cbd4d9fddf79dcd771a84e8ba16ff75fad5bc33b0886d21150503dc2e1f55cda1d729699f6e754be4156db47c45805f16cf430db4a1ada8642f0b3e95c8 diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..146ab09 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 9e9754c..fa31bc0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,13 +2,13 @@ android { compileSdkVersion 29 - buildToolsVersion "29.0.1" + buildToolsVersion "29.0.3" defaultConfig { applicationId "com.casic.smartwellapp" minSdkVersion 17 targetSdkVersion 29 - versionCode 6 - versionName "1.1" + versionCode 7 + versionName "v1.1.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true } @@ -42,8 +42,8 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'androidx.appcompat:appcompat:1.0.2' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' @@ -51,7 +51,7 @@ implementation 'com.lbx:xTools:2.1.2' implementation 'org.bouncycastle:bcmail-jdk15on:1.59' implementation 'org.apache.commons:commons-lang3:3.1' - implementation 'com.alibaba:fastjson:1.2.12' + implementation 'com.alibaba:fastjson:1.2.68' implementation files('libs/guava-17.0.jar') implementation files('libs/androidsvg-1.2.2-beta-1.jar') implementation files('libs/EzLicenseAPI4Android.jar') @@ -62,5 +62,4 @@ implementation files('libs/kxml2-2.3.0.jar') implementation files('libs/jackson-mapper-lgpl-1.9.5.jar') implementation files('libs/jackson-core-lgpl-1.9.5.jar') - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 55d30fd..6e34b75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,20 +23,31 @@ android:allowBackup="true" android:icon="@mipmap/znzj" android:label="@string/app_name" + android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme"> + android:theme="@style/AppThemeNoActionBar" + android:usesCleartextTraffic="true"> - + - + + + + \ No newline at end of file diff --git a/app/src/main/assets/EzServiceClient4Android.lic b/app/src/main/assets/EzServiceClient4Android.lic index 2f9a1c1..15c2e85 100644 --- a/app/src/main/assets/EzServiceClient4Android.lic +++ b/app/src/main/assets/EzServiceClient4Android.lic @@ -1,6 +1,6 @@ -f276fd50425e1516bd5fa1183d719e5188c3d196594315e14e003fa87c9edb2c5172bc06037febce58bc0cb093a6f99f46dfdd1ec48d8741353d2fb3aeb83b914b05c17e9431fcbd51ab5f05bc3ad8c850fcb169aa98094bedcae7c1687ed72580026733d8ea16ed193577111f96acf6b2bde5cbc093595fc611830331fd9409b33655b1d1734b525eda690fd3b9a525c6eb82869de321130dfce541c14dd51560d8def56d7363c23e50c539710bdf33c339fc9f70cd66319412b8684a2956e70c0e8a47586e2acfcb0292156ebfe275a48928e4f1fad576cff804a7e6efedac10faa1144f5c734e8fd877466b116dde7587da47d0ec9d851f3649145eef20baf8e55cce84ce5c2c469fee3374049e50e6d7e6badbd6f331ab55c3bc68df8fba9ed026ca69d0989d87dd101747d6d4e078fd972f8ec6372ae6d7e6badbd6f331da0c0ea0953023b21f3649145eef20ba876ec217701656916b67f9fc6bbfcf54e1d71aa6968e0d522edce43a825f8266ce240451cc3d2a6cb5f148d610d02c343fd149b7c6371aab62fcde50ab3874a019de7eb6e745bf9072215ec225e991125323109221ba90946ba59f7d8c7f4a96 -0cfa6c2c5eec924477d4869070a624f6338800b0cceeb3798744936e17f5dbe5ffc65ef9607dd62f7470c2075f59152b424800a6f3c2377ca4679102c0f410ea85fe94939f7b08cfa0c82baad441753322d07953b79a7c68e171ee41ac939ae90e153fef75c459a8acc519bae9a396a3754123ca956f1ccf4ed57fe0619215b3 -3082049030820255308201bea0030201020208485c64d3fba087a9300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3730303230313135333232385a180f32393730303230313135333232385a304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f7420436572746966696361746530819f300d06092a864886f70d010101050003818d00308189028181009467336181f34b81907f72d59f096b9e0bc71ec89dfe4ed3a3ccb9d4b493864d900fc2522ef090364ec86266c160101175fcceed985f2d63f598c915bc2096a1f7d42103a03f4798943a411c094da3e90666307c371c41e13ad19ee7ae54ec56219e9a80995dfd41199c43431764caff8d04c4c999818b8ac02590ffe7d97f390203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414a90da8091835c082a5e696dfe7f34066bfb2d4f7300d06092a864886f70d0101050500038181000c3163614e6017d01d1af63b67524528b37e8df1d999c7963681e0cebaf4c8846c56618723a25d5b0518cd8488422900e00720ba3f9f51c8bdbb18ee0c449a86f7e4abedce5684c6c4a558d7f8ca1e40028f2bf78d386337b0f7774220f89747107fbe4130e4f8dcd3d97019a499d73e183f626be08bd6e8f16b1fec8b6f46b2308202333082019ca003020102020863db91e7a94c1470300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f74204365727469666963617465301e170d3139303832323136303030305a170d3230303232323136303030305a302a310b300906035504061302434e311b301906035504030c12e58c97e4baace5b882e585ace5ae89e5b18030819f300d06092a864886f70d010101050003818d00308189028181009c67407ffc5a2cd8461f605e8ff0d96b4b6f9d09c0d776e1a1f67bd75d78426dd18525c0d4b3a5fc7252cc5c98c285e86785323190ad002882f8ad73e7b2e0cab6429fa0fa9884404ecc44dd0b560d798dd1dc52da219c781042c29d5e952fa9967748f21923611a564692d7f87d7b2c28737a69c8a499ce1e8687e3d599f6cd0203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414e873cba8b05182fcf5b0923afe0f7689466bd69a300d06092a864886f70d01010505000381810064368d80681403ac336e2d56125e057297ee491311ebda1ff5a050fe595cecabb285f3d395b6f5febf4d1e63767502acc922afe2452c68e02064e20c3c26c95c0a3d47cad4fdffbbb1640b6c03a67032d0a97ff4e2c2b3cb0f47327a3a644c2e9b5646af94d217c2eb0004117438cb1a7807707d345c3245a5e8a177ad5f1c35 +2510c4e69e269c8687aa62b975a8602285b31397afcbad497365138451765ed014ce89dd0005f08b90f365c081e38158037fe2a8aeae5765c59631f1a3703ce533f397bd9d5ad479c384a0434c2e8b6efca6442f38f3ddef31070f468b6f254008220ed4d33115dee053e46413d5f5a1ed74661b2e1f433a62ee986573dd22212f8061a1bded6b1ac13c4f0563986bcbe6c8086e15baefa963ba5b634ece82d902e83594c665b521dc7a8fce05122d7ed1573cf995ee331ab3f6d838d365cec76e443ceee1098d1dd011162692a0d3e10daf7ffc9d3de23eab186ad41e3cec6abb18bd091996d6040d8f536ea5e3328bf684c2dcede64a13b8549f1b024834e7f936fb7277d042c89d2f8d473272d0b7ab3024361f9779e03c63ce5f131295dcf0f167b96fb42626bb73792cf055412c069021d40678c09eab3024361f9779e0eea4a46ce6916af2b8549f1b024834e7a4b02eccbf324d7e75d2377fdb6279c8896959ccf251cac44da4194093c886834e28736e937a21e6e2c6054b8490c7542fc1ff3ec1e4a556293b42e4da1aa87dc72d8ca4659b7834cdc0181c4ec3700b233e26b1f9747324075a0a63335cfcef +4d39594536c496286928e6ca5e8e84aadf7b9c8d59409eb6e7d71d4b5ccd13ade769e96bd98099fe859b394d7572698f43f903af899886cfb54a873b19c7721cc6a20613278b157876401f2a29862c43d8748ac8c967dda527dfbd25923ca9e8183e89dfd88ac818fe94ed03360d7dc5f0a76527d7b82173b8f48a0cc70266a3 +3082049230820255308201bea0030201020208485c64d3fba087a9300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3730303230313135333232385a180f32393730303230313135333232385a304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f7420436572746966696361746530819f300d06092a864886f70d010101050003818d00308189028181009467336181f34b81907f72d59f096b9e0bc71ec89dfe4ed3a3ccb9d4b493864d900fc2522ef090364ec86266c160101175fcceed985f2d63f598c915bc2096a1f7d42103a03f4798943a411c094da3e90666307c371c41e13ad19ee7ae54ec56219e9a80995dfd41199c43431764caff8d04c4c999818b8ac02590ffe7d97f390203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414a90da8091835c082a5e696dfe7f34066bfb2d4f7300d06092a864886f70d0101050500038181000c3163614e6017d01d1af63b67524528b37e8df1d999c7963681e0cebaf4c8846c56618723a25d5b0518cd8488422900e00720ba3f9f51c8bdbb18ee0c449a86f7e4abedce5684c6c4a558d7f8ca1e40028f2bf78d386337b0f7774220f89747107fbe4130e4f8dcd3d97019a499d73e183f626be08bd6e8f16b1fec8b6f46b2308202353082019ea00302010202085a09ebe5b8193320300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3231303431323136303030305a180f32303530303431323136303030305a302a310b300906035504061302434e311b301906035504030c12e58c97e4baace5b882e585ace5ae89e5b18030819f300d06092a864886f70d010101050003818d0030818902818100a9d0c339353cd1747bbcbb1573682de0a41f1c190e6aeb6a8af69e91236c0bfd6e6fec41b287b86ef5d7bd09d3631e34386dc8dd328e18364b3d067bdfb0c64a51de72ac238e026ccb32fc798cc350667fbfbfd3e451d009463ca872a99457499c88c7977e5e9f12118296d825de7febc2813f4e86d5bc96e4b477bf4a22e5bd0203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e041604147499564586404aa44a5ef1ad4b836996fdcb01f3300d06092a864886f70d0101050500038181006b57878916c1a3b8c6c15b7213c5ded9704bb66a59c759a3765194926be4f660fec68a6f7b52ffbb15e580eae637341e0c799a9859760bf463ef44a6263e6dff2ef53cbd4d9fddf79dcd771a84e8ba16ff75fad5bc33b0886d21150503dc2e1f55cda1d729699f6e754be4156db47c45805f16cf430db4a1ada8642f0b3e95c8 diff --git a/app/src/main/java/com/casic/smartwellapp/MainActivity.java b/app/src/main/java/com/casic/smartwellapp/MainActivity.java index cffa4e1..38bef40 100644 --- a/app/src/main/java/com/casic/smartwellapp/MainActivity.java +++ b/app/src/main/java/com/casic/smartwellapp/MainActivity.java @@ -34,7 +34,7 @@ import com.telecomyt.oauthlogin.http.HttpCallback; import com.telecomyt.oauthlogin.http.HttpOauthCheckUtil; -import java.io.InputStream; +import java.lang.reflect.Method; import java.util.List; import static com.telecomyt.oauthlogin.config.Config.LOG_TAG; @@ -47,27 +47,24 @@ private String ip; //ip private String imei; //imei private String yys; //运营商 - LoginReturn userInfoResult = null; //单点登录返回的用户信息 - DeviceData deviceData = null; //给用户返回的数据 + private LoginReturn userInfoResult = null; //单点登录返回的用户信息 + private DeviceData deviceData = null; //给用户返回的数据 - private String oauth_url = "http://menhu.telecomyt.com.cn:8080/"; //单点登录验证地址 + private static final String oauth_url = "http://menhu.telecomyt.com.cn:8080/"; //单点登录验证地址 private long exitTime = 0; //点击退出时间 private static final int LOGIN_CODE = 1001; - public final static int REQUEST_READ_PHONE_STATE = 1; - + public static final int REQUEST_READ_PHONE_STATE = 1; private String msgId; //推送消息id private String msgContent; //推送消息内容 - @RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - InputStream inStream = null; try { Intent intent = new Intent("com.telecomyt.portal.OAUTH"); intent.putExtra("appID", "3pb316_oauth"); @@ -79,8 +76,8 @@ } // imei = getIMEI(getApplicationContext()); - imei = getDeviceId(MainActivity.this); - +// imei = getDeviceId(MainActivity.this); + imei = obtainSimCardSerialNumber();//20210524 Pengxh修改 // if (getIntent() != null) { //// Intent intent = getIntent(); @@ -92,27 +89,27 @@ //webview // 获取控件对象 - webview = (WebView) findViewById(R.id.WV_ID); + webview = findViewById(R.id.WV_ID); WebView.setWebContentsDebuggingEnabled(true); - webview.getSettings().setJavaScriptEnabled(true);//设置webView属性,允许运行js脚本 - webview.getSettings().setDomStorageEnabled(true); - webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); - webview.getSettings().setAppCacheEnabled(true); - String appCatchPath = getApplicationContext().getCacheDir().getAbsolutePath(); - webview.getSettings().setAppCachePath(appCatchPath); - webview.getSettings().setAllowFileAccess(true);//可访问文件 - webview.getSettings().setDefaultTextEncodingName("UTF-8"); - webview.getSettings().setAllowUniversalAccessFromFileURLs(true); + WebSettings settings = webview.getSettings(); + settings.setJavaScriptEnabled(true);//设置webView属性,允许运行js脚本 + settings.setDomStorageEnabled(true); + settings.setCacheMode(WebSettings.LOAD_NO_CACHE); + settings.setAppCacheEnabled(true); + settings.setAppCachePath(getApplicationContext().getCacheDir().getAbsolutePath()); + settings.setAllowFileAccess(true);//可访问文件 + settings.setDefaultTextEncodingName("UTF-8"); + settings.setAllowUniversalAccessFromFileURLs(true); // 设置在当前WebView继续加载网页 webview.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { - System.out.println("in shouldOverrideUrlLoading url"); try { // 处理自定义scheme协议 if (!url.startsWith("http")) { + //处理自定义scheme-->androidamap://viewMap?poiname=W00002&lat=39.9055035111111&lng=116.376759027778 Log.e("scheme", "处理自定义scheme-->" + url); // 如果要跳转地图 if (url.startsWith("androidamap:")) { @@ -120,34 +117,38 @@ //获取问号后的参数 String params = url.substring(url.indexOf('?')); Log.i("map", params); - if (url.indexOf("?") != -1) { + if (url.contains("?")) { String str = params.substring(1); String[] strs = str.split("&"); - for (int i = 0; i < strs.length; i++) { - String name = strs[i].split("=")[0]; - String value = strs[i].split("=")[1]; - if (name.equals("lng")) { - lng = value; - } else if (name.equals("lat")) { - lat = value; - } else if (name.equals("poiname")) { - pointname = value; + for (String s : strs) { + String name = s.split("=")[0]; + String value = s.split("=")[1]; + switch (name) { + case "lng": + lng = value; + break; + case "lat": + lat = value; + break; + case "poiname": + pointname = value; + break; } } } //用原生sdk加载地图 - Intent intent = new Intent(); - intent.putExtra("lng", lng); - intent.putExtra("lat", lat); - intent.putExtra("pointname", pointname); - intent.setClass(MainActivity.this, - MapInitActivity.class); - startActivity(intent); + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O) { + Intent intent = new Intent(MainActivity.this, MapInitActivity.class); + intent.putExtra("lng", lng); + intent.putExtra("lat", lat); + intent.putExtra("pointname", pointname); + startActivity(intent); + } else { + Toast.makeText(MainActivity.this, "系统版本过高,地图无法使用", Toast.LENGTH_SHORT).show(); + } } else if (url.startsWith("tel:")) { - final Intent intent = new Intent(Intent.ACTION_VIEW, - Uri.parse(url)); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK - | Intent.FLAG_ACTIVITY_SINGLE_TOP); + final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); } else { Toast.makeText(getApplicationContext(), "未能识别URL!", Toast.LENGTH_SHORT).show(); @@ -171,20 +172,17 @@ } @Override - public void onReceivedError(WebView view, int errorCode, String description, - String failingUrl) { + public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); //错误页面 webview.loadUrl("file:///android_asset/error.html"); } }); - // 给web提供调用接口 webview.addJavascriptInterface(new WebAppInterface(), "android"); // 加载html文件,欢迎页面 webview.loadUrl("file:///android_asset/hello.html"); - } @@ -203,56 +201,53 @@ //单点登录返回 super.onActivityResult(requestCode, resultCode, data); if (resultCode == 100) { - switch (requestCode) { - //单点登录页面的返回结果 - case 1001: - if (data != null) { - String result = data.getStringExtra("result"); - Log.e(LOG_TAG, "吉安宝验证结果 result === " + result); - JiAnBaoCheckResult tokenResult = new Gson().fromJson(result, JiAnBaoCheckResult.class); - if (tokenResult != null) { - if (tokenResult.isResult()) { - token = tokenResult.getSubjectDN(); - Log.e(LOG_TAG, "token === " + token); + //单点登录页面的返回结果 + if (requestCode == 1001) { + if (data != null) { + String result = data.getStringExtra("result"); + Log.e(LOG_TAG, "吉安宝验证结果 result === " + result); + JiAnBaoCheckResult tokenResult = new Gson().fromJson(result, JiAnBaoCheckResult.class); + if (tokenResult != null) { + if (tokenResult.isResult()) { + token = tokenResult.getSubjectDN(); + Log.e(LOG_TAG, "token === " + token); // webview.loadUrl("file:///android_asset/index.html?token="+token); - if (!TextUtils.isEmpty(token)) { - HttpOauthCheckUtil.getInstance().getUserInfo(oauth_url, token, new HttpCallback() { - @Override - public void onSuccess(String result) { - Toast.makeText(getApplicationContext(), "认证通过,欢迎使用", - Toast.LENGTH_SHORT).show(); - Log.e(LOG_TAG, "门户验证结果 === " + result); - userInfoResult = new Gson().fromJson(result, LoginReturn.class); - yys = getYys(getApplicationContext()); - String name = userInfoResult.getData().getName(); - String identifyCard = userInfoResult.getData().getIdentityCard(); - deviceData = new DeviceData(name, identifyCard, yys, imei); - Log.i("deviceData", deviceData.toString()); - webview.loadUrl("file:///android_asset/index.html"); - } + if (!TextUtils.isEmpty(token)) { + HttpOauthCheckUtil.getInstance().getUserInfo(oauth_url, token, new HttpCallback() { + @Override + public void onSuccess(String result) { + Toast.makeText(getApplicationContext(), "认证通过,欢迎使用", + Toast.LENGTH_SHORT).show(); + Log.e(LOG_TAG, "门户验证结果 === " + result); + userInfoResult = new Gson().fromJson(result, LoginReturn.class); + yys = getYys(getApplicationContext()); + String name = userInfoResult.getData().getName(); + String identifyCard = userInfoResult.getData().getIdentityCard(); + deviceData = new DeviceData(name, identifyCard, yys, imei); + Log.i("deviceData", deviceData.toString()); + webview.loadUrl("file:///android_asset/index.html"); + } - @Override - public void onFailed(String err) { - Log.e(LOG_TAG, "错误信息 === " + err); - Toast.makeText(getApplicationContext(), err, - Toast.LENGTH_SHORT).show(); - } - }); - } - } else { - //吉安宝认证失败 - Toast.makeText(getApplicationContext(), "吉安宝认证失败", - Toast.LENGTH_SHORT).show(); - Log.e(LOG_TAG, "吉安宝认证失败 "); + @Override + public void onFailed(String err) { + Log.e(LOG_TAG, "错误信息 === " + err); + Toast.makeText(getApplicationContext(), err, + Toast.LENGTH_SHORT).show(); + } + }); } } else { - Toast.makeText(getApplicationContext(), "请检查网络", + //吉安宝认证失败 + Toast.makeText(getApplicationContext(), "吉安宝认证失败", Toast.LENGTH_SHORT).show(); - Log.e(LOG_TAG, "请检查网络"); + Log.e(LOG_TAG, "吉安宝认证失败 "); } + } else { + Toast.makeText(getApplicationContext(), "请检查网络", + Toast.LENGTH_SHORT).show(); + Log.e(LOG_TAG, "请检查网络"); } - default: - break; + } } } // if (requestCode == LOGIN_CODE && resultCode == 100) { // resultCode 固定为100 @@ -277,13 +272,11 @@ @Override public void onBackPressed() { Log.i("webUrl", "webviewUrl" + webview.getUrl()); - if (webview.canGoBack() && !webview.getUrl().endsWith("/#/") - && !webview.getUrl().endsWith("/#/login")) { + if (webview.canGoBack() && !webview.getUrl().endsWith("/#/") && !webview.getUrl().endsWith("/#/login")) { webview.goBack(); } else { if ((System.currentTimeMillis() - exitTime) > 2000) { - Toast.makeText(getApplicationContext(), "再按一次退出程序", - Toast.LENGTH_SHORT).show(); + Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { super.onBackPressed(); @@ -299,22 +292,20 @@ Log.i("JSON:", json); return json; } else { - String json = ""; - return json; + return ""; } } @JavascriptInterface public String getAuth() { // 返回token - if (token != null && token != "") { + if (token != null && !token.equals("")) { Toast.makeText(getApplicationContext(), "获取用户权限", Toast.LENGTH_SHORT).show(); return token; } else { return null; } } - } //获取运营商 @@ -366,5 +357,38 @@ } return deviceId; } + + //获取SimSerialNumber + @SuppressLint({"HardwareIds"}) + public String obtainSimCardSerialNumber() { + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + //Android 10改为获取Android_ID + return Settings.System.getString(getContentResolver(), Settings.Secure.ANDROID_ID); + } else { + TelephonyManager telephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); + Class telephonyClass; + try { + telephonyClass = Class.forName(telephony.getClass().getName()); + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE_STATE); + } + //Android 10以下默认获取deviceId,部分手机获取不到deviceId不到的改为获取sim卡串码,如果依旧获取不到,返回"" + String imei = telephony.getDeviceId(); + if (TextUtils.isEmpty(imei)) { + Method m = telephonyClass.getMethod("getSimSerialNumber", int.class); + //主卡,卡1 + String mainCard = (String) m.invoke(telephony, 0); + //副卡,卡2 + String otherCard = (String) m.invoke(telephony, 1); + return mainCard; + } else { + return imei; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return ""; + } } diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..146ab09 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 9e9754c..fa31bc0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,13 +2,13 @@ android { compileSdkVersion 29 - buildToolsVersion "29.0.1" + buildToolsVersion "29.0.3" defaultConfig { applicationId "com.casic.smartwellapp" minSdkVersion 17 targetSdkVersion 29 - versionCode 6 - versionName "1.1" + versionCode 7 + versionName "v1.1.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true } @@ -42,8 +42,8 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'androidx.appcompat:appcompat:1.0.2' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' @@ -51,7 +51,7 @@ implementation 'com.lbx:xTools:2.1.2' implementation 'org.bouncycastle:bcmail-jdk15on:1.59' implementation 'org.apache.commons:commons-lang3:3.1' - implementation 'com.alibaba:fastjson:1.2.12' + implementation 'com.alibaba:fastjson:1.2.68' implementation files('libs/guava-17.0.jar') implementation files('libs/androidsvg-1.2.2-beta-1.jar') implementation files('libs/EzLicenseAPI4Android.jar') @@ -62,5 +62,4 @@ implementation files('libs/kxml2-2.3.0.jar') implementation files('libs/jackson-mapper-lgpl-1.9.5.jar') implementation files('libs/jackson-core-lgpl-1.9.5.jar') - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 55d30fd..6e34b75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,20 +23,31 @@ android:allowBackup="true" android:icon="@mipmap/znzj" android:label="@string/app_name" + android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme"> + android:theme="@style/AppThemeNoActionBar" + android:usesCleartextTraffic="true"> - + - + + + + \ No newline at end of file diff --git a/app/src/main/assets/EzServiceClient4Android.lic b/app/src/main/assets/EzServiceClient4Android.lic index 2f9a1c1..15c2e85 100644 --- a/app/src/main/assets/EzServiceClient4Android.lic +++ b/app/src/main/assets/EzServiceClient4Android.lic @@ -1,6 +1,6 @@ -f276fd50425e1516bd5fa1183d719e5188c3d196594315e14e003fa87c9edb2c5172bc06037febce58bc0cb093a6f99f46dfdd1ec48d8741353d2fb3aeb83b914b05c17e9431fcbd51ab5f05bc3ad8c850fcb169aa98094bedcae7c1687ed72580026733d8ea16ed193577111f96acf6b2bde5cbc093595fc611830331fd9409b33655b1d1734b525eda690fd3b9a525c6eb82869de321130dfce541c14dd51560d8def56d7363c23e50c539710bdf33c339fc9f70cd66319412b8684a2956e70c0e8a47586e2acfcb0292156ebfe275a48928e4f1fad576cff804a7e6efedac10faa1144f5c734e8fd877466b116dde7587da47d0ec9d851f3649145eef20baf8e55cce84ce5c2c469fee3374049e50e6d7e6badbd6f331ab55c3bc68df8fba9ed026ca69d0989d87dd101747d6d4e078fd972f8ec6372ae6d7e6badbd6f331da0c0ea0953023b21f3649145eef20ba876ec217701656916b67f9fc6bbfcf54e1d71aa6968e0d522edce43a825f8266ce240451cc3d2a6cb5f148d610d02c343fd149b7c6371aab62fcde50ab3874a019de7eb6e745bf9072215ec225e991125323109221ba90946ba59f7d8c7f4a96 -0cfa6c2c5eec924477d4869070a624f6338800b0cceeb3798744936e17f5dbe5ffc65ef9607dd62f7470c2075f59152b424800a6f3c2377ca4679102c0f410ea85fe94939f7b08cfa0c82baad441753322d07953b79a7c68e171ee41ac939ae90e153fef75c459a8acc519bae9a396a3754123ca956f1ccf4ed57fe0619215b3 -3082049030820255308201bea0030201020208485c64d3fba087a9300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3730303230313135333232385a180f32393730303230313135333232385a304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f7420436572746966696361746530819f300d06092a864886f70d010101050003818d00308189028181009467336181f34b81907f72d59f096b9e0bc71ec89dfe4ed3a3ccb9d4b493864d900fc2522ef090364ec86266c160101175fcceed985f2d63f598c915bc2096a1f7d42103a03f4798943a411c094da3e90666307c371c41e13ad19ee7ae54ec56219e9a80995dfd41199c43431764caff8d04c4c999818b8ac02590ffe7d97f390203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414a90da8091835c082a5e696dfe7f34066bfb2d4f7300d06092a864886f70d0101050500038181000c3163614e6017d01d1af63b67524528b37e8df1d999c7963681e0cebaf4c8846c56618723a25d5b0518cd8488422900e00720ba3f9f51c8bdbb18ee0c449a86f7e4abedce5684c6c4a558d7f8ca1e40028f2bf78d386337b0f7774220f89747107fbe4130e4f8dcd3d97019a499d73e183f626be08bd6e8f16b1fec8b6f46b2308202333082019ca003020102020863db91e7a94c1470300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f74204365727469666963617465301e170d3139303832323136303030305a170d3230303232323136303030305a302a310b300906035504061302434e311b301906035504030c12e58c97e4baace5b882e585ace5ae89e5b18030819f300d06092a864886f70d010101050003818d00308189028181009c67407ffc5a2cd8461f605e8ff0d96b4b6f9d09c0d776e1a1f67bd75d78426dd18525c0d4b3a5fc7252cc5c98c285e86785323190ad002882f8ad73e7b2e0cab6429fa0fa9884404ecc44dd0b560d798dd1dc52da219c781042c29d5e952fa9967748f21923611a564692d7f87d7b2c28737a69c8a499ce1e8687e3d599f6cd0203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414e873cba8b05182fcf5b0923afe0f7689466bd69a300d06092a864886f70d01010505000381810064368d80681403ac336e2d56125e057297ee491311ebda1ff5a050fe595cecabb285f3d395b6f5febf4d1e63767502acc922afe2452c68e02064e20c3c26c95c0a3d47cad4fdffbbb1640b6c03a67032d0a97ff4e2c2b3cb0f47327a3a644c2e9b5646af94d217c2eb0004117438cb1a7807707d345c3245a5e8a177ad5f1c35 +2510c4e69e269c8687aa62b975a8602285b31397afcbad497365138451765ed014ce89dd0005f08b90f365c081e38158037fe2a8aeae5765c59631f1a3703ce533f397bd9d5ad479c384a0434c2e8b6efca6442f38f3ddef31070f468b6f254008220ed4d33115dee053e46413d5f5a1ed74661b2e1f433a62ee986573dd22212f8061a1bded6b1ac13c4f0563986bcbe6c8086e15baefa963ba5b634ece82d902e83594c665b521dc7a8fce05122d7ed1573cf995ee331ab3f6d838d365cec76e443ceee1098d1dd011162692a0d3e10daf7ffc9d3de23eab186ad41e3cec6abb18bd091996d6040d8f536ea5e3328bf684c2dcede64a13b8549f1b024834e7f936fb7277d042c89d2f8d473272d0b7ab3024361f9779e03c63ce5f131295dcf0f167b96fb42626bb73792cf055412c069021d40678c09eab3024361f9779e0eea4a46ce6916af2b8549f1b024834e7a4b02eccbf324d7e75d2377fdb6279c8896959ccf251cac44da4194093c886834e28736e937a21e6e2c6054b8490c7542fc1ff3ec1e4a556293b42e4da1aa87dc72d8ca4659b7834cdc0181c4ec3700b233e26b1f9747324075a0a63335cfcef +4d39594536c496286928e6ca5e8e84aadf7b9c8d59409eb6e7d71d4b5ccd13ade769e96bd98099fe859b394d7572698f43f903af899886cfb54a873b19c7721cc6a20613278b157876401f2a29862c43d8748ac8c967dda527dfbd25923ca9e8183e89dfd88ac818fe94ed03360d7dc5f0a76527d7b82173b8f48a0cc70266a3 +3082049230820255308201bea0030201020208485c64d3fba087a9300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3730303230313135333232385a180f32393730303230313135333232385a304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f7420436572746966696361746530819f300d06092a864886f70d010101050003818d00308189028181009467336181f34b81907f72d59f096b9e0bc71ec89dfe4ed3a3ccb9d4b493864d900fc2522ef090364ec86266c160101175fcceed985f2d63f598c915bc2096a1f7d42103a03f4798943a411c094da3e90666307c371c41e13ad19ee7ae54ec56219e9a80995dfd41199c43431764caff8d04c4c999818b8ac02590ffe7d97f390203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414a90da8091835c082a5e696dfe7f34066bfb2d4f7300d06092a864886f70d0101050500038181000c3163614e6017d01d1af63b67524528b37e8df1d999c7963681e0cebaf4c8846c56618723a25d5b0518cd8488422900e00720ba3f9f51c8bdbb18ee0c449a86f7e4abedce5684c6c4a558d7f8ca1e40028f2bf78d386337b0f7774220f89747107fbe4130e4f8dcd3d97019a499d73e183f626be08bd6e8f16b1fec8b6f46b2308202353082019ea00302010202085a09ebe5b8193320300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3231303431323136303030305a180f32303530303431323136303030305a302a310b300906035504061302434e311b301906035504030c12e58c97e4baace5b882e585ace5ae89e5b18030819f300d06092a864886f70d010101050003818d0030818902818100a9d0c339353cd1747bbcbb1573682de0a41f1c190e6aeb6a8af69e91236c0bfd6e6fec41b287b86ef5d7bd09d3631e34386dc8dd328e18364b3d067bdfb0c64a51de72ac238e026ccb32fc798cc350667fbfbfd3e451d009463ca872a99457499c88c7977e5e9f12118296d825de7febc2813f4e86d5bc96e4b477bf4a22e5bd0203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e041604147499564586404aa44a5ef1ad4b836996fdcb01f3300d06092a864886f70d0101050500038181006b57878916c1a3b8c6c15b7213c5ded9704bb66a59c759a3765194926be4f660fec68a6f7b52ffbb15e580eae637341e0c799a9859760bf463ef44a6263e6dff2ef53cbd4d9fddf79dcd771a84e8ba16ff75fad5bc33b0886d21150503dc2e1f55cda1d729699f6e754be4156db47c45805f16cf430db4a1ada8642f0b3e95c8 diff --git a/app/src/main/java/com/casic/smartwellapp/MainActivity.java b/app/src/main/java/com/casic/smartwellapp/MainActivity.java index cffa4e1..38bef40 100644 --- a/app/src/main/java/com/casic/smartwellapp/MainActivity.java +++ b/app/src/main/java/com/casic/smartwellapp/MainActivity.java @@ -34,7 +34,7 @@ import com.telecomyt.oauthlogin.http.HttpCallback; import com.telecomyt.oauthlogin.http.HttpOauthCheckUtil; -import java.io.InputStream; +import java.lang.reflect.Method; import java.util.List; import static com.telecomyt.oauthlogin.config.Config.LOG_TAG; @@ -47,27 +47,24 @@ private String ip; //ip private String imei; //imei private String yys; //运营商 - LoginReturn userInfoResult = null; //单点登录返回的用户信息 - DeviceData deviceData = null; //给用户返回的数据 + private LoginReturn userInfoResult = null; //单点登录返回的用户信息 + private DeviceData deviceData = null; //给用户返回的数据 - private String oauth_url = "http://menhu.telecomyt.com.cn:8080/"; //单点登录验证地址 + private static final String oauth_url = "http://menhu.telecomyt.com.cn:8080/"; //单点登录验证地址 private long exitTime = 0; //点击退出时间 private static final int LOGIN_CODE = 1001; - public final static int REQUEST_READ_PHONE_STATE = 1; - + public static final int REQUEST_READ_PHONE_STATE = 1; private String msgId; //推送消息id private String msgContent; //推送消息内容 - @RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - InputStream inStream = null; try { Intent intent = new Intent("com.telecomyt.portal.OAUTH"); intent.putExtra("appID", "3pb316_oauth"); @@ -79,8 +76,8 @@ } // imei = getIMEI(getApplicationContext()); - imei = getDeviceId(MainActivity.this); - +// imei = getDeviceId(MainActivity.this); + imei = obtainSimCardSerialNumber();//20210524 Pengxh修改 // if (getIntent() != null) { //// Intent intent = getIntent(); @@ -92,27 +89,27 @@ //webview // 获取控件对象 - webview = (WebView) findViewById(R.id.WV_ID); + webview = findViewById(R.id.WV_ID); WebView.setWebContentsDebuggingEnabled(true); - webview.getSettings().setJavaScriptEnabled(true);//设置webView属性,允许运行js脚本 - webview.getSettings().setDomStorageEnabled(true); - webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); - webview.getSettings().setAppCacheEnabled(true); - String appCatchPath = getApplicationContext().getCacheDir().getAbsolutePath(); - webview.getSettings().setAppCachePath(appCatchPath); - webview.getSettings().setAllowFileAccess(true);//可访问文件 - webview.getSettings().setDefaultTextEncodingName("UTF-8"); - webview.getSettings().setAllowUniversalAccessFromFileURLs(true); + WebSettings settings = webview.getSettings(); + settings.setJavaScriptEnabled(true);//设置webView属性,允许运行js脚本 + settings.setDomStorageEnabled(true); + settings.setCacheMode(WebSettings.LOAD_NO_CACHE); + settings.setAppCacheEnabled(true); + settings.setAppCachePath(getApplicationContext().getCacheDir().getAbsolutePath()); + settings.setAllowFileAccess(true);//可访问文件 + settings.setDefaultTextEncodingName("UTF-8"); + settings.setAllowUniversalAccessFromFileURLs(true); // 设置在当前WebView继续加载网页 webview.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { - System.out.println("in shouldOverrideUrlLoading url"); try { // 处理自定义scheme协议 if (!url.startsWith("http")) { + //处理自定义scheme-->androidamap://viewMap?poiname=W00002&lat=39.9055035111111&lng=116.376759027778 Log.e("scheme", "处理自定义scheme-->" + url); // 如果要跳转地图 if (url.startsWith("androidamap:")) { @@ -120,34 +117,38 @@ //获取问号后的参数 String params = url.substring(url.indexOf('?')); Log.i("map", params); - if (url.indexOf("?") != -1) { + if (url.contains("?")) { String str = params.substring(1); String[] strs = str.split("&"); - for (int i = 0; i < strs.length; i++) { - String name = strs[i].split("=")[0]; - String value = strs[i].split("=")[1]; - if (name.equals("lng")) { - lng = value; - } else if (name.equals("lat")) { - lat = value; - } else if (name.equals("poiname")) { - pointname = value; + for (String s : strs) { + String name = s.split("=")[0]; + String value = s.split("=")[1]; + switch (name) { + case "lng": + lng = value; + break; + case "lat": + lat = value; + break; + case "poiname": + pointname = value; + break; } } } //用原生sdk加载地图 - Intent intent = new Intent(); - intent.putExtra("lng", lng); - intent.putExtra("lat", lat); - intent.putExtra("pointname", pointname); - intent.setClass(MainActivity.this, - MapInitActivity.class); - startActivity(intent); + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O) { + Intent intent = new Intent(MainActivity.this, MapInitActivity.class); + intent.putExtra("lng", lng); + intent.putExtra("lat", lat); + intent.putExtra("pointname", pointname); + startActivity(intent); + } else { + Toast.makeText(MainActivity.this, "系统版本过高,地图无法使用", Toast.LENGTH_SHORT).show(); + } } else if (url.startsWith("tel:")) { - final Intent intent = new Intent(Intent.ACTION_VIEW, - Uri.parse(url)); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK - | Intent.FLAG_ACTIVITY_SINGLE_TOP); + final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); } else { Toast.makeText(getApplicationContext(), "未能识别URL!", Toast.LENGTH_SHORT).show(); @@ -171,20 +172,17 @@ } @Override - public void onReceivedError(WebView view, int errorCode, String description, - String failingUrl) { + public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); //错误页面 webview.loadUrl("file:///android_asset/error.html"); } }); - // 给web提供调用接口 webview.addJavascriptInterface(new WebAppInterface(), "android"); // 加载html文件,欢迎页面 webview.loadUrl("file:///android_asset/hello.html"); - } @@ -203,56 +201,53 @@ //单点登录返回 super.onActivityResult(requestCode, resultCode, data); if (resultCode == 100) { - switch (requestCode) { - //单点登录页面的返回结果 - case 1001: - if (data != null) { - String result = data.getStringExtra("result"); - Log.e(LOG_TAG, "吉安宝验证结果 result === " + result); - JiAnBaoCheckResult tokenResult = new Gson().fromJson(result, JiAnBaoCheckResult.class); - if (tokenResult != null) { - if (tokenResult.isResult()) { - token = tokenResult.getSubjectDN(); - Log.e(LOG_TAG, "token === " + token); + //单点登录页面的返回结果 + if (requestCode == 1001) { + if (data != null) { + String result = data.getStringExtra("result"); + Log.e(LOG_TAG, "吉安宝验证结果 result === " + result); + JiAnBaoCheckResult tokenResult = new Gson().fromJson(result, JiAnBaoCheckResult.class); + if (tokenResult != null) { + if (tokenResult.isResult()) { + token = tokenResult.getSubjectDN(); + Log.e(LOG_TAG, "token === " + token); // webview.loadUrl("file:///android_asset/index.html?token="+token); - if (!TextUtils.isEmpty(token)) { - HttpOauthCheckUtil.getInstance().getUserInfo(oauth_url, token, new HttpCallback() { - @Override - public void onSuccess(String result) { - Toast.makeText(getApplicationContext(), "认证通过,欢迎使用", - Toast.LENGTH_SHORT).show(); - Log.e(LOG_TAG, "门户验证结果 === " + result); - userInfoResult = new Gson().fromJson(result, LoginReturn.class); - yys = getYys(getApplicationContext()); - String name = userInfoResult.getData().getName(); - String identifyCard = userInfoResult.getData().getIdentityCard(); - deviceData = new DeviceData(name, identifyCard, yys, imei); - Log.i("deviceData", deviceData.toString()); - webview.loadUrl("file:///android_asset/index.html"); - } + if (!TextUtils.isEmpty(token)) { + HttpOauthCheckUtil.getInstance().getUserInfo(oauth_url, token, new HttpCallback() { + @Override + public void onSuccess(String result) { + Toast.makeText(getApplicationContext(), "认证通过,欢迎使用", + Toast.LENGTH_SHORT).show(); + Log.e(LOG_TAG, "门户验证结果 === " + result); + userInfoResult = new Gson().fromJson(result, LoginReturn.class); + yys = getYys(getApplicationContext()); + String name = userInfoResult.getData().getName(); + String identifyCard = userInfoResult.getData().getIdentityCard(); + deviceData = new DeviceData(name, identifyCard, yys, imei); + Log.i("deviceData", deviceData.toString()); + webview.loadUrl("file:///android_asset/index.html"); + } - @Override - public void onFailed(String err) { - Log.e(LOG_TAG, "错误信息 === " + err); - Toast.makeText(getApplicationContext(), err, - Toast.LENGTH_SHORT).show(); - } - }); - } - } else { - //吉安宝认证失败 - Toast.makeText(getApplicationContext(), "吉安宝认证失败", - Toast.LENGTH_SHORT).show(); - Log.e(LOG_TAG, "吉安宝认证失败 "); + @Override + public void onFailed(String err) { + Log.e(LOG_TAG, "错误信息 === " + err); + Toast.makeText(getApplicationContext(), err, + Toast.LENGTH_SHORT).show(); + } + }); } } else { - Toast.makeText(getApplicationContext(), "请检查网络", + //吉安宝认证失败 + Toast.makeText(getApplicationContext(), "吉安宝认证失败", Toast.LENGTH_SHORT).show(); - Log.e(LOG_TAG, "请检查网络"); + Log.e(LOG_TAG, "吉安宝认证失败 "); } + } else { + Toast.makeText(getApplicationContext(), "请检查网络", + Toast.LENGTH_SHORT).show(); + Log.e(LOG_TAG, "请检查网络"); } - default: - break; + } } } // if (requestCode == LOGIN_CODE && resultCode == 100) { // resultCode 固定为100 @@ -277,13 +272,11 @@ @Override public void onBackPressed() { Log.i("webUrl", "webviewUrl" + webview.getUrl()); - if (webview.canGoBack() && !webview.getUrl().endsWith("/#/") - && !webview.getUrl().endsWith("/#/login")) { + if (webview.canGoBack() && !webview.getUrl().endsWith("/#/") && !webview.getUrl().endsWith("/#/login")) { webview.goBack(); } else { if ((System.currentTimeMillis() - exitTime) > 2000) { - Toast.makeText(getApplicationContext(), "再按一次退出程序", - Toast.LENGTH_SHORT).show(); + Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { super.onBackPressed(); @@ -299,22 +292,20 @@ Log.i("JSON:", json); return json; } else { - String json = ""; - return json; + return ""; } } @JavascriptInterface public String getAuth() { // 返回token - if (token != null && token != "") { + if (token != null && !token.equals("")) { Toast.makeText(getApplicationContext(), "获取用户权限", Toast.LENGTH_SHORT).show(); return token; } else { return null; } } - } //获取运营商 @@ -366,5 +357,38 @@ } return deviceId; } + + //获取SimSerialNumber + @SuppressLint({"HardwareIds"}) + public String obtainSimCardSerialNumber() { + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + //Android 10改为获取Android_ID + return Settings.System.getString(getContentResolver(), Settings.Secure.ANDROID_ID); + } else { + TelephonyManager telephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); + Class telephonyClass; + try { + telephonyClass = Class.forName(telephony.getClass().getName()); + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE_STATE); + } + //Android 10以下默认获取deviceId,部分手机获取不到deviceId不到的改为获取sim卡串码,如果依旧获取不到,返回"" + String imei = telephony.getDeviceId(); + if (TextUtils.isEmpty(imei)) { + Method m = telephonyClass.getMethod("getSimSerialNumber", int.class); + //主卡,卡1 + String mainCard = (String) m.invoke(telephony, 0); + //副卡,卡2 + String otherCard = (String) m.invoke(telephony, 1); + return mainCard; + } else { + return imei; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return ""; + } } diff --git a/app/src/main/java/com/casic/smartwellapp/MapInitActivity.java b/app/src/main/java/com/casic/smartwellapp/MapInitActivity.java index 1fa8471..ffe3784 100644 --- a/app/src/main/java/com/casic/smartwellapp/MapInitActivity.java +++ b/app/src/main/java/com/casic/smartwellapp/MapInitActivity.java @@ -1,12 +1,16 @@ package com.casic.smartwellapp; +import android.Manifest; import android.app.Activity; import android.content.Intent; +import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.widget.TextView; +import androidx.core.app.ActivityCompat; + import com.casic.smartwellapp.Entity.Constant; import com.easymap.android.maps.v3.EzMap; import com.easymap.android.maps.v3.EzMap.OnStatusChangeListener; @@ -20,23 +24,19 @@ import com.easymap.android.maps.v3.layers.ogc.WMTSLayer; import com.easymap.android.maps.v3.layers.ogc.WMTSLayerInfo; +import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; public class MapInitActivity extends Activity implements OnStatusChangeListener { + + public static final int REQUEST_PERMISSION = 11; private MapView mapView; - private EzMap ezMap; - private TextView textview; - private WMTSLayer wmtstdt; - private WMTSLayerInfo wmtslayerinfo; - private Marker marker; private String lng; private String lat; private String pointname; - private GraphicsLayer graphicslayer; - private BitmapDescriptor iconcircle; - @Override protected void onCreate(Bundle savedInstanceState) { @@ -47,7 +47,7 @@ lng = i.getStringExtra("lng"); lat = i.getStringExtra("lat"); pointname = i.getStringExtra("pointname"); - mapView = (MapView) findViewById(R.id.MapView); + mapView = findViewById(R.id.MapView); if (mapView != null) { // 注册地图准备就绪监听 mapView.setOnStatusChangeListener(this); @@ -60,54 +60,77 @@ inStream = getResources().getAssets().open("EzServiceClient4Android.lic"); // inStream = new FileInputStream(file); } catch (FileNotFoundException e) { - Log.e("mapError", "fileNotFoundException"); e.printStackTrace(); } catch (IOException e) { - Log.e("mapError", "streamFileNotFoundException"); e.printStackTrace(); } // 初始化许可方法 - mapView.initLicenseAsDevelopement(inStream); +// mapView.initLicenseAsDevelopement(inStream); + mapView.initLicense(getAssetsData("EzServiceClient4Android.lic"));//20210525 Pengxh修改 mapView.onCreate(getApplication(), savedInstanceState); - - } } @Override public void onStatusChanged(STATUS arg0) { - textview = (TextView) findViewById(R.id.textview); + TextView textview = findViewById(R.id.textview); textview.setText(pointname); // 得到地图对象 - ezMap = mapView.getMap(); + EzMap ezMap = mapView.getMap(); // 设置地图中心点 - ezMap.centerAt(new GeoPoint(Double.valueOf(lng), Double.valueOf(lat)), false); + ezMap.centerAt(new GeoPoint(Double.parseDouble(lng), Double.parseDouble(lat)), false); // 设置地图级别 ezMap.zoomTo(16, false); - wmtslayerinfo = new WMTSLayerInfo(); + WMTSLayerInfo wmtslayerinfo = new WMTSLayerInfo(); wmtslayerinfo.setVersion("1.0.0"); wmtslayerinfo.setFormat("tiles"); wmtslayerinfo.setStyle("default"); wmtslayerinfo.setLayerName("gdsl"); wmtslayerinfo.setTileMatrixSet("c"); // 实例化WMTSLayer 地图 - wmtstdt = new WMTSLayer("http://20.1.12.48/EzServer/Maps/gdsl", - wmtslayerinfo, "tdt_vec.cache", Environment.getExternalStorageDirectory() - + "/EzMap/st"); + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_PERMISSION); + } + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION); + } + WMTSLayer wmtstdt = new WMTSLayer("http://20.1.12.48/EzServer/Maps/gdsl", wmtslayerinfo, + "tdt_vec.cache", + Environment.getExternalStorageDirectory() + "/EzMap/st"); ezMap.addLayer(wmtstdt); - graphicslayer = new GraphicsLayer(SpatialReference.create(4326), - ezMap.getExtent()); - iconcircle = BitmapDescriptorFactory.defaultMarker(); + GraphicsLayer graphicslayer = new GraphicsLayer(SpatialReference.create(4326), ezMap.getExtent()); + BitmapDescriptor iconCircle = BitmapDescriptorFactory.defaultMarker(); ezMap.addLayer(graphicslayer); // 根据点的位置创建一个Marker的实例 - marker = new Marker(new GeoPoint(Double.valueOf(lng), Double.valueOf(lat)), iconcircle, 0.5f, 0.5f); -// 将marker添加到图层中 + Marker marker = new Marker(new GeoPoint(Double.parseDouble(lng), Double.parseDouble(lat)), iconCircle, 0.5f, 0.5f); + // 将marker添加到图层中 graphicslayer.addGraphic(marker); ezMap.refreshMap(); - - } + /** + * 获取本地Asserts文件内容 + */ + public String getAssetsData(String fileName) { + try { + InputStreamReader inputStreamReader = new InputStreamReader(getAssets().open(fileName)); + BufferedReader bufferedReader = new BufferedReader(inputStreamReader); + StringBuilder data = new StringBuilder(); + String s; + try { + while ((s = bufferedReader.readLine()) != null) { + data.append(s); + } + Log.d("map", "getAssetsData: " + data); + return data.toString(); + } catch (IOException e) { + e.printStackTrace(); + } + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } } diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..146ab09 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 9e9754c..fa31bc0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,13 +2,13 @@ android { compileSdkVersion 29 - buildToolsVersion "29.0.1" + buildToolsVersion "29.0.3" defaultConfig { applicationId "com.casic.smartwellapp" minSdkVersion 17 targetSdkVersion 29 - versionCode 6 - versionName "1.1" + versionCode 7 + versionName "v1.1.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true } @@ -42,8 +42,8 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'androidx.appcompat:appcompat:1.0.2' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' @@ -51,7 +51,7 @@ implementation 'com.lbx:xTools:2.1.2' implementation 'org.bouncycastle:bcmail-jdk15on:1.59' implementation 'org.apache.commons:commons-lang3:3.1' - implementation 'com.alibaba:fastjson:1.2.12' + implementation 'com.alibaba:fastjson:1.2.68' implementation files('libs/guava-17.0.jar') implementation files('libs/androidsvg-1.2.2-beta-1.jar') implementation files('libs/EzLicenseAPI4Android.jar') @@ -62,5 +62,4 @@ implementation files('libs/kxml2-2.3.0.jar') implementation files('libs/jackson-mapper-lgpl-1.9.5.jar') implementation files('libs/jackson-core-lgpl-1.9.5.jar') - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 55d30fd..6e34b75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,20 +23,31 @@ android:allowBackup="true" android:icon="@mipmap/znzj" android:label="@string/app_name" + android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme"> + android:theme="@style/AppThemeNoActionBar" + android:usesCleartextTraffic="true"> - + - + + + + \ No newline at end of file diff --git a/app/src/main/assets/EzServiceClient4Android.lic b/app/src/main/assets/EzServiceClient4Android.lic index 2f9a1c1..15c2e85 100644 --- a/app/src/main/assets/EzServiceClient4Android.lic +++ b/app/src/main/assets/EzServiceClient4Android.lic @@ -1,6 +1,6 @@ -f276fd50425e1516bd5fa1183d719e5188c3d196594315e14e003fa87c9edb2c5172bc06037febce58bc0cb093a6f99f46dfdd1ec48d8741353d2fb3aeb83b914b05c17e9431fcbd51ab5f05bc3ad8c850fcb169aa98094bedcae7c1687ed72580026733d8ea16ed193577111f96acf6b2bde5cbc093595fc611830331fd9409b33655b1d1734b525eda690fd3b9a525c6eb82869de321130dfce541c14dd51560d8def56d7363c23e50c539710bdf33c339fc9f70cd66319412b8684a2956e70c0e8a47586e2acfcb0292156ebfe275a48928e4f1fad576cff804a7e6efedac10faa1144f5c734e8fd877466b116dde7587da47d0ec9d851f3649145eef20baf8e55cce84ce5c2c469fee3374049e50e6d7e6badbd6f331ab55c3bc68df8fba9ed026ca69d0989d87dd101747d6d4e078fd972f8ec6372ae6d7e6badbd6f331da0c0ea0953023b21f3649145eef20ba876ec217701656916b67f9fc6bbfcf54e1d71aa6968e0d522edce43a825f8266ce240451cc3d2a6cb5f148d610d02c343fd149b7c6371aab62fcde50ab3874a019de7eb6e745bf9072215ec225e991125323109221ba90946ba59f7d8c7f4a96 -0cfa6c2c5eec924477d4869070a624f6338800b0cceeb3798744936e17f5dbe5ffc65ef9607dd62f7470c2075f59152b424800a6f3c2377ca4679102c0f410ea85fe94939f7b08cfa0c82baad441753322d07953b79a7c68e171ee41ac939ae90e153fef75c459a8acc519bae9a396a3754123ca956f1ccf4ed57fe0619215b3 -3082049030820255308201bea0030201020208485c64d3fba087a9300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3730303230313135333232385a180f32393730303230313135333232385a304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f7420436572746966696361746530819f300d06092a864886f70d010101050003818d00308189028181009467336181f34b81907f72d59f096b9e0bc71ec89dfe4ed3a3ccb9d4b493864d900fc2522ef090364ec86266c160101175fcceed985f2d63f598c915bc2096a1f7d42103a03f4798943a411c094da3e90666307c371c41e13ad19ee7ae54ec56219e9a80995dfd41199c43431764caff8d04c4c999818b8ac02590ffe7d97f390203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414a90da8091835c082a5e696dfe7f34066bfb2d4f7300d06092a864886f70d0101050500038181000c3163614e6017d01d1af63b67524528b37e8df1d999c7963681e0cebaf4c8846c56618723a25d5b0518cd8488422900e00720ba3f9f51c8bdbb18ee0c449a86f7e4abedce5684c6c4a558d7f8ca1e40028f2bf78d386337b0f7774220f89747107fbe4130e4f8dcd3d97019a499d73e183f626be08bd6e8f16b1fec8b6f46b2308202333082019ca003020102020863db91e7a94c1470300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f74204365727469666963617465301e170d3139303832323136303030305a170d3230303232323136303030305a302a310b300906035504061302434e311b301906035504030c12e58c97e4baace5b882e585ace5ae89e5b18030819f300d06092a864886f70d010101050003818d00308189028181009c67407ffc5a2cd8461f605e8ff0d96b4b6f9d09c0d776e1a1f67bd75d78426dd18525c0d4b3a5fc7252cc5c98c285e86785323190ad002882f8ad73e7b2e0cab6429fa0fa9884404ecc44dd0b560d798dd1dc52da219c781042c29d5e952fa9967748f21923611a564692d7f87d7b2c28737a69c8a499ce1e8687e3d599f6cd0203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414e873cba8b05182fcf5b0923afe0f7689466bd69a300d06092a864886f70d01010505000381810064368d80681403ac336e2d56125e057297ee491311ebda1ff5a050fe595cecabb285f3d395b6f5febf4d1e63767502acc922afe2452c68e02064e20c3c26c95c0a3d47cad4fdffbbb1640b6c03a67032d0a97ff4e2c2b3cb0f47327a3a644c2e9b5646af94d217c2eb0004117438cb1a7807707d345c3245a5e8a177ad5f1c35 +2510c4e69e269c8687aa62b975a8602285b31397afcbad497365138451765ed014ce89dd0005f08b90f365c081e38158037fe2a8aeae5765c59631f1a3703ce533f397bd9d5ad479c384a0434c2e8b6efca6442f38f3ddef31070f468b6f254008220ed4d33115dee053e46413d5f5a1ed74661b2e1f433a62ee986573dd22212f8061a1bded6b1ac13c4f0563986bcbe6c8086e15baefa963ba5b634ece82d902e83594c665b521dc7a8fce05122d7ed1573cf995ee331ab3f6d838d365cec76e443ceee1098d1dd011162692a0d3e10daf7ffc9d3de23eab186ad41e3cec6abb18bd091996d6040d8f536ea5e3328bf684c2dcede64a13b8549f1b024834e7f936fb7277d042c89d2f8d473272d0b7ab3024361f9779e03c63ce5f131295dcf0f167b96fb42626bb73792cf055412c069021d40678c09eab3024361f9779e0eea4a46ce6916af2b8549f1b024834e7a4b02eccbf324d7e75d2377fdb6279c8896959ccf251cac44da4194093c886834e28736e937a21e6e2c6054b8490c7542fc1ff3ec1e4a556293b42e4da1aa87dc72d8ca4659b7834cdc0181c4ec3700b233e26b1f9747324075a0a63335cfcef +4d39594536c496286928e6ca5e8e84aadf7b9c8d59409eb6e7d71d4b5ccd13ade769e96bd98099fe859b394d7572698f43f903af899886cfb54a873b19c7721cc6a20613278b157876401f2a29862c43d8748ac8c967dda527dfbd25923ca9e8183e89dfd88ac818fe94ed03360d7dc5f0a76527d7b82173b8f48a0cc70266a3 +3082049230820255308201bea0030201020208485c64d3fba087a9300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3730303230313135333232385a180f32393730303230313135333232385a304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f7420436572746966696361746530819f300d06092a864886f70d010101050003818d00308189028181009467336181f34b81907f72d59f096b9e0bc71ec89dfe4ed3a3ccb9d4b493864d900fc2522ef090364ec86266c160101175fcceed985f2d63f598c915bc2096a1f7d42103a03f4798943a411c094da3e90666307c371c41e13ad19ee7ae54ec56219e9a80995dfd41199c43431764caff8d04c4c999818b8ac02590ffe7d97f390203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414a90da8091835c082a5e696dfe7f34066bfb2d4f7300d06092a864886f70d0101050500038181000c3163614e6017d01d1af63b67524528b37e8df1d999c7963681e0cebaf4c8846c56618723a25d5b0518cd8488422900e00720ba3f9f51c8bdbb18ee0c449a86f7e4abedce5684c6c4a558d7f8ca1e40028f2bf78d386337b0f7774220f89747107fbe4130e4f8dcd3d97019a499d73e183f626be08bd6e8f16b1fec8b6f46b2308202353082019ea00302010202085a09ebe5b8193320300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3231303431323136303030305a180f32303530303431323136303030305a302a310b300906035504061302434e311b301906035504030c12e58c97e4baace5b882e585ace5ae89e5b18030819f300d06092a864886f70d010101050003818d0030818902818100a9d0c339353cd1747bbcbb1573682de0a41f1c190e6aeb6a8af69e91236c0bfd6e6fec41b287b86ef5d7bd09d3631e34386dc8dd328e18364b3d067bdfb0c64a51de72ac238e026ccb32fc798cc350667fbfbfd3e451d009463ca872a99457499c88c7977e5e9f12118296d825de7febc2813f4e86d5bc96e4b477bf4a22e5bd0203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e041604147499564586404aa44a5ef1ad4b836996fdcb01f3300d06092a864886f70d0101050500038181006b57878916c1a3b8c6c15b7213c5ded9704bb66a59c759a3765194926be4f660fec68a6f7b52ffbb15e580eae637341e0c799a9859760bf463ef44a6263e6dff2ef53cbd4d9fddf79dcd771a84e8ba16ff75fad5bc33b0886d21150503dc2e1f55cda1d729699f6e754be4156db47c45805f16cf430db4a1ada8642f0b3e95c8 diff --git a/app/src/main/java/com/casic/smartwellapp/MainActivity.java b/app/src/main/java/com/casic/smartwellapp/MainActivity.java index cffa4e1..38bef40 100644 --- a/app/src/main/java/com/casic/smartwellapp/MainActivity.java +++ b/app/src/main/java/com/casic/smartwellapp/MainActivity.java @@ -34,7 +34,7 @@ import com.telecomyt.oauthlogin.http.HttpCallback; import com.telecomyt.oauthlogin.http.HttpOauthCheckUtil; -import java.io.InputStream; +import java.lang.reflect.Method; import java.util.List; import static com.telecomyt.oauthlogin.config.Config.LOG_TAG; @@ -47,27 +47,24 @@ private String ip; //ip private String imei; //imei private String yys; //运营商 - LoginReturn userInfoResult = null; //单点登录返回的用户信息 - DeviceData deviceData = null; //给用户返回的数据 + private LoginReturn userInfoResult = null; //单点登录返回的用户信息 + private DeviceData deviceData = null; //给用户返回的数据 - private String oauth_url = "http://menhu.telecomyt.com.cn:8080/"; //单点登录验证地址 + private static final String oauth_url = "http://menhu.telecomyt.com.cn:8080/"; //单点登录验证地址 private long exitTime = 0; //点击退出时间 private static final int LOGIN_CODE = 1001; - public final static int REQUEST_READ_PHONE_STATE = 1; - + public static final int REQUEST_READ_PHONE_STATE = 1; private String msgId; //推送消息id private String msgContent; //推送消息内容 - @RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - InputStream inStream = null; try { Intent intent = new Intent("com.telecomyt.portal.OAUTH"); intent.putExtra("appID", "3pb316_oauth"); @@ -79,8 +76,8 @@ } // imei = getIMEI(getApplicationContext()); - imei = getDeviceId(MainActivity.this); - +// imei = getDeviceId(MainActivity.this); + imei = obtainSimCardSerialNumber();//20210524 Pengxh修改 // if (getIntent() != null) { //// Intent intent = getIntent(); @@ -92,27 +89,27 @@ //webview // 获取控件对象 - webview = (WebView) findViewById(R.id.WV_ID); + webview = findViewById(R.id.WV_ID); WebView.setWebContentsDebuggingEnabled(true); - webview.getSettings().setJavaScriptEnabled(true);//设置webView属性,允许运行js脚本 - webview.getSettings().setDomStorageEnabled(true); - webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); - webview.getSettings().setAppCacheEnabled(true); - String appCatchPath = getApplicationContext().getCacheDir().getAbsolutePath(); - webview.getSettings().setAppCachePath(appCatchPath); - webview.getSettings().setAllowFileAccess(true);//可访问文件 - webview.getSettings().setDefaultTextEncodingName("UTF-8"); - webview.getSettings().setAllowUniversalAccessFromFileURLs(true); + WebSettings settings = webview.getSettings(); + settings.setJavaScriptEnabled(true);//设置webView属性,允许运行js脚本 + settings.setDomStorageEnabled(true); + settings.setCacheMode(WebSettings.LOAD_NO_CACHE); + settings.setAppCacheEnabled(true); + settings.setAppCachePath(getApplicationContext().getCacheDir().getAbsolutePath()); + settings.setAllowFileAccess(true);//可访问文件 + settings.setDefaultTextEncodingName("UTF-8"); + settings.setAllowUniversalAccessFromFileURLs(true); // 设置在当前WebView继续加载网页 webview.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { - System.out.println("in shouldOverrideUrlLoading url"); try { // 处理自定义scheme协议 if (!url.startsWith("http")) { + //处理自定义scheme-->androidamap://viewMap?poiname=W00002&lat=39.9055035111111&lng=116.376759027778 Log.e("scheme", "处理自定义scheme-->" + url); // 如果要跳转地图 if (url.startsWith("androidamap:")) { @@ -120,34 +117,38 @@ //获取问号后的参数 String params = url.substring(url.indexOf('?')); Log.i("map", params); - if (url.indexOf("?") != -1) { + if (url.contains("?")) { String str = params.substring(1); String[] strs = str.split("&"); - for (int i = 0; i < strs.length; i++) { - String name = strs[i].split("=")[0]; - String value = strs[i].split("=")[1]; - if (name.equals("lng")) { - lng = value; - } else if (name.equals("lat")) { - lat = value; - } else if (name.equals("poiname")) { - pointname = value; + for (String s : strs) { + String name = s.split("=")[0]; + String value = s.split("=")[1]; + switch (name) { + case "lng": + lng = value; + break; + case "lat": + lat = value; + break; + case "poiname": + pointname = value; + break; } } } //用原生sdk加载地图 - Intent intent = new Intent(); - intent.putExtra("lng", lng); - intent.putExtra("lat", lat); - intent.putExtra("pointname", pointname); - intent.setClass(MainActivity.this, - MapInitActivity.class); - startActivity(intent); + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O) { + Intent intent = new Intent(MainActivity.this, MapInitActivity.class); + intent.putExtra("lng", lng); + intent.putExtra("lat", lat); + intent.putExtra("pointname", pointname); + startActivity(intent); + } else { + Toast.makeText(MainActivity.this, "系统版本过高,地图无法使用", Toast.LENGTH_SHORT).show(); + } } else if (url.startsWith("tel:")) { - final Intent intent = new Intent(Intent.ACTION_VIEW, - Uri.parse(url)); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK - | Intent.FLAG_ACTIVITY_SINGLE_TOP); + final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); } else { Toast.makeText(getApplicationContext(), "未能识别URL!", Toast.LENGTH_SHORT).show(); @@ -171,20 +172,17 @@ } @Override - public void onReceivedError(WebView view, int errorCode, String description, - String failingUrl) { + public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); //错误页面 webview.loadUrl("file:///android_asset/error.html"); } }); - // 给web提供调用接口 webview.addJavascriptInterface(new WebAppInterface(), "android"); // 加载html文件,欢迎页面 webview.loadUrl("file:///android_asset/hello.html"); - } @@ -203,56 +201,53 @@ //单点登录返回 super.onActivityResult(requestCode, resultCode, data); if (resultCode == 100) { - switch (requestCode) { - //单点登录页面的返回结果 - case 1001: - if (data != null) { - String result = data.getStringExtra("result"); - Log.e(LOG_TAG, "吉安宝验证结果 result === " + result); - JiAnBaoCheckResult tokenResult = new Gson().fromJson(result, JiAnBaoCheckResult.class); - if (tokenResult != null) { - if (tokenResult.isResult()) { - token = tokenResult.getSubjectDN(); - Log.e(LOG_TAG, "token === " + token); + //单点登录页面的返回结果 + if (requestCode == 1001) { + if (data != null) { + String result = data.getStringExtra("result"); + Log.e(LOG_TAG, "吉安宝验证结果 result === " + result); + JiAnBaoCheckResult tokenResult = new Gson().fromJson(result, JiAnBaoCheckResult.class); + if (tokenResult != null) { + if (tokenResult.isResult()) { + token = tokenResult.getSubjectDN(); + Log.e(LOG_TAG, "token === " + token); // webview.loadUrl("file:///android_asset/index.html?token="+token); - if (!TextUtils.isEmpty(token)) { - HttpOauthCheckUtil.getInstance().getUserInfo(oauth_url, token, new HttpCallback() { - @Override - public void onSuccess(String result) { - Toast.makeText(getApplicationContext(), "认证通过,欢迎使用", - Toast.LENGTH_SHORT).show(); - Log.e(LOG_TAG, "门户验证结果 === " + result); - userInfoResult = new Gson().fromJson(result, LoginReturn.class); - yys = getYys(getApplicationContext()); - String name = userInfoResult.getData().getName(); - String identifyCard = userInfoResult.getData().getIdentityCard(); - deviceData = new DeviceData(name, identifyCard, yys, imei); - Log.i("deviceData", deviceData.toString()); - webview.loadUrl("file:///android_asset/index.html"); - } + if (!TextUtils.isEmpty(token)) { + HttpOauthCheckUtil.getInstance().getUserInfo(oauth_url, token, new HttpCallback() { + @Override + public void onSuccess(String result) { + Toast.makeText(getApplicationContext(), "认证通过,欢迎使用", + Toast.LENGTH_SHORT).show(); + Log.e(LOG_TAG, "门户验证结果 === " + result); + userInfoResult = new Gson().fromJson(result, LoginReturn.class); + yys = getYys(getApplicationContext()); + String name = userInfoResult.getData().getName(); + String identifyCard = userInfoResult.getData().getIdentityCard(); + deviceData = new DeviceData(name, identifyCard, yys, imei); + Log.i("deviceData", deviceData.toString()); + webview.loadUrl("file:///android_asset/index.html"); + } - @Override - public void onFailed(String err) { - Log.e(LOG_TAG, "错误信息 === " + err); - Toast.makeText(getApplicationContext(), err, - Toast.LENGTH_SHORT).show(); - } - }); - } - } else { - //吉安宝认证失败 - Toast.makeText(getApplicationContext(), "吉安宝认证失败", - Toast.LENGTH_SHORT).show(); - Log.e(LOG_TAG, "吉安宝认证失败 "); + @Override + public void onFailed(String err) { + Log.e(LOG_TAG, "错误信息 === " + err); + Toast.makeText(getApplicationContext(), err, + Toast.LENGTH_SHORT).show(); + } + }); } } else { - Toast.makeText(getApplicationContext(), "请检查网络", + //吉安宝认证失败 + Toast.makeText(getApplicationContext(), "吉安宝认证失败", Toast.LENGTH_SHORT).show(); - Log.e(LOG_TAG, "请检查网络"); + Log.e(LOG_TAG, "吉安宝认证失败 "); } + } else { + Toast.makeText(getApplicationContext(), "请检查网络", + Toast.LENGTH_SHORT).show(); + Log.e(LOG_TAG, "请检查网络"); } - default: - break; + } } } // if (requestCode == LOGIN_CODE && resultCode == 100) { // resultCode 固定为100 @@ -277,13 +272,11 @@ @Override public void onBackPressed() { Log.i("webUrl", "webviewUrl" + webview.getUrl()); - if (webview.canGoBack() && !webview.getUrl().endsWith("/#/") - && !webview.getUrl().endsWith("/#/login")) { + if (webview.canGoBack() && !webview.getUrl().endsWith("/#/") && !webview.getUrl().endsWith("/#/login")) { webview.goBack(); } else { if ((System.currentTimeMillis() - exitTime) > 2000) { - Toast.makeText(getApplicationContext(), "再按一次退出程序", - Toast.LENGTH_SHORT).show(); + Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { super.onBackPressed(); @@ -299,22 +292,20 @@ Log.i("JSON:", json); return json; } else { - String json = ""; - return json; + return ""; } } @JavascriptInterface public String getAuth() { // 返回token - if (token != null && token != "") { + if (token != null && !token.equals("")) { Toast.makeText(getApplicationContext(), "获取用户权限", Toast.LENGTH_SHORT).show(); return token; } else { return null; } } - } //获取运营商 @@ -366,5 +357,38 @@ } return deviceId; } + + //获取SimSerialNumber + @SuppressLint({"HardwareIds"}) + public String obtainSimCardSerialNumber() { + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + //Android 10改为获取Android_ID + return Settings.System.getString(getContentResolver(), Settings.Secure.ANDROID_ID); + } else { + TelephonyManager telephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); + Class telephonyClass; + try { + telephonyClass = Class.forName(telephony.getClass().getName()); + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE_STATE); + } + //Android 10以下默认获取deviceId,部分手机获取不到deviceId不到的改为获取sim卡串码,如果依旧获取不到,返回"" + String imei = telephony.getDeviceId(); + if (TextUtils.isEmpty(imei)) { + Method m = telephonyClass.getMethod("getSimSerialNumber", int.class); + //主卡,卡1 + String mainCard = (String) m.invoke(telephony, 0); + //副卡,卡2 + String otherCard = (String) m.invoke(telephony, 1); + return mainCard; + } else { + return imei; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return ""; + } } diff --git a/app/src/main/java/com/casic/smartwellapp/MapInitActivity.java b/app/src/main/java/com/casic/smartwellapp/MapInitActivity.java index 1fa8471..ffe3784 100644 --- a/app/src/main/java/com/casic/smartwellapp/MapInitActivity.java +++ b/app/src/main/java/com/casic/smartwellapp/MapInitActivity.java @@ -1,12 +1,16 @@ package com.casic.smartwellapp; +import android.Manifest; import android.app.Activity; import android.content.Intent; +import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.widget.TextView; +import androidx.core.app.ActivityCompat; + import com.casic.smartwellapp.Entity.Constant; import com.easymap.android.maps.v3.EzMap; import com.easymap.android.maps.v3.EzMap.OnStatusChangeListener; @@ -20,23 +24,19 @@ import com.easymap.android.maps.v3.layers.ogc.WMTSLayer; import com.easymap.android.maps.v3.layers.ogc.WMTSLayerInfo; +import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; public class MapInitActivity extends Activity implements OnStatusChangeListener { + + public static final int REQUEST_PERMISSION = 11; private MapView mapView; - private EzMap ezMap; - private TextView textview; - private WMTSLayer wmtstdt; - private WMTSLayerInfo wmtslayerinfo; - private Marker marker; private String lng; private String lat; private String pointname; - private GraphicsLayer graphicslayer; - private BitmapDescriptor iconcircle; - @Override protected void onCreate(Bundle savedInstanceState) { @@ -47,7 +47,7 @@ lng = i.getStringExtra("lng"); lat = i.getStringExtra("lat"); pointname = i.getStringExtra("pointname"); - mapView = (MapView) findViewById(R.id.MapView); + mapView = findViewById(R.id.MapView); if (mapView != null) { // 注册地图准备就绪监听 mapView.setOnStatusChangeListener(this); @@ -60,54 +60,77 @@ inStream = getResources().getAssets().open("EzServiceClient4Android.lic"); // inStream = new FileInputStream(file); } catch (FileNotFoundException e) { - Log.e("mapError", "fileNotFoundException"); e.printStackTrace(); } catch (IOException e) { - Log.e("mapError", "streamFileNotFoundException"); e.printStackTrace(); } // 初始化许可方法 - mapView.initLicenseAsDevelopement(inStream); +// mapView.initLicenseAsDevelopement(inStream); + mapView.initLicense(getAssetsData("EzServiceClient4Android.lic"));//20210525 Pengxh修改 mapView.onCreate(getApplication(), savedInstanceState); - - } } @Override public void onStatusChanged(STATUS arg0) { - textview = (TextView) findViewById(R.id.textview); + TextView textview = findViewById(R.id.textview); textview.setText(pointname); // 得到地图对象 - ezMap = mapView.getMap(); + EzMap ezMap = mapView.getMap(); // 设置地图中心点 - ezMap.centerAt(new GeoPoint(Double.valueOf(lng), Double.valueOf(lat)), false); + ezMap.centerAt(new GeoPoint(Double.parseDouble(lng), Double.parseDouble(lat)), false); // 设置地图级别 ezMap.zoomTo(16, false); - wmtslayerinfo = new WMTSLayerInfo(); + WMTSLayerInfo wmtslayerinfo = new WMTSLayerInfo(); wmtslayerinfo.setVersion("1.0.0"); wmtslayerinfo.setFormat("tiles"); wmtslayerinfo.setStyle("default"); wmtslayerinfo.setLayerName("gdsl"); wmtslayerinfo.setTileMatrixSet("c"); // 实例化WMTSLayer 地图 - wmtstdt = new WMTSLayer("http://20.1.12.48/EzServer/Maps/gdsl", - wmtslayerinfo, "tdt_vec.cache", Environment.getExternalStorageDirectory() - + "/EzMap/st"); + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_PERMISSION); + } + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION); + } + WMTSLayer wmtstdt = new WMTSLayer("http://20.1.12.48/EzServer/Maps/gdsl", wmtslayerinfo, + "tdt_vec.cache", + Environment.getExternalStorageDirectory() + "/EzMap/st"); ezMap.addLayer(wmtstdt); - graphicslayer = new GraphicsLayer(SpatialReference.create(4326), - ezMap.getExtent()); - iconcircle = BitmapDescriptorFactory.defaultMarker(); + GraphicsLayer graphicslayer = new GraphicsLayer(SpatialReference.create(4326), ezMap.getExtent()); + BitmapDescriptor iconCircle = BitmapDescriptorFactory.defaultMarker(); ezMap.addLayer(graphicslayer); // 根据点的位置创建一个Marker的实例 - marker = new Marker(new GeoPoint(Double.valueOf(lng), Double.valueOf(lat)), iconcircle, 0.5f, 0.5f); -// 将marker添加到图层中 + Marker marker = new Marker(new GeoPoint(Double.parseDouble(lng), Double.parseDouble(lat)), iconCircle, 0.5f, 0.5f); + // 将marker添加到图层中 graphicslayer.addGraphic(marker); ezMap.refreshMap(); - - } + /** + * 获取本地Asserts文件内容 + */ + public String getAssetsData(String fileName) { + try { + InputStreamReader inputStreamReader = new InputStreamReader(getAssets().open(fileName)); + BufferedReader bufferedReader = new BufferedReader(inputStreamReader); + StringBuilder data = new StringBuilder(); + String s; + try { + while ((s = bufferedReader.readLine()) != null) { + data.append(s); + } + Log.d("map", "getAssetsData: " + data); + return data.toString(); + } catch (IOException e) { + e.printStackTrace(); + } + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } } diff --git a/app/src/main/res/layout/activity_map_init.xml b/app/src/main/res/layout/activity_map_init.xml index d621149..622144f 100644 --- a/app/src/main/res/layout/activity_map_init.xml +++ b/app/src/main/res/layout/activity_map_init.xml @@ -1,21 +1,22 @@ - - - + android:orientation="vertical"> + + + + diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..146ab09 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 9e9754c..fa31bc0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,13 +2,13 @@ android { compileSdkVersion 29 - buildToolsVersion "29.0.1" + buildToolsVersion "29.0.3" defaultConfig { applicationId "com.casic.smartwellapp" minSdkVersion 17 targetSdkVersion 29 - versionCode 6 - versionName "1.1" + versionCode 7 + versionName "v1.1.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true } @@ -42,8 +42,8 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'androidx.appcompat:appcompat:1.0.2' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' @@ -51,7 +51,7 @@ implementation 'com.lbx:xTools:2.1.2' implementation 'org.bouncycastle:bcmail-jdk15on:1.59' implementation 'org.apache.commons:commons-lang3:3.1' - implementation 'com.alibaba:fastjson:1.2.12' + implementation 'com.alibaba:fastjson:1.2.68' implementation files('libs/guava-17.0.jar') implementation files('libs/androidsvg-1.2.2-beta-1.jar') implementation files('libs/EzLicenseAPI4Android.jar') @@ -62,5 +62,4 @@ implementation files('libs/kxml2-2.3.0.jar') implementation files('libs/jackson-mapper-lgpl-1.9.5.jar') implementation files('libs/jackson-core-lgpl-1.9.5.jar') - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 55d30fd..6e34b75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,20 +23,31 @@ android:allowBackup="true" android:icon="@mipmap/znzj" android:label="@string/app_name" + android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme"> + android:theme="@style/AppThemeNoActionBar" + android:usesCleartextTraffic="true"> - + - + + + + \ No newline at end of file diff --git a/app/src/main/assets/EzServiceClient4Android.lic b/app/src/main/assets/EzServiceClient4Android.lic index 2f9a1c1..15c2e85 100644 --- a/app/src/main/assets/EzServiceClient4Android.lic +++ b/app/src/main/assets/EzServiceClient4Android.lic @@ -1,6 +1,6 @@ -f276fd50425e1516bd5fa1183d719e5188c3d196594315e14e003fa87c9edb2c5172bc06037febce58bc0cb093a6f99f46dfdd1ec48d8741353d2fb3aeb83b914b05c17e9431fcbd51ab5f05bc3ad8c850fcb169aa98094bedcae7c1687ed72580026733d8ea16ed193577111f96acf6b2bde5cbc093595fc611830331fd9409b33655b1d1734b525eda690fd3b9a525c6eb82869de321130dfce541c14dd51560d8def56d7363c23e50c539710bdf33c339fc9f70cd66319412b8684a2956e70c0e8a47586e2acfcb0292156ebfe275a48928e4f1fad576cff804a7e6efedac10faa1144f5c734e8fd877466b116dde7587da47d0ec9d851f3649145eef20baf8e55cce84ce5c2c469fee3374049e50e6d7e6badbd6f331ab55c3bc68df8fba9ed026ca69d0989d87dd101747d6d4e078fd972f8ec6372ae6d7e6badbd6f331da0c0ea0953023b21f3649145eef20ba876ec217701656916b67f9fc6bbfcf54e1d71aa6968e0d522edce43a825f8266ce240451cc3d2a6cb5f148d610d02c343fd149b7c6371aab62fcde50ab3874a019de7eb6e745bf9072215ec225e991125323109221ba90946ba59f7d8c7f4a96 -0cfa6c2c5eec924477d4869070a624f6338800b0cceeb3798744936e17f5dbe5ffc65ef9607dd62f7470c2075f59152b424800a6f3c2377ca4679102c0f410ea85fe94939f7b08cfa0c82baad441753322d07953b79a7c68e171ee41ac939ae90e153fef75c459a8acc519bae9a396a3754123ca956f1ccf4ed57fe0619215b3 -3082049030820255308201bea0030201020208485c64d3fba087a9300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3730303230313135333232385a180f32393730303230313135333232385a304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f7420436572746966696361746530819f300d06092a864886f70d010101050003818d00308189028181009467336181f34b81907f72d59f096b9e0bc71ec89dfe4ed3a3ccb9d4b493864d900fc2522ef090364ec86266c160101175fcceed985f2d63f598c915bc2096a1f7d42103a03f4798943a411c094da3e90666307c371c41e13ad19ee7ae54ec56219e9a80995dfd41199c43431764caff8d04c4c999818b8ac02590ffe7d97f390203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414a90da8091835c082a5e696dfe7f34066bfb2d4f7300d06092a864886f70d0101050500038181000c3163614e6017d01d1af63b67524528b37e8df1d999c7963681e0cebaf4c8846c56618723a25d5b0518cd8488422900e00720ba3f9f51c8bdbb18ee0c449a86f7e4abedce5684c6c4a558d7f8ca1e40028f2bf78d386337b0f7774220f89747107fbe4130e4f8dcd3d97019a499d73e183f626be08bd6e8f16b1fec8b6f46b2308202333082019ca003020102020863db91e7a94c1470300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f74204365727469666963617465301e170d3139303832323136303030305a170d3230303232323136303030305a302a310b300906035504061302434e311b301906035504030c12e58c97e4baace5b882e585ace5ae89e5b18030819f300d06092a864886f70d010101050003818d00308189028181009c67407ffc5a2cd8461f605e8ff0d96b4b6f9d09c0d776e1a1f67bd75d78426dd18525c0d4b3a5fc7252cc5c98c285e86785323190ad002882f8ad73e7b2e0cab6429fa0fa9884404ecc44dd0b560d798dd1dc52da219c781042c29d5e952fa9967748f21923611a564692d7f87d7b2c28737a69c8a499ce1e8687e3d599f6cd0203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414e873cba8b05182fcf5b0923afe0f7689466bd69a300d06092a864886f70d01010505000381810064368d80681403ac336e2d56125e057297ee491311ebda1ff5a050fe595cecabb285f3d395b6f5febf4d1e63767502acc922afe2452c68e02064e20c3c26c95c0a3d47cad4fdffbbb1640b6c03a67032d0a97ff4e2c2b3cb0f47327a3a644c2e9b5646af94d217c2eb0004117438cb1a7807707d345c3245a5e8a177ad5f1c35 +2510c4e69e269c8687aa62b975a8602285b31397afcbad497365138451765ed014ce89dd0005f08b90f365c081e38158037fe2a8aeae5765c59631f1a3703ce533f397bd9d5ad479c384a0434c2e8b6efca6442f38f3ddef31070f468b6f254008220ed4d33115dee053e46413d5f5a1ed74661b2e1f433a62ee986573dd22212f8061a1bded6b1ac13c4f0563986bcbe6c8086e15baefa963ba5b634ece82d902e83594c665b521dc7a8fce05122d7ed1573cf995ee331ab3f6d838d365cec76e443ceee1098d1dd011162692a0d3e10daf7ffc9d3de23eab186ad41e3cec6abb18bd091996d6040d8f536ea5e3328bf684c2dcede64a13b8549f1b024834e7f936fb7277d042c89d2f8d473272d0b7ab3024361f9779e03c63ce5f131295dcf0f167b96fb42626bb73792cf055412c069021d40678c09eab3024361f9779e0eea4a46ce6916af2b8549f1b024834e7a4b02eccbf324d7e75d2377fdb6279c8896959ccf251cac44da4194093c886834e28736e937a21e6e2c6054b8490c7542fc1ff3ec1e4a556293b42e4da1aa87dc72d8ca4659b7834cdc0181c4ec3700b233e26b1f9747324075a0a63335cfcef +4d39594536c496286928e6ca5e8e84aadf7b9c8d59409eb6e7d71d4b5ccd13ade769e96bd98099fe859b394d7572698f43f903af899886cfb54a873b19c7721cc6a20613278b157876401f2a29862c43d8748ac8c967dda527dfbd25923ca9e8183e89dfd88ac818fe94ed03360d7dc5f0a76527d7b82173b8f48a0cc70266a3 +3082049230820255308201bea0030201020208485c64d3fba087a9300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3730303230313135333232385a180f32393730303230313135333232385a304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f7420436572746966696361746530819f300d06092a864886f70d010101050003818d00308189028181009467336181f34b81907f72d59f096b9e0bc71ec89dfe4ed3a3ccb9d4b493864d900fc2522ef090364ec86266c160101175fcceed985f2d63f598c915bc2096a1f7d42103a03f4798943a411c094da3e90666307c371c41e13ad19ee7ae54ec56219e9a80995dfd41199c43431764caff8d04c4c999818b8ac02590ffe7d97f390203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414a90da8091835c082a5e696dfe7f34066bfb2d4f7300d06092a864886f70d0101050500038181000c3163614e6017d01d1af63b67524528b37e8df1d999c7963681e0cebaf4c8846c56618723a25d5b0518cd8488422900e00720ba3f9f51c8bdbb18ee0c449a86f7e4abedce5684c6c4a558d7f8ca1e40028f2bf78d386337b0f7774220f89747107fbe4130e4f8dcd3d97019a499d73e183f626be08bd6e8f16b1fec8b6f46b2308202353082019ea00302010202085a09ebe5b8193320300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3231303431323136303030305a180f32303530303431323136303030305a302a310b300906035504061302434e311b301906035504030c12e58c97e4baace5b882e585ace5ae89e5b18030819f300d06092a864886f70d010101050003818d0030818902818100a9d0c339353cd1747bbcbb1573682de0a41f1c190e6aeb6a8af69e91236c0bfd6e6fec41b287b86ef5d7bd09d3631e34386dc8dd328e18364b3d067bdfb0c64a51de72ac238e026ccb32fc798cc350667fbfbfd3e451d009463ca872a99457499c88c7977e5e9f12118296d825de7febc2813f4e86d5bc96e4b477bf4a22e5bd0203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e041604147499564586404aa44a5ef1ad4b836996fdcb01f3300d06092a864886f70d0101050500038181006b57878916c1a3b8c6c15b7213c5ded9704bb66a59c759a3765194926be4f660fec68a6f7b52ffbb15e580eae637341e0c799a9859760bf463ef44a6263e6dff2ef53cbd4d9fddf79dcd771a84e8ba16ff75fad5bc33b0886d21150503dc2e1f55cda1d729699f6e754be4156db47c45805f16cf430db4a1ada8642f0b3e95c8 diff --git a/app/src/main/java/com/casic/smartwellapp/MainActivity.java b/app/src/main/java/com/casic/smartwellapp/MainActivity.java index cffa4e1..38bef40 100644 --- a/app/src/main/java/com/casic/smartwellapp/MainActivity.java +++ b/app/src/main/java/com/casic/smartwellapp/MainActivity.java @@ -34,7 +34,7 @@ import com.telecomyt.oauthlogin.http.HttpCallback; import com.telecomyt.oauthlogin.http.HttpOauthCheckUtil; -import java.io.InputStream; +import java.lang.reflect.Method; import java.util.List; import static com.telecomyt.oauthlogin.config.Config.LOG_TAG; @@ -47,27 +47,24 @@ private String ip; //ip private String imei; //imei private String yys; //运营商 - LoginReturn userInfoResult = null; //单点登录返回的用户信息 - DeviceData deviceData = null; //给用户返回的数据 + private LoginReturn userInfoResult = null; //单点登录返回的用户信息 + private DeviceData deviceData = null; //给用户返回的数据 - private String oauth_url = "http://menhu.telecomyt.com.cn:8080/"; //单点登录验证地址 + private static final String oauth_url = "http://menhu.telecomyt.com.cn:8080/"; //单点登录验证地址 private long exitTime = 0; //点击退出时间 private static final int LOGIN_CODE = 1001; - public final static int REQUEST_READ_PHONE_STATE = 1; - + public static final int REQUEST_READ_PHONE_STATE = 1; private String msgId; //推送消息id private String msgContent; //推送消息内容 - @RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - InputStream inStream = null; try { Intent intent = new Intent("com.telecomyt.portal.OAUTH"); intent.putExtra("appID", "3pb316_oauth"); @@ -79,8 +76,8 @@ } // imei = getIMEI(getApplicationContext()); - imei = getDeviceId(MainActivity.this); - +// imei = getDeviceId(MainActivity.this); + imei = obtainSimCardSerialNumber();//20210524 Pengxh修改 // if (getIntent() != null) { //// Intent intent = getIntent(); @@ -92,27 +89,27 @@ //webview // 获取控件对象 - webview = (WebView) findViewById(R.id.WV_ID); + webview = findViewById(R.id.WV_ID); WebView.setWebContentsDebuggingEnabled(true); - webview.getSettings().setJavaScriptEnabled(true);//设置webView属性,允许运行js脚本 - webview.getSettings().setDomStorageEnabled(true); - webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); - webview.getSettings().setAppCacheEnabled(true); - String appCatchPath = getApplicationContext().getCacheDir().getAbsolutePath(); - webview.getSettings().setAppCachePath(appCatchPath); - webview.getSettings().setAllowFileAccess(true);//可访问文件 - webview.getSettings().setDefaultTextEncodingName("UTF-8"); - webview.getSettings().setAllowUniversalAccessFromFileURLs(true); + WebSettings settings = webview.getSettings(); + settings.setJavaScriptEnabled(true);//设置webView属性,允许运行js脚本 + settings.setDomStorageEnabled(true); + settings.setCacheMode(WebSettings.LOAD_NO_CACHE); + settings.setAppCacheEnabled(true); + settings.setAppCachePath(getApplicationContext().getCacheDir().getAbsolutePath()); + settings.setAllowFileAccess(true);//可访问文件 + settings.setDefaultTextEncodingName("UTF-8"); + settings.setAllowUniversalAccessFromFileURLs(true); // 设置在当前WebView继续加载网页 webview.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { - System.out.println("in shouldOverrideUrlLoading url"); try { // 处理自定义scheme协议 if (!url.startsWith("http")) { + //处理自定义scheme-->androidamap://viewMap?poiname=W00002&lat=39.9055035111111&lng=116.376759027778 Log.e("scheme", "处理自定义scheme-->" + url); // 如果要跳转地图 if (url.startsWith("androidamap:")) { @@ -120,34 +117,38 @@ //获取问号后的参数 String params = url.substring(url.indexOf('?')); Log.i("map", params); - if (url.indexOf("?") != -1) { + if (url.contains("?")) { String str = params.substring(1); String[] strs = str.split("&"); - for (int i = 0; i < strs.length; i++) { - String name = strs[i].split("=")[0]; - String value = strs[i].split("=")[1]; - if (name.equals("lng")) { - lng = value; - } else if (name.equals("lat")) { - lat = value; - } else if (name.equals("poiname")) { - pointname = value; + for (String s : strs) { + String name = s.split("=")[0]; + String value = s.split("=")[1]; + switch (name) { + case "lng": + lng = value; + break; + case "lat": + lat = value; + break; + case "poiname": + pointname = value; + break; } } } //用原生sdk加载地图 - Intent intent = new Intent(); - intent.putExtra("lng", lng); - intent.putExtra("lat", lat); - intent.putExtra("pointname", pointname); - intent.setClass(MainActivity.this, - MapInitActivity.class); - startActivity(intent); + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O) { + Intent intent = new Intent(MainActivity.this, MapInitActivity.class); + intent.putExtra("lng", lng); + intent.putExtra("lat", lat); + intent.putExtra("pointname", pointname); + startActivity(intent); + } else { + Toast.makeText(MainActivity.this, "系统版本过高,地图无法使用", Toast.LENGTH_SHORT).show(); + } } else if (url.startsWith("tel:")) { - final Intent intent = new Intent(Intent.ACTION_VIEW, - Uri.parse(url)); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK - | Intent.FLAG_ACTIVITY_SINGLE_TOP); + final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); } else { Toast.makeText(getApplicationContext(), "未能识别URL!", Toast.LENGTH_SHORT).show(); @@ -171,20 +172,17 @@ } @Override - public void onReceivedError(WebView view, int errorCode, String description, - String failingUrl) { + public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); //错误页面 webview.loadUrl("file:///android_asset/error.html"); } }); - // 给web提供调用接口 webview.addJavascriptInterface(new WebAppInterface(), "android"); // 加载html文件,欢迎页面 webview.loadUrl("file:///android_asset/hello.html"); - } @@ -203,56 +201,53 @@ //单点登录返回 super.onActivityResult(requestCode, resultCode, data); if (resultCode == 100) { - switch (requestCode) { - //单点登录页面的返回结果 - case 1001: - if (data != null) { - String result = data.getStringExtra("result"); - Log.e(LOG_TAG, "吉安宝验证结果 result === " + result); - JiAnBaoCheckResult tokenResult = new Gson().fromJson(result, JiAnBaoCheckResult.class); - if (tokenResult != null) { - if (tokenResult.isResult()) { - token = tokenResult.getSubjectDN(); - Log.e(LOG_TAG, "token === " + token); + //单点登录页面的返回结果 + if (requestCode == 1001) { + if (data != null) { + String result = data.getStringExtra("result"); + Log.e(LOG_TAG, "吉安宝验证结果 result === " + result); + JiAnBaoCheckResult tokenResult = new Gson().fromJson(result, JiAnBaoCheckResult.class); + if (tokenResult != null) { + if (tokenResult.isResult()) { + token = tokenResult.getSubjectDN(); + Log.e(LOG_TAG, "token === " + token); // webview.loadUrl("file:///android_asset/index.html?token="+token); - if (!TextUtils.isEmpty(token)) { - HttpOauthCheckUtil.getInstance().getUserInfo(oauth_url, token, new HttpCallback() { - @Override - public void onSuccess(String result) { - Toast.makeText(getApplicationContext(), "认证通过,欢迎使用", - Toast.LENGTH_SHORT).show(); - Log.e(LOG_TAG, "门户验证结果 === " + result); - userInfoResult = new Gson().fromJson(result, LoginReturn.class); - yys = getYys(getApplicationContext()); - String name = userInfoResult.getData().getName(); - String identifyCard = userInfoResult.getData().getIdentityCard(); - deviceData = new DeviceData(name, identifyCard, yys, imei); - Log.i("deviceData", deviceData.toString()); - webview.loadUrl("file:///android_asset/index.html"); - } + if (!TextUtils.isEmpty(token)) { + HttpOauthCheckUtil.getInstance().getUserInfo(oauth_url, token, new HttpCallback() { + @Override + public void onSuccess(String result) { + Toast.makeText(getApplicationContext(), "认证通过,欢迎使用", + Toast.LENGTH_SHORT).show(); + Log.e(LOG_TAG, "门户验证结果 === " + result); + userInfoResult = new Gson().fromJson(result, LoginReturn.class); + yys = getYys(getApplicationContext()); + String name = userInfoResult.getData().getName(); + String identifyCard = userInfoResult.getData().getIdentityCard(); + deviceData = new DeviceData(name, identifyCard, yys, imei); + Log.i("deviceData", deviceData.toString()); + webview.loadUrl("file:///android_asset/index.html"); + } - @Override - public void onFailed(String err) { - Log.e(LOG_TAG, "错误信息 === " + err); - Toast.makeText(getApplicationContext(), err, - Toast.LENGTH_SHORT).show(); - } - }); - } - } else { - //吉安宝认证失败 - Toast.makeText(getApplicationContext(), "吉安宝认证失败", - Toast.LENGTH_SHORT).show(); - Log.e(LOG_TAG, "吉安宝认证失败 "); + @Override + public void onFailed(String err) { + Log.e(LOG_TAG, "错误信息 === " + err); + Toast.makeText(getApplicationContext(), err, + Toast.LENGTH_SHORT).show(); + } + }); } } else { - Toast.makeText(getApplicationContext(), "请检查网络", + //吉安宝认证失败 + Toast.makeText(getApplicationContext(), "吉安宝认证失败", Toast.LENGTH_SHORT).show(); - Log.e(LOG_TAG, "请检查网络"); + Log.e(LOG_TAG, "吉安宝认证失败 "); } + } else { + Toast.makeText(getApplicationContext(), "请检查网络", + Toast.LENGTH_SHORT).show(); + Log.e(LOG_TAG, "请检查网络"); } - default: - break; + } } } // if (requestCode == LOGIN_CODE && resultCode == 100) { // resultCode 固定为100 @@ -277,13 +272,11 @@ @Override public void onBackPressed() { Log.i("webUrl", "webviewUrl" + webview.getUrl()); - if (webview.canGoBack() && !webview.getUrl().endsWith("/#/") - && !webview.getUrl().endsWith("/#/login")) { + if (webview.canGoBack() && !webview.getUrl().endsWith("/#/") && !webview.getUrl().endsWith("/#/login")) { webview.goBack(); } else { if ((System.currentTimeMillis() - exitTime) > 2000) { - Toast.makeText(getApplicationContext(), "再按一次退出程序", - Toast.LENGTH_SHORT).show(); + Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { super.onBackPressed(); @@ -299,22 +292,20 @@ Log.i("JSON:", json); return json; } else { - String json = ""; - return json; + return ""; } } @JavascriptInterface public String getAuth() { // 返回token - if (token != null && token != "") { + if (token != null && !token.equals("")) { Toast.makeText(getApplicationContext(), "获取用户权限", Toast.LENGTH_SHORT).show(); return token; } else { return null; } } - } //获取运营商 @@ -366,5 +357,38 @@ } return deviceId; } + + //获取SimSerialNumber + @SuppressLint({"HardwareIds"}) + public String obtainSimCardSerialNumber() { + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + //Android 10改为获取Android_ID + return Settings.System.getString(getContentResolver(), Settings.Secure.ANDROID_ID); + } else { + TelephonyManager telephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); + Class telephonyClass; + try { + telephonyClass = Class.forName(telephony.getClass().getName()); + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE_STATE); + } + //Android 10以下默认获取deviceId,部分手机获取不到deviceId不到的改为获取sim卡串码,如果依旧获取不到,返回"" + String imei = telephony.getDeviceId(); + if (TextUtils.isEmpty(imei)) { + Method m = telephonyClass.getMethod("getSimSerialNumber", int.class); + //主卡,卡1 + String mainCard = (String) m.invoke(telephony, 0); + //副卡,卡2 + String otherCard = (String) m.invoke(telephony, 1); + return mainCard; + } else { + return imei; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return ""; + } } diff --git a/app/src/main/java/com/casic/smartwellapp/MapInitActivity.java b/app/src/main/java/com/casic/smartwellapp/MapInitActivity.java index 1fa8471..ffe3784 100644 --- a/app/src/main/java/com/casic/smartwellapp/MapInitActivity.java +++ b/app/src/main/java/com/casic/smartwellapp/MapInitActivity.java @@ -1,12 +1,16 @@ package com.casic.smartwellapp; +import android.Manifest; import android.app.Activity; import android.content.Intent; +import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.widget.TextView; +import androidx.core.app.ActivityCompat; + import com.casic.smartwellapp.Entity.Constant; import com.easymap.android.maps.v3.EzMap; import com.easymap.android.maps.v3.EzMap.OnStatusChangeListener; @@ -20,23 +24,19 @@ import com.easymap.android.maps.v3.layers.ogc.WMTSLayer; import com.easymap.android.maps.v3.layers.ogc.WMTSLayerInfo; +import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; public class MapInitActivity extends Activity implements OnStatusChangeListener { + + public static final int REQUEST_PERMISSION = 11; private MapView mapView; - private EzMap ezMap; - private TextView textview; - private WMTSLayer wmtstdt; - private WMTSLayerInfo wmtslayerinfo; - private Marker marker; private String lng; private String lat; private String pointname; - private GraphicsLayer graphicslayer; - private BitmapDescriptor iconcircle; - @Override protected void onCreate(Bundle savedInstanceState) { @@ -47,7 +47,7 @@ lng = i.getStringExtra("lng"); lat = i.getStringExtra("lat"); pointname = i.getStringExtra("pointname"); - mapView = (MapView) findViewById(R.id.MapView); + mapView = findViewById(R.id.MapView); if (mapView != null) { // 注册地图准备就绪监听 mapView.setOnStatusChangeListener(this); @@ -60,54 +60,77 @@ inStream = getResources().getAssets().open("EzServiceClient4Android.lic"); // inStream = new FileInputStream(file); } catch (FileNotFoundException e) { - Log.e("mapError", "fileNotFoundException"); e.printStackTrace(); } catch (IOException e) { - Log.e("mapError", "streamFileNotFoundException"); e.printStackTrace(); } // 初始化许可方法 - mapView.initLicenseAsDevelopement(inStream); +// mapView.initLicenseAsDevelopement(inStream); + mapView.initLicense(getAssetsData("EzServiceClient4Android.lic"));//20210525 Pengxh修改 mapView.onCreate(getApplication(), savedInstanceState); - - } } @Override public void onStatusChanged(STATUS arg0) { - textview = (TextView) findViewById(R.id.textview); + TextView textview = findViewById(R.id.textview); textview.setText(pointname); // 得到地图对象 - ezMap = mapView.getMap(); + EzMap ezMap = mapView.getMap(); // 设置地图中心点 - ezMap.centerAt(new GeoPoint(Double.valueOf(lng), Double.valueOf(lat)), false); + ezMap.centerAt(new GeoPoint(Double.parseDouble(lng), Double.parseDouble(lat)), false); // 设置地图级别 ezMap.zoomTo(16, false); - wmtslayerinfo = new WMTSLayerInfo(); + WMTSLayerInfo wmtslayerinfo = new WMTSLayerInfo(); wmtslayerinfo.setVersion("1.0.0"); wmtslayerinfo.setFormat("tiles"); wmtslayerinfo.setStyle("default"); wmtslayerinfo.setLayerName("gdsl"); wmtslayerinfo.setTileMatrixSet("c"); // 实例化WMTSLayer 地图 - wmtstdt = new WMTSLayer("http://20.1.12.48/EzServer/Maps/gdsl", - wmtslayerinfo, "tdt_vec.cache", Environment.getExternalStorageDirectory() - + "/EzMap/st"); + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_PERMISSION); + } + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION); + } + WMTSLayer wmtstdt = new WMTSLayer("http://20.1.12.48/EzServer/Maps/gdsl", wmtslayerinfo, + "tdt_vec.cache", + Environment.getExternalStorageDirectory() + "/EzMap/st"); ezMap.addLayer(wmtstdt); - graphicslayer = new GraphicsLayer(SpatialReference.create(4326), - ezMap.getExtent()); - iconcircle = BitmapDescriptorFactory.defaultMarker(); + GraphicsLayer graphicslayer = new GraphicsLayer(SpatialReference.create(4326), ezMap.getExtent()); + BitmapDescriptor iconCircle = BitmapDescriptorFactory.defaultMarker(); ezMap.addLayer(graphicslayer); // 根据点的位置创建一个Marker的实例 - marker = new Marker(new GeoPoint(Double.valueOf(lng), Double.valueOf(lat)), iconcircle, 0.5f, 0.5f); -// 将marker添加到图层中 + Marker marker = new Marker(new GeoPoint(Double.parseDouble(lng), Double.parseDouble(lat)), iconCircle, 0.5f, 0.5f); + // 将marker添加到图层中 graphicslayer.addGraphic(marker); ezMap.refreshMap(); - - } + /** + * 获取本地Asserts文件内容 + */ + public String getAssetsData(String fileName) { + try { + InputStreamReader inputStreamReader = new InputStreamReader(getAssets().open(fileName)); + BufferedReader bufferedReader = new BufferedReader(inputStreamReader); + StringBuilder data = new StringBuilder(); + String s; + try { + while ((s = bufferedReader.readLine()) != null) { + data.append(s); + } + Log.d("map", "getAssetsData: " + data); + return data.toString(); + } catch (IOException e) { + e.printStackTrace(); + } + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } } diff --git a/app/src/main/res/layout/activity_map_init.xml b/app/src/main/res/layout/activity_map_init.xml index d621149..622144f 100644 --- a/app/src/main/res/layout/activity_map_init.xml +++ b/app/src/main/res/layout/activity_map_init.xml @@ -1,21 +1,22 @@ - - - + android:orientation="vertical"> + + + + diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml new file mode 100644 index 0000000..f1f424b --- /dev/null +++ b/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..146ab09 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 9e9754c..fa31bc0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,13 +2,13 @@ android { compileSdkVersion 29 - buildToolsVersion "29.0.1" + buildToolsVersion "29.0.3" defaultConfig { applicationId "com.casic.smartwellapp" minSdkVersion 17 targetSdkVersion 29 - versionCode 6 - versionName "1.1" + versionCode 7 + versionName "v1.1.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true } @@ -42,8 +42,8 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'androidx.appcompat:appcompat:1.0.2' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' @@ -51,7 +51,7 @@ implementation 'com.lbx:xTools:2.1.2' implementation 'org.bouncycastle:bcmail-jdk15on:1.59' implementation 'org.apache.commons:commons-lang3:3.1' - implementation 'com.alibaba:fastjson:1.2.12' + implementation 'com.alibaba:fastjson:1.2.68' implementation files('libs/guava-17.0.jar') implementation files('libs/androidsvg-1.2.2-beta-1.jar') implementation files('libs/EzLicenseAPI4Android.jar') @@ -62,5 +62,4 @@ implementation files('libs/kxml2-2.3.0.jar') implementation files('libs/jackson-mapper-lgpl-1.9.5.jar') implementation files('libs/jackson-core-lgpl-1.9.5.jar') - } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 55d30fd..6e34b75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,20 +23,31 @@ android:allowBackup="true" android:icon="@mipmap/znzj" android:label="@string/app_name" + android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme"> + android:theme="@style/AppThemeNoActionBar" + android:usesCleartextTraffic="true"> - + - + + + + \ No newline at end of file diff --git a/app/src/main/assets/EzServiceClient4Android.lic b/app/src/main/assets/EzServiceClient4Android.lic index 2f9a1c1..15c2e85 100644 --- a/app/src/main/assets/EzServiceClient4Android.lic +++ b/app/src/main/assets/EzServiceClient4Android.lic @@ -1,6 +1,6 @@ -f276fd50425e1516bd5fa1183d719e5188c3d196594315e14e003fa87c9edb2c5172bc06037febce58bc0cb093a6f99f46dfdd1ec48d8741353d2fb3aeb83b914b05c17e9431fcbd51ab5f05bc3ad8c850fcb169aa98094bedcae7c1687ed72580026733d8ea16ed193577111f96acf6b2bde5cbc093595fc611830331fd9409b33655b1d1734b525eda690fd3b9a525c6eb82869de321130dfce541c14dd51560d8def56d7363c23e50c539710bdf33c339fc9f70cd66319412b8684a2956e70c0e8a47586e2acfcb0292156ebfe275a48928e4f1fad576cff804a7e6efedac10faa1144f5c734e8fd877466b116dde7587da47d0ec9d851f3649145eef20baf8e55cce84ce5c2c469fee3374049e50e6d7e6badbd6f331ab55c3bc68df8fba9ed026ca69d0989d87dd101747d6d4e078fd972f8ec6372ae6d7e6badbd6f331da0c0ea0953023b21f3649145eef20ba876ec217701656916b67f9fc6bbfcf54e1d71aa6968e0d522edce43a825f8266ce240451cc3d2a6cb5f148d610d02c343fd149b7c6371aab62fcde50ab3874a019de7eb6e745bf9072215ec225e991125323109221ba90946ba59f7d8c7f4a96 -0cfa6c2c5eec924477d4869070a624f6338800b0cceeb3798744936e17f5dbe5ffc65ef9607dd62f7470c2075f59152b424800a6f3c2377ca4679102c0f410ea85fe94939f7b08cfa0c82baad441753322d07953b79a7c68e171ee41ac939ae90e153fef75c459a8acc519bae9a396a3754123ca956f1ccf4ed57fe0619215b3 -3082049030820255308201bea0030201020208485c64d3fba087a9300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3730303230313135333232385a180f32393730303230313135333232385a304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f7420436572746966696361746530819f300d06092a864886f70d010101050003818d00308189028181009467336181f34b81907f72d59f096b9e0bc71ec89dfe4ed3a3ccb9d4b493864d900fc2522ef090364ec86266c160101175fcceed985f2d63f598c915bc2096a1f7d42103a03f4798943a411c094da3e90666307c371c41e13ad19ee7ae54ec56219e9a80995dfd41199c43431764caff8d04c4c999818b8ac02590ffe7d97f390203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414a90da8091835c082a5e696dfe7f34066bfb2d4f7300d06092a864886f70d0101050500038181000c3163614e6017d01d1af63b67524528b37e8df1d999c7963681e0cebaf4c8846c56618723a25d5b0518cd8488422900e00720ba3f9f51c8bdbb18ee0c449a86f7e4abedce5684c6c4a558d7f8ca1e40028f2bf78d386337b0f7774220f89747107fbe4130e4f8dcd3d97019a499d73e183f626be08bd6e8f16b1fec8b6f46b2308202333082019ca003020102020863db91e7a94c1470300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f74204365727469666963617465301e170d3139303832323136303030305a170d3230303232323136303030305a302a310b300906035504061302434e311b301906035504030c12e58c97e4baace5b882e585ace5ae89e5b18030819f300d06092a864886f70d010101050003818d00308189028181009c67407ffc5a2cd8461f605e8ff0d96b4b6f9d09c0d776e1a1f67bd75d78426dd18525c0d4b3a5fc7252cc5c98c285e86785323190ad002882f8ad73e7b2e0cab6429fa0fa9884404ecc44dd0b560d798dd1dc52da219c781042c29d5e952fa9967748f21923611a564692d7f87d7b2c28737a69c8a499ce1e8687e3d599f6cd0203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414e873cba8b05182fcf5b0923afe0f7689466bd69a300d06092a864886f70d01010505000381810064368d80681403ac336e2d56125e057297ee491311ebda1ff5a050fe595cecabb285f3d395b6f5febf4d1e63767502acc922afe2452c68e02064e20c3c26c95c0a3d47cad4fdffbbb1640b6c03a67032d0a97ff4e2c2b3cb0f47327a3a644c2e9b5646af94d217c2eb0004117438cb1a7807707d345c3245a5e8a177ad5f1c35 +2510c4e69e269c8687aa62b975a8602285b31397afcbad497365138451765ed014ce89dd0005f08b90f365c081e38158037fe2a8aeae5765c59631f1a3703ce533f397bd9d5ad479c384a0434c2e8b6efca6442f38f3ddef31070f468b6f254008220ed4d33115dee053e46413d5f5a1ed74661b2e1f433a62ee986573dd22212f8061a1bded6b1ac13c4f0563986bcbe6c8086e15baefa963ba5b634ece82d902e83594c665b521dc7a8fce05122d7ed1573cf995ee331ab3f6d838d365cec76e443ceee1098d1dd011162692a0d3e10daf7ffc9d3de23eab186ad41e3cec6abb18bd091996d6040d8f536ea5e3328bf684c2dcede64a13b8549f1b024834e7f936fb7277d042c89d2f8d473272d0b7ab3024361f9779e03c63ce5f131295dcf0f167b96fb42626bb73792cf055412c069021d40678c09eab3024361f9779e0eea4a46ce6916af2b8549f1b024834e7a4b02eccbf324d7e75d2377fdb6279c8896959ccf251cac44da4194093c886834e28736e937a21e6e2c6054b8490c7542fc1ff3ec1e4a556293b42e4da1aa87dc72d8ca4659b7834cdc0181c4ec3700b233e26b1f9747324075a0a63335cfcef +4d39594536c496286928e6ca5e8e84aadf7b9c8d59409eb6e7d71d4b5ccd13ade769e96bd98099fe859b394d7572698f43f903af899886cfb54a873b19c7721cc6a20613278b157876401f2a29862c43d8748ac8c967dda527dfbd25923ca9e8183e89dfd88ac818fe94ed03360d7dc5f0a76527d7b82173b8f48a0cc70266a3 +3082049230820255308201bea0030201020208485c64d3fba087a9300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3730303230313135333232385a180f32393730303230313135333232385a304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f7420436572746966696361746530819f300d06092a864886f70d010101050003818d00308189028181009467336181f34b81907f72d59f096b9e0bc71ec89dfe4ed3a3ccb9d4b493864d900fc2522ef090364ec86266c160101175fcceed985f2d63f598c915bc2096a1f7d42103a03f4798943a411c094da3e90666307c371c41e13ad19ee7ae54ec56219e9a80995dfd41199c43431764caff8d04c4c999818b8ac02590ffe7d97f390203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e04160414a90da8091835c082a5e696dfe7f34066bfb2d4f7300d06092a864886f70d0101050500038181000c3163614e6017d01d1af63b67524528b37e8df1d999c7963681e0cebaf4c8846c56618723a25d5b0518cd8488422900e00720ba3f9f51c8bdbb18ee0c449a86f7e4abedce5684c6c4a558d7f8ca1e40028f2bf78d386337b0f7774220f89747107fbe4130e4f8dcd3d97019a499d73e183f626be08bd6e8f16b1fec8b6f46b2308202353082019ea00302010202085a09ebe5b8193320300d06092a864886f70d0101050500304a310b300906035504061302434e3110300e060355040a0c07456173794d617031293027060355040b0c20456173794d6170204c6963656e736520526f6f742043657274696669636174653020170d3231303431323136303030305a180f32303530303431323136303030305a302a310b300906035504061302434e311b301906035504030c12e58c97e4baace5b882e585ace5ae89e5b18030819f300d06092a864886f70d010101050003818d0030818902818100a9d0c339353cd1747bbcbb1573682de0a41f1c190e6aeb6a8af69e91236c0bfd6e6fec41b287b86ef5d7bd09d3631e34386dc8dd328e18364b3d067bdfb0c64a51de72ac238e026ccb32fc798cc350667fbfbfd3e451d009463ca872a99457499c88c7977e5e9f12118296d825de7febc2813f4e86d5bc96e4b477bf4a22e5bd0203010001a3423040301f0603551d23041830168014a90da8091835c082a5e696dfe7f34066bfb2d4f7301d0603551d0e041604147499564586404aa44a5ef1ad4b836996fdcb01f3300d06092a864886f70d0101050500038181006b57878916c1a3b8c6c15b7213c5ded9704bb66a59c759a3765194926be4f660fec68a6f7b52ffbb15e580eae637341e0c799a9859760bf463ef44a6263e6dff2ef53cbd4d9fddf79dcd771a84e8ba16ff75fad5bc33b0886d21150503dc2e1f55cda1d729699f6e754be4156db47c45805f16cf430db4a1ada8642f0b3e95c8 diff --git a/app/src/main/java/com/casic/smartwellapp/MainActivity.java b/app/src/main/java/com/casic/smartwellapp/MainActivity.java index cffa4e1..38bef40 100644 --- a/app/src/main/java/com/casic/smartwellapp/MainActivity.java +++ b/app/src/main/java/com/casic/smartwellapp/MainActivity.java @@ -34,7 +34,7 @@ import com.telecomyt.oauthlogin.http.HttpCallback; import com.telecomyt.oauthlogin.http.HttpOauthCheckUtil; -import java.io.InputStream; +import java.lang.reflect.Method; import java.util.List; import static com.telecomyt.oauthlogin.config.Config.LOG_TAG; @@ -47,27 +47,24 @@ private String ip; //ip private String imei; //imei private String yys; //运营商 - LoginReturn userInfoResult = null; //单点登录返回的用户信息 - DeviceData deviceData = null; //给用户返回的数据 + private LoginReturn userInfoResult = null; //单点登录返回的用户信息 + private DeviceData deviceData = null; //给用户返回的数据 - private String oauth_url = "http://menhu.telecomyt.com.cn:8080/"; //单点登录验证地址 + private static final String oauth_url = "http://menhu.telecomyt.com.cn:8080/"; //单点登录验证地址 private long exitTime = 0; //点击退出时间 private static final int LOGIN_CODE = 1001; - public final static int REQUEST_READ_PHONE_STATE = 1; - + public static final int REQUEST_READ_PHONE_STATE = 1; private String msgId; //推送消息id private String msgContent; //推送消息内容 - @RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - InputStream inStream = null; try { Intent intent = new Intent("com.telecomyt.portal.OAUTH"); intent.putExtra("appID", "3pb316_oauth"); @@ -79,8 +76,8 @@ } // imei = getIMEI(getApplicationContext()); - imei = getDeviceId(MainActivity.this); - +// imei = getDeviceId(MainActivity.this); + imei = obtainSimCardSerialNumber();//20210524 Pengxh修改 // if (getIntent() != null) { //// Intent intent = getIntent(); @@ -92,27 +89,27 @@ //webview // 获取控件对象 - webview = (WebView) findViewById(R.id.WV_ID); + webview = findViewById(R.id.WV_ID); WebView.setWebContentsDebuggingEnabled(true); - webview.getSettings().setJavaScriptEnabled(true);//设置webView属性,允许运行js脚本 - webview.getSettings().setDomStorageEnabled(true); - webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); - webview.getSettings().setAppCacheEnabled(true); - String appCatchPath = getApplicationContext().getCacheDir().getAbsolutePath(); - webview.getSettings().setAppCachePath(appCatchPath); - webview.getSettings().setAllowFileAccess(true);//可访问文件 - webview.getSettings().setDefaultTextEncodingName("UTF-8"); - webview.getSettings().setAllowUniversalAccessFromFileURLs(true); + WebSettings settings = webview.getSettings(); + settings.setJavaScriptEnabled(true);//设置webView属性,允许运行js脚本 + settings.setDomStorageEnabled(true); + settings.setCacheMode(WebSettings.LOAD_NO_CACHE); + settings.setAppCacheEnabled(true); + settings.setAppCachePath(getApplicationContext().getCacheDir().getAbsolutePath()); + settings.setAllowFileAccess(true);//可访问文件 + settings.setDefaultTextEncodingName("UTF-8"); + settings.setAllowUniversalAccessFromFileURLs(true); // 设置在当前WebView继续加载网页 webview.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { - System.out.println("in shouldOverrideUrlLoading url"); try { // 处理自定义scheme协议 if (!url.startsWith("http")) { + //处理自定义scheme-->androidamap://viewMap?poiname=W00002&lat=39.9055035111111&lng=116.376759027778 Log.e("scheme", "处理自定义scheme-->" + url); // 如果要跳转地图 if (url.startsWith("androidamap:")) { @@ -120,34 +117,38 @@ //获取问号后的参数 String params = url.substring(url.indexOf('?')); Log.i("map", params); - if (url.indexOf("?") != -1) { + if (url.contains("?")) { String str = params.substring(1); String[] strs = str.split("&"); - for (int i = 0; i < strs.length; i++) { - String name = strs[i].split("=")[0]; - String value = strs[i].split("=")[1]; - if (name.equals("lng")) { - lng = value; - } else if (name.equals("lat")) { - lat = value; - } else if (name.equals("poiname")) { - pointname = value; + for (String s : strs) { + String name = s.split("=")[0]; + String value = s.split("=")[1]; + switch (name) { + case "lng": + lng = value; + break; + case "lat": + lat = value; + break; + case "poiname": + pointname = value; + break; } } } //用原生sdk加载地图 - Intent intent = new Intent(); - intent.putExtra("lng", lng); - intent.putExtra("lat", lat); - intent.putExtra("pointname", pointname); - intent.setClass(MainActivity.this, - MapInitActivity.class); - startActivity(intent); + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O) { + Intent intent = new Intent(MainActivity.this, MapInitActivity.class); + intent.putExtra("lng", lng); + intent.putExtra("lat", lat); + intent.putExtra("pointname", pointname); + startActivity(intent); + } else { + Toast.makeText(MainActivity.this, "系统版本过高,地图无法使用", Toast.LENGTH_SHORT).show(); + } } else if (url.startsWith("tel:")) { - final Intent intent = new Intent(Intent.ACTION_VIEW, - Uri.parse(url)); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK - | Intent.FLAG_ACTIVITY_SINGLE_TOP); + final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); } else { Toast.makeText(getApplicationContext(), "未能识别URL!", Toast.LENGTH_SHORT).show(); @@ -171,20 +172,17 @@ } @Override - public void onReceivedError(WebView view, int errorCode, String description, - String failingUrl) { + public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); //错误页面 webview.loadUrl("file:///android_asset/error.html"); } }); - // 给web提供调用接口 webview.addJavascriptInterface(new WebAppInterface(), "android"); // 加载html文件,欢迎页面 webview.loadUrl("file:///android_asset/hello.html"); - } @@ -203,56 +201,53 @@ //单点登录返回 super.onActivityResult(requestCode, resultCode, data); if (resultCode == 100) { - switch (requestCode) { - //单点登录页面的返回结果 - case 1001: - if (data != null) { - String result = data.getStringExtra("result"); - Log.e(LOG_TAG, "吉安宝验证结果 result === " + result); - JiAnBaoCheckResult tokenResult = new Gson().fromJson(result, JiAnBaoCheckResult.class); - if (tokenResult != null) { - if (tokenResult.isResult()) { - token = tokenResult.getSubjectDN(); - Log.e(LOG_TAG, "token === " + token); + //单点登录页面的返回结果 + if (requestCode == 1001) { + if (data != null) { + String result = data.getStringExtra("result"); + Log.e(LOG_TAG, "吉安宝验证结果 result === " + result); + JiAnBaoCheckResult tokenResult = new Gson().fromJson(result, JiAnBaoCheckResult.class); + if (tokenResult != null) { + if (tokenResult.isResult()) { + token = tokenResult.getSubjectDN(); + Log.e(LOG_TAG, "token === " + token); // webview.loadUrl("file:///android_asset/index.html?token="+token); - if (!TextUtils.isEmpty(token)) { - HttpOauthCheckUtil.getInstance().getUserInfo(oauth_url, token, new HttpCallback() { - @Override - public void onSuccess(String result) { - Toast.makeText(getApplicationContext(), "认证通过,欢迎使用", - Toast.LENGTH_SHORT).show(); - Log.e(LOG_TAG, "门户验证结果 === " + result); - userInfoResult = new Gson().fromJson(result, LoginReturn.class); - yys = getYys(getApplicationContext()); - String name = userInfoResult.getData().getName(); - String identifyCard = userInfoResult.getData().getIdentityCard(); - deviceData = new DeviceData(name, identifyCard, yys, imei); - Log.i("deviceData", deviceData.toString()); - webview.loadUrl("file:///android_asset/index.html"); - } + if (!TextUtils.isEmpty(token)) { + HttpOauthCheckUtil.getInstance().getUserInfo(oauth_url, token, new HttpCallback() { + @Override + public void onSuccess(String result) { + Toast.makeText(getApplicationContext(), "认证通过,欢迎使用", + Toast.LENGTH_SHORT).show(); + Log.e(LOG_TAG, "门户验证结果 === " + result); + userInfoResult = new Gson().fromJson(result, LoginReturn.class); + yys = getYys(getApplicationContext()); + String name = userInfoResult.getData().getName(); + String identifyCard = userInfoResult.getData().getIdentityCard(); + deviceData = new DeviceData(name, identifyCard, yys, imei); + Log.i("deviceData", deviceData.toString()); + webview.loadUrl("file:///android_asset/index.html"); + } - @Override - public void onFailed(String err) { - Log.e(LOG_TAG, "错误信息 === " + err); - Toast.makeText(getApplicationContext(), err, - Toast.LENGTH_SHORT).show(); - } - }); - } - } else { - //吉安宝认证失败 - Toast.makeText(getApplicationContext(), "吉安宝认证失败", - Toast.LENGTH_SHORT).show(); - Log.e(LOG_TAG, "吉安宝认证失败 "); + @Override + public void onFailed(String err) { + Log.e(LOG_TAG, "错误信息 === " + err); + Toast.makeText(getApplicationContext(), err, + Toast.LENGTH_SHORT).show(); + } + }); } } else { - Toast.makeText(getApplicationContext(), "请检查网络", + //吉安宝认证失败 + Toast.makeText(getApplicationContext(), "吉安宝认证失败", Toast.LENGTH_SHORT).show(); - Log.e(LOG_TAG, "请检查网络"); + Log.e(LOG_TAG, "吉安宝认证失败 "); } + } else { + Toast.makeText(getApplicationContext(), "请检查网络", + Toast.LENGTH_SHORT).show(); + Log.e(LOG_TAG, "请检查网络"); } - default: - break; + } } } // if (requestCode == LOGIN_CODE && resultCode == 100) { // resultCode 固定为100 @@ -277,13 +272,11 @@ @Override public void onBackPressed() { Log.i("webUrl", "webviewUrl" + webview.getUrl()); - if (webview.canGoBack() && !webview.getUrl().endsWith("/#/") - && !webview.getUrl().endsWith("/#/login")) { + if (webview.canGoBack() && !webview.getUrl().endsWith("/#/") && !webview.getUrl().endsWith("/#/login")) { webview.goBack(); } else { if ((System.currentTimeMillis() - exitTime) > 2000) { - Toast.makeText(getApplicationContext(), "再按一次退出程序", - Toast.LENGTH_SHORT).show(); + Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { super.onBackPressed(); @@ -299,22 +292,20 @@ Log.i("JSON:", json); return json; } else { - String json = ""; - return json; + return ""; } } @JavascriptInterface public String getAuth() { // 返回token - if (token != null && token != "") { + if (token != null && !token.equals("")) { Toast.makeText(getApplicationContext(), "获取用户权限", Toast.LENGTH_SHORT).show(); return token; } else { return null; } } - } //获取运营商 @@ -366,5 +357,38 @@ } return deviceId; } + + //获取SimSerialNumber + @SuppressLint({"HardwareIds"}) + public String obtainSimCardSerialNumber() { + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + //Android 10改为获取Android_ID + return Settings.System.getString(getContentResolver(), Settings.Secure.ANDROID_ID); + } else { + TelephonyManager telephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); + Class telephonyClass; + try { + telephonyClass = Class.forName(telephony.getClass().getName()); + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE_STATE); + } + //Android 10以下默认获取deviceId,部分手机获取不到deviceId不到的改为获取sim卡串码,如果依旧获取不到,返回"" + String imei = telephony.getDeviceId(); + if (TextUtils.isEmpty(imei)) { + Method m = telephonyClass.getMethod("getSimSerialNumber", int.class); + //主卡,卡1 + String mainCard = (String) m.invoke(telephony, 0); + //副卡,卡2 + String otherCard = (String) m.invoke(telephony, 1); + return mainCard; + } else { + return imei; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return ""; + } } diff --git a/app/src/main/java/com/casic/smartwellapp/MapInitActivity.java b/app/src/main/java/com/casic/smartwellapp/MapInitActivity.java index 1fa8471..ffe3784 100644 --- a/app/src/main/java/com/casic/smartwellapp/MapInitActivity.java +++ b/app/src/main/java/com/casic/smartwellapp/MapInitActivity.java @@ -1,12 +1,16 @@ package com.casic.smartwellapp; +import android.Manifest; import android.app.Activity; import android.content.Intent; +import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.widget.TextView; +import androidx.core.app.ActivityCompat; + import com.casic.smartwellapp.Entity.Constant; import com.easymap.android.maps.v3.EzMap; import com.easymap.android.maps.v3.EzMap.OnStatusChangeListener; @@ -20,23 +24,19 @@ import com.easymap.android.maps.v3.layers.ogc.WMTSLayer; import com.easymap.android.maps.v3.layers.ogc.WMTSLayerInfo; +import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; public class MapInitActivity extends Activity implements OnStatusChangeListener { + + public static final int REQUEST_PERMISSION = 11; private MapView mapView; - private EzMap ezMap; - private TextView textview; - private WMTSLayer wmtstdt; - private WMTSLayerInfo wmtslayerinfo; - private Marker marker; private String lng; private String lat; private String pointname; - private GraphicsLayer graphicslayer; - private BitmapDescriptor iconcircle; - @Override protected void onCreate(Bundle savedInstanceState) { @@ -47,7 +47,7 @@ lng = i.getStringExtra("lng"); lat = i.getStringExtra("lat"); pointname = i.getStringExtra("pointname"); - mapView = (MapView) findViewById(R.id.MapView); + mapView = findViewById(R.id.MapView); if (mapView != null) { // 注册地图准备就绪监听 mapView.setOnStatusChangeListener(this); @@ -60,54 +60,77 @@ inStream = getResources().getAssets().open("EzServiceClient4Android.lic"); // inStream = new FileInputStream(file); } catch (FileNotFoundException e) { - Log.e("mapError", "fileNotFoundException"); e.printStackTrace(); } catch (IOException e) { - Log.e("mapError", "streamFileNotFoundException"); e.printStackTrace(); } // 初始化许可方法 - mapView.initLicenseAsDevelopement(inStream); +// mapView.initLicenseAsDevelopement(inStream); + mapView.initLicense(getAssetsData("EzServiceClient4Android.lic"));//20210525 Pengxh修改 mapView.onCreate(getApplication(), savedInstanceState); - - } } @Override public void onStatusChanged(STATUS arg0) { - textview = (TextView) findViewById(R.id.textview); + TextView textview = findViewById(R.id.textview); textview.setText(pointname); // 得到地图对象 - ezMap = mapView.getMap(); + EzMap ezMap = mapView.getMap(); // 设置地图中心点 - ezMap.centerAt(new GeoPoint(Double.valueOf(lng), Double.valueOf(lat)), false); + ezMap.centerAt(new GeoPoint(Double.parseDouble(lng), Double.parseDouble(lat)), false); // 设置地图级别 ezMap.zoomTo(16, false); - wmtslayerinfo = new WMTSLayerInfo(); + WMTSLayerInfo wmtslayerinfo = new WMTSLayerInfo(); wmtslayerinfo.setVersion("1.0.0"); wmtslayerinfo.setFormat("tiles"); wmtslayerinfo.setStyle("default"); wmtslayerinfo.setLayerName("gdsl"); wmtslayerinfo.setTileMatrixSet("c"); // 实例化WMTSLayer 地图 - wmtstdt = new WMTSLayer("http://20.1.12.48/EzServer/Maps/gdsl", - wmtslayerinfo, "tdt_vec.cache", Environment.getExternalStorageDirectory() - + "/EzMap/st"); + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_PERMISSION); + } + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION); + } + WMTSLayer wmtstdt = new WMTSLayer("http://20.1.12.48/EzServer/Maps/gdsl", wmtslayerinfo, + "tdt_vec.cache", + Environment.getExternalStorageDirectory() + "/EzMap/st"); ezMap.addLayer(wmtstdt); - graphicslayer = new GraphicsLayer(SpatialReference.create(4326), - ezMap.getExtent()); - iconcircle = BitmapDescriptorFactory.defaultMarker(); + GraphicsLayer graphicslayer = new GraphicsLayer(SpatialReference.create(4326), ezMap.getExtent()); + BitmapDescriptor iconCircle = BitmapDescriptorFactory.defaultMarker(); ezMap.addLayer(graphicslayer); // 根据点的位置创建一个Marker的实例 - marker = new Marker(new GeoPoint(Double.valueOf(lng), Double.valueOf(lat)), iconcircle, 0.5f, 0.5f); -// 将marker添加到图层中 + Marker marker = new Marker(new GeoPoint(Double.parseDouble(lng), Double.parseDouble(lat)), iconCircle, 0.5f, 0.5f); + // 将marker添加到图层中 graphicslayer.addGraphic(marker); ezMap.refreshMap(); - - } + /** + * 获取本地Asserts文件内容 + */ + public String getAssetsData(String fileName) { + try { + InputStreamReader inputStreamReader = new InputStreamReader(getAssets().open(fileName)); + BufferedReader bufferedReader = new BufferedReader(inputStreamReader); + StringBuilder data = new StringBuilder(); + String s; + try { + while ((s = bufferedReader.readLine()) != null) { + data.append(s); + } + Log.d("map", "getAssetsData: " + data); + return data.toString(); + } catch (IOException e) { + e.printStackTrace(); + } + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } } diff --git a/app/src/main/res/layout/activity_map_init.xml b/app/src/main/res/layout/activity_map_init.xml index d621149..622144f 100644 --- a/app/src/main/res/layout/activity_map_init.xml +++ b/app/src/main/res/layout/activity_map_init.xml @@ -1,21 +1,22 @@ - - - + android:orientation="vertical"> + + + + diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml new file mode 100644 index 0000000..f1f424b --- /dev/null +++ b/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/well.jks b/well.jks new file mode 100644 index 0000000..45c4bcf --- /dev/null +++ b/well.jks Binary files differ