diff --git a/app/build.gradle b/app/build.gradle
index 414e67a..9ef0da7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -24,6 +24,8 @@
versionCode 1
versionName "1.0.0.0"
+ manifestPlaceholders = [GETUI_APPID: "RoW3b4QCWH9EnYYiyaUJz5"]
+
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
}
@@ -117,8 +119,6 @@
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//PDF预览
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
- //绕过Android 11反射限制
- implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//数据库框架
@@ -127,4 +127,8 @@
implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
//WebView
implementation 'com.just.agentweb:agentweb-androidx:4.1.4'
+ //个推SDK
+ implementation 'com.getui:gtsdk:3.2.15.0'
+ //个推核心组件
+ implementation 'com.getui:gtc:3.2.1.0'
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 414e67a..9ef0da7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -24,6 +24,8 @@
versionCode 1
versionName "1.0.0.0"
+ manifestPlaceholders = [GETUI_APPID: "RoW3b4QCWH9EnYYiyaUJz5"]
+
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
}
@@ -117,8 +119,6 @@
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//PDF预览
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
- //绕过Android 11反射限制
- implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//数据库框架
@@ -127,4 +127,8 @@
implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
//WebView
implementation 'com.just.agentweb:agentweb-androidx:4.1.4'
+ //个推SDK
+ implementation 'com.getui:gtsdk:3.2.15.0'
+ //个推核心组件
+ implementation 'com.getui:gtc:3.2.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9efc1f6..4da294c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -112,11 +112,28 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
+
+
+
+
+
+
+
-
+
+
+
+
+
diff --git a/app/build.gradle b/app/build.gradle
index 414e67a..9ef0da7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -24,6 +24,8 @@
versionCode 1
versionName "1.0.0.0"
+ manifestPlaceholders = [GETUI_APPID: "RoW3b4QCWH9EnYYiyaUJz5"]
+
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
}
@@ -117,8 +119,6 @@
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//PDF预览
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
- //绕过Android 11反射限制
- implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//数据库框架
@@ -127,4 +127,8 @@
implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
//WebView
implementation 'com.just.agentweb:agentweb-androidx:4.1.4'
+ //个推SDK
+ implementation 'com.getui:gtsdk:3.2.15.0'
+ //个推核心组件
+ implementation 'com.getui:gtc:3.2.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9efc1f6..4da294c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -112,11 +112,28 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
+
+
+
+
+
+
+
-
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 1684c23..54f19f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -1,15 +1,17 @@
package com.casic.xz.meterage.base
import android.app.Application
-import android.content.Context
+import android.util.Log
import com.casic.xz.meterage.greendao.DaoMaster
import com.casic.xz.meterage.greendao.DaoSession
+import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
-import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
class BaseApplication : Application() {
+ private val kTag = "BaseApplication"
+
companion object {
private var application: BaseApplication by Delegates.notNull()
@@ -22,7 +24,11 @@
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
-
+ //推送
+ PushManager.getInstance().initialize(this)
+ PushManager.getInstance().setDebugLogger(this) {
+ Log.d(kTag, it)
+ }
val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
@@ -31,10 +37,4 @@
fun getDaoSession(): DaoSession {
return daoSession
}
-
- //绕过Android 11以上反射限制
- override fun attachBaseContext(base: Context?) {
- super.attachBaseContext(base)
- Reflection.unseal(base)
- }
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 414e67a..9ef0da7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -24,6 +24,8 @@
versionCode 1
versionName "1.0.0.0"
+ manifestPlaceholders = [GETUI_APPID: "RoW3b4QCWH9EnYYiyaUJz5"]
+
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
}
@@ -117,8 +119,6 @@
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//PDF预览
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
- //绕过Android 11反射限制
- implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//数据库框架
@@ -127,4 +127,8 @@
implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
//WebView
implementation 'com.just.agentweb:agentweb-androidx:4.1.4'
+ //个推SDK
+ implementation 'com.getui:gtsdk:3.2.15.0'
+ //个推核心组件
+ implementation 'com.getui:gtc:3.2.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9efc1f6..4da294c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -112,11 +112,28 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
+
+
+
+
+
+
+
-
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 1684c23..54f19f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -1,15 +1,17 @@
package com.casic.xz.meterage.base
import android.app.Application
-import android.content.Context
+import android.util.Log
import com.casic.xz.meterage.greendao.DaoMaster
import com.casic.xz.meterage.greendao.DaoSession
+import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
-import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
class BaseApplication : Application() {
+ private val kTag = "BaseApplication"
+
companion object {
private var application: BaseApplication by Delegates.notNull()
@@ -22,7 +24,11 @@
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
-
+ //推送
+ PushManager.getInstance().initialize(this)
+ PushManager.getInstance().setDebugLogger(this) {
+ Log.d(kTag, it)
+ }
val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
@@ -31,10 +37,4 @@
fun getDaoSession(): DaoSession {
return daoSession
}
-
- //绕过Android 11以上反射限制
- override fun attachBaseContext(base: Context?) {
- super.attachBaseContext(base)
- Reflection.unseal(base)
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
index c2deab4..883a51e 100644
--- a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
@@ -1,20 +1,40 @@
package com.casic.xz.meterage.extensions
import android.content.Context
+import android.os.Build
+import android.util.Log
import android.view.ViewGroup
-import com.casic.xz.meterage.base.BaseApplication
+import android.view.WindowInsets
+import android.view.WindowManager
import com.casic.xz.meterage.utils.LocaleConstant
import com.pengxh.kt.lite.extensions.convertColor
-import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlin.random.Random
-fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
- var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
- if (statusBarHeight == 0) {
- statusBarHeight = 40f.dp2px(BaseApplication.get())
+/**
+ * 获取状态栏高度,兼容Android 11+
+ * */
+fun Context.getStatusBarHeight(): Int {
+ val statusBarHeight = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ val windowManager = this.getSystemService(Context.WINDOW_SERVICE) as WindowManager
+ val windowMetrics = windowManager.currentWindowMetrics
+ val windowInsets = windowMetrics.windowInsets
+
+ val type = WindowInsets.Type.navigationBars() or WindowInsets.Type.displayCutout()
+ val insets = windowInsets.getInsetsIgnoringVisibility(type)
+ insets.top
+ } else {
+ QMUIDisplayHelper.getStatusBarHeight(this)
}
- rootView.setPadding(0, statusBarHeight, 0, 0)
+ Log.d("kTag", "getStatusBarHeight => $statusBarHeight")
+ return statusBarHeight
+}
+
+/**
+ * 设置沉浸式状态栏,兼容Android 11+
+ * */
+fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
+ rootView.setPadding(0, getStatusBarHeight(), 0, 0)
rootView.requestLayout()
}
diff --git a/app/build.gradle b/app/build.gradle
index 414e67a..9ef0da7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -24,6 +24,8 @@
versionCode 1
versionName "1.0.0.0"
+ manifestPlaceholders = [GETUI_APPID: "RoW3b4QCWH9EnYYiyaUJz5"]
+
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
}
@@ -117,8 +119,6 @@
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//PDF预览
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
- //绕过Android 11反射限制
- implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//数据库框架
@@ -127,4 +127,8 @@
implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
//WebView
implementation 'com.just.agentweb:agentweb-androidx:4.1.4'
+ //个推SDK
+ implementation 'com.getui:gtsdk:3.2.15.0'
+ //个推核心组件
+ implementation 'com.getui:gtc:3.2.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9efc1f6..4da294c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -112,11 +112,28 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
+
+
+
+
+
+
+
-
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 1684c23..54f19f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -1,15 +1,17 @@
package com.casic.xz.meterage.base
import android.app.Application
-import android.content.Context
+import android.util.Log
import com.casic.xz.meterage.greendao.DaoMaster
import com.casic.xz.meterage.greendao.DaoSession
+import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
-import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
class BaseApplication : Application() {
+ private val kTag = "BaseApplication"
+
companion object {
private var application: BaseApplication by Delegates.notNull()
@@ -22,7 +24,11 @@
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
-
+ //推送
+ PushManager.getInstance().initialize(this)
+ PushManager.getInstance().setDebugLogger(this) {
+ Log.d(kTag, it)
+ }
val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
@@ -31,10 +37,4 @@
fun getDaoSession(): DaoSession {
return daoSession
}
-
- //绕过Android 11以上反射限制
- override fun attachBaseContext(base: Context?) {
- super.attachBaseContext(base)
- Reflection.unseal(base)
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
index c2deab4..883a51e 100644
--- a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
@@ -1,20 +1,40 @@
package com.casic.xz.meterage.extensions
import android.content.Context
+import android.os.Build
+import android.util.Log
import android.view.ViewGroup
-import com.casic.xz.meterage.base.BaseApplication
+import android.view.WindowInsets
+import android.view.WindowManager
import com.casic.xz.meterage.utils.LocaleConstant
import com.pengxh.kt.lite.extensions.convertColor
-import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlin.random.Random
-fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
- var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
- if (statusBarHeight == 0) {
- statusBarHeight = 40f.dp2px(BaseApplication.get())
+/**
+ * 获取状态栏高度,兼容Android 11+
+ * */
+fun Context.getStatusBarHeight(): Int {
+ val statusBarHeight = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ val windowManager = this.getSystemService(Context.WINDOW_SERVICE) as WindowManager
+ val windowMetrics = windowManager.currentWindowMetrics
+ val windowInsets = windowMetrics.windowInsets
+
+ val type = WindowInsets.Type.navigationBars() or WindowInsets.Type.displayCutout()
+ val insets = windowInsets.getInsetsIgnoringVisibility(type)
+ insets.top
+ } else {
+ QMUIDisplayHelper.getStatusBarHeight(this)
}
- rootView.setPadding(0, statusBarHeight, 0, 0)
+ Log.d("kTag", "getStatusBarHeight => $statusBarHeight")
+ return statusBarHeight
+}
+
+/**
+ * 设置沉浸式状态栏,兼容Android 11+
+ * */
+fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
+ rootView.setPadding(0, getStatusBarHeight(), 0, 0)
rootView.requestLayout()
}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
index 5e317d9..f48b04b 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
@@ -5,6 +5,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.SubViewPagerAdapter
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.fragment.detection.AwaitDetectionFragment
import com.casic.xz.meterage.fragment.detection.CompletedDetectionFragment
import com.casic.xz.meterage.fragment.detection.UnderDetectionFragment
@@ -12,7 +13,6 @@
import com.casic.xz.meterage.vm.DetectionViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_detection.*
import kotlinx.android.synthetic.main.include_detection_top_layout.*
@@ -79,7 +79,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/build.gradle b/app/build.gradle
index 414e67a..9ef0da7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -24,6 +24,8 @@
versionCode 1
versionName "1.0.0.0"
+ manifestPlaceholders = [GETUI_APPID: "RoW3b4QCWH9EnYYiyaUJz5"]
+
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
}
@@ -117,8 +119,6 @@
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//PDF预览
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
- //绕过Android 11反射限制
- implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//数据库框架
@@ -127,4 +127,8 @@
implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
//WebView
implementation 'com.just.agentweb:agentweb-androidx:4.1.4'
+ //个推SDK
+ implementation 'com.getui:gtsdk:3.2.15.0'
+ //个推核心组件
+ implementation 'com.getui:gtc:3.2.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9efc1f6..4da294c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -112,11 +112,28 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
+
+
+
+
+
+
+
-
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 1684c23..54f19f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -1,15 +1,17 @@
package com.casic.xz.meterage.base
import android.app.Application
-import android.content.Context
+import android.util.Log
import com.casic.xz.meterage.greendao.DaoMaster
import com.casic.xz.meterage.greendao.DaoSession
+import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
-import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
class BaseApplication : Application() {
+ private val kTag = "BaseApplication"
+
companion object {
private var application: BaseApplication by Delegates.notNull()
@@ -22,7 +24,11 @@
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
-
+ //推送
+ PushManager.getInstance().initialize(this)
+ PushManager.getInstance().setDebugLogger(this) {
+ Log.d(kTag, it)
+ }
val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
@@ -31,10 +37,4 @@
fun getDaoSession(): DaoSession {
return daoSession
}
-
- //绕过Android 11以上反射限制
- override fun attachBaseContext(base: Context?) {
- super.attachBaseContext(base)
- Reflection.unseal(base)
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
index c2deab4..883a51e 100644
--- a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
@@ -1,20 +1,40 @@
package com.casic.xz.meterage.extensions
import android.content.Context
+import android.os.Build
+import android.util.Log
import android.view.ViewGroup
-import com.casic.xz.meterage.base.BaseApplication
+import android.view.WindowInsets
+import android.view.WindowManager
import com.casic.xz.meterage.utils.LocaleConstant
import com.pengxh.kt.lite.extensions.convertColor
-import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlin.random.Random
-fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
- var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
- if (statusBarHeight == 0) {
- statusBarHeight = 40f.dp2px(BaseApplication.get())
+/**
+ * 获取状态栏高度,兼容Android 11+
+ * */
+fun Context.getStatusBarHeight(): Int {
+ val statusBarHeight = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ val windowManager = this.getSystemService(Context.WINDOW_SERVICE) as WindowManager
+ val windowMetrics = windowManager.currentWindowMetrics
+ val windowInsets = windowMetrics.windowInsets
+
+ val type = WindowInsets.Type.navigationBars() or WindowInsets.Type.displayCutout()
+ val insets = windowInsets.getInsetsIgnoringVisibility(type)
+ insets.top
+ } else {
+ QMUIDisplayHelper.getStatusBarHeight(this)
}
- rootView.setPadding(0, statusBarHeight, 0, 0)
+ Log.d("kTag", "getStatusBarHeight => $statusBarHeight")
+ return statusBarHeight
+}
+
+/**
+ * 设置沉浸式状态栏,兼容Android 11+
+ * */
+fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
+ rootView.setPadding(0, getStatusBarHeight(), 0, 0)
rootView.requestLayout()
}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
index 5e317d9..f48b04b 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
@@ -5,6 +5,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.SubViewPagerAdapter
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.fragment.detection.AwaitDetectionFragment
import com.casic.xz.meterage.fragment.detection.CompletedDetectionFragment
import com.casic.xz.meterage.fragment.detection.UnderDetectionFragment
@@ -12,7 +13,6 @@
import com.casic.xz.meterage.vm.DetectionViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_detection.*
import kotlinx.android.synthetic.main.include_detection_top_layout.*
@@ -79,7 +79,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 4a2b470..73966f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import com.casic.xz.meterage.base.BaseApplication
import com.casic.xz.meterage.extensions.diffCurrentTime
import com.casic.xz.meterage.extensions.formatToDate
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
@@ -34,7 +35,6 @@
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_home.*
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
@@ -249,7 +249,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/build.gradle b/app/build.gradle
index 414e67a..9ef0da7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -24,6 +24,8 @@
versionCode 1
versionName "1.0.0.0"
+ manifestPlaceholders = [GETUI_APPID: "RoW3b4QCWH9EnYYiyaUJz5"]
+
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
}
@@ -117,8 +119,6 @@
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//PDF预览
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
- //绕过Android 11反射限制
- implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//数据库框架
@@ -127,4 +127,8 @@
implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
//WebView
implementation 'com.just.agentweb:agentweb-androidx:4.1.4'
+ //个推SDK
+ implementation 'com.getui:gtsdk:3.2.15.0'
+ //个推核心组件
+ implementation 'com.getui:gtc:3.2.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9efc1f6..4da294c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -112,11 +112,28 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
+
+
+
+
+
+
+
-
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 1684c23..54f19f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -1,15 +1,17 @@
package com.casic.xz.meterage.base
import android.app.Application
-import android.content.Context
+import android.util.Log
import com.casic.xz.meterage.greendao.DaoMaster
import com.casic.xz.meterage.greendao.DaoSession
+import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
-import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
class BaseApplication : Application() {
+ private val kTag = "BaseApplication"
+
companion object {
private var application: BaseApplication by Delegates.notNull()
@@ -22,7 +24,11 @@
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
-
+ //推送
+ PushManager.getInstance().initialize(this)
+ PushManager.getInstance().setDebugLogger(this) {
+ Log.d(kTag, it)
+ }
val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
@@ -31,10 +37,4 @@
fun getDaoSession(): DaoSession {
return daoSession
}
-
- //绕过Android 11以上反射限制
- override fun attachBaseContext(base: Context?) {
- super.attachBaseContext(base)
- Reflection.unseal(base)
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
index c2deab4..883a51e 100644
--- a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
@@ -1,20 +1,40 @@
package com.casic.xz.meterage.extensions
import android.content.Context
+import android.os.Build
+import android.util.Log
import android.view.ViewGroup
-import com.casic.xz.meterage.base.BaseApplication
+import android.view.WindowInsets
+import android.view.WindowManager
import com.casic.xz.meterage.utils.LocaleConstant
import com.pengxh.kt.lite.extensions.convertColor
-import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlin.random.Random
-fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
- var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
- if (statusBarHeight == 0) {
- statusBarHeight = 40f.dp2px(BaseApplication.get())
+/**
+ * 获取状态栏高度,兼容Android 11+
+ * */
+fun Context.getStatusBarHeight(): Int {
+ val statusBarHeight = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ val windowManager = this.getSystemService(Context.WINDOW_SERVICE) as WindowManager
+ val windowMetrics = windowManager.currentWindowMetrics
+ val windowInsets = windowMetrics.windowInsets
+
+ val type = WindowInsets.Type.navigationBars() or WindowInsets.Type.displayCutout()
+ val insets = windowInsets.getInsetsIgnoringVisibility(type)
+ insets.top
+ } else {
+ QMUIDisplayHelper.getStatusBarHeight(this)
}
- rootView.setPadding(0, statusBarHeight, 0, 0)
+ Log.d("kTag", "getStatusBarHeight => $statusBarHeight")
+ return statusBarHeight
+}
+
+/**
+ * 设置沉浸式状态栏,兼容Android 11+
+ * */
+fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
+ rootView.setPadding(0, getStatusBarHeight(), 0, 0)
rootView.requestLayout()
}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
index 5e317d9..f48b04b 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
@@ -5,6 +5,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.SubViewPagerAdapter
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.fragment.detection.AwaitDetectionFragment
import com.casic.xz.meterage.fragment.detection.CompletedDetectionFragment
import com.casic.xz.meterage.fragment.detection.UnderDetectionFragment
@@ -12,7 +13,6 @@
import com.casic.xz.meterage.vm.DetectionViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_detection.*
import kotlinx.android.synthetic.main.include_detection_top_layout.*
@@ -79,7 +79,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 4a2b470..73966f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import com.casic.xz.meterage.base.BaseApplication
import com.casic.xz.meterage.extensions.diffCurrentTime
import com.casic.xz.meterage.extensions.formatToDate
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
@@ -34,7 +35,6 @@
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_home.*
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
@@ -249,7 +249,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index 77c77d4..fc950e1 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -10,6 +10,7 @@
import com.casic.xz.meterage.callback.OnImageCompressListener
import com.casic.xz.meterage.extensions.combineImagePath
import com.casic.xz.meterage.extensions.compressImage
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.extensions.reformat
import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.FileType
@@ -34,7 +35,6 @@
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_mine.*
import java.io.File
@@ -238,7 +238,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/build.gradle b/app/build.gradle
index 414e67a..9ef0da7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -24,6 +24,8 @@
versionCode 1
versionName "1.0.0.0"
+ manifestPlaceholders = [GETUI_APPID: "RoW3b4QCWH9EnYYiyaUJz5"]
+
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
}
@@ -117,8 +119,6 @@
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//PDF预览
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
- //绕过Android 11反射限制
- implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//数据库框架
@@ -127,4 +127,8 @@
implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
//WebView
implementation 'com.just.agentweb:agentweb-androidx:4.1.4'
+ //个推SDK
+ implementation 'com.getui:gtsdk:3.2.15.0'
+ //个推核心组件
+ implementation 'com.getui:gtc:3.2.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9efc1f6..4da294c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -112,11 +112,28 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
+
+
+
+
+
+
+
-
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 1684c23..54f19f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -1,15 +1,17 @@
package com.casic.xz.meterage.base
import android.app.Application
-import android.content.Context
+import android.util.Log
import com.casic.xz.meterage.greendao.DaoMaster
import com.casic.xz.meterage.greendao.DaoSession
+import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
-import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
class BaseApplication : Application() {
+ private val kTag = "BaseApplication"
+
companion object {
private var application: BaseApplication by Delegates.notNull()
@@ -22,7 +24,11 @@
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
-
+ //推送
+ PushManager.getInstance().initialize(this)
+ PushManager.getInstance().setDebugLogger(this) {
+ Log.d(kTag, it)
+ }
val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
@@ -31,10 +37,4 @@
fun getDaoSession(): DaoSession {
return daoSession
}
-
- //绕过Android 11以上反射限制
- override fun attachBaseContext(base: Context?) {
- super.attachBaseContext(base)
- Reflection.unseal(base)
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
index c2deab4..883a51e 100644
--- a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
@@ -1,20 +1,40 @@
package com.casic.xz.meterage.extensions
import android.content.Context
+import android.os.Build
+import android.util.Log
import android.view.ViewGroup
-import com.casic.xz.meterage.base.BaseApplication
+import android.view.WindowInsets
+import android.view.WindowManager
import com.casic.xz.meterage.utils.LocaleConstant
import com.pengxh.kt.lite.extensions.convertColor
-import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlin.random.Random
-fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
- var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
- if (statusBarHeight == 0) {
- statusBarHeight = 40f.dp2px(BaseApplication.get())
+/**
+ * 获取状态栏高度,兼容Android 11+
+ * */
+fun Context.getStatusBarHeight(): Int {
+ val statusBarHeight = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ val windowManager = this.getSystemService(Context.WINDOW_SERVICE) as WindowManager
+ val windowMetrics = windowManager.currentWindowMetrics
+ val windowInsets = windowMetrics.windowInsets
+
+ val type = WindowInsets.Type.navigationBars() or WindowInsets.Type.displayCutout()
+ val insets = windowInsets.getInsetsIgnoringVisibility(type)
+ insets.top
+ } else {
+ QMUIDisplayHelper.getStatusBarHeight(this)
}
- rootView.setPadding(0, statusBarHeight, 0, 0)
+ Log.d("kTag", "getStatusBarHeight => $statusBarHeight")
+ return statusBarHeight
+}
+
+/**
+ * 设置沉浸式状态栏,兼容Android 11+
+ * */
+fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
+ rootView.setPadding(0, getStatusBarHeight(), 0, 0)
rootView.requestLayout()
}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
index 5e317d9..f48b04b 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
@@ -5,6 +5,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.SubViewPagerAdapter
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.fragment.detection.AwaitDetectionFragment
import com.casic.xz.meterage.fragment.detection.CompletedDetectionFragment
import com.casic.xz.meterage.fragment.detection.UnderDetectionFragment
@@ -12,7 +13,6 @@
import com.casic.xz.meterage.vm.DetectionViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_detection.*
import kotlinx.android.synthetic.main.include_detection_top_layout.*
@@ -79,7 +79,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 4a2b470..73966f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import com.casic.xz.meterage.base.BaseApplication
import com.casic.xz.meterage.extensions.diffCurrentTime
import com.casic.xz.meterage.extensions.formatToDate
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
@@ -34,7 +35,6 @@
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_home.*
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
@@ -249,7 +249,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index 77c77d4..fc950e1 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -10,6 +10,7 @@
import com.casic.xz.meterage.callback.OnImageCompressListener
import com.casic.xz.meterage.extensions.combineImagePath
import com.casic.xz.meterage.extensions.compressImage
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.extensions.reformat
import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.FileType
@@ -34,7 +35,6 @@
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_mine.*
import java.io.File
@@ -238,7 +238,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
index 828bd85..e683aed 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
@@ -5,6 +5,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.SubViewPagerAdapter
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.fragment.task.AwaitTaskFragment
import com.casic.xz.meterage.fragment.task.CompletedTaskFragment
import com.casic.xz.meterage.fragment.task.OvertimeTaskFragment
@@ -13,7 +14,6 @@
import com.casic.xz.meterage.vm.TaskViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_task.*
import kotlinx.android.synthetic.main.include_task_top_layout.*
@@ -82,7 +82,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/build.gradle b/app/build.gradle
index 414e67a..9ef0da7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -24,6 +24,8 @@
versionCode 1
versionName "1.0.0.0"
+ manifestPlaceholders = [GETUI_APPID: "RoW3b4QCWH9EnYYiyaUJz5"]
+
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
}
@@ -117,8 +119,6 @@
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//PDF预览
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
- //绕过Android 11反射限制
- implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//数据库框架
@@ -127,4 +127,8 @@
implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
//WebView
implementation 'com.just.agentweb:agentweb-androidx:4.1.4'
+ //个推SDK
+ implementation 'com.getui:gtsdk:3.2.15.0'
+ //个推核心组件
+ implementation 'com.getui:gtc:3.2.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9efc1f6..4da294c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -112,11 +112,28 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
+
+
+
+
+
+
+
-
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 1684c23..54f19f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -1,15 +1,17 @@
package com.casic.xz.meterage.base
import android.app.Application
-import android.content.Context
+import android.util.Log
import com.casic.xz.meterage.greendao.DaoMaster
import com.casic.xz.meterage.greendao.DaoSession
+import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
-import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
class BaseApplication : Application() {
+ private val kTag = "BaseApplication"
+
companion object {
private var application: BaseApplication by Delegates.notNull()
@@ -22,7 +24,11 @@
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
-
+ //推送
+ PushManager.getInstance().initialize(this)
+ PushManager.getInstance().setDebugLogger(this) {
+ Log.d(kTag, it)
+ }
val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
@@ -31,10 +37,4 @@
fun getDaoSession(): DaoSession {
return daoSession
}
-
- //绕过Android 11以上反射限制
- override fun attachBaseContext(base: Context?) {
- super.attachBaseContext(base)
- Reflection.unseal(base)
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
index c2deab4..883a51e 100644
--- a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
@@ -1,20 +1,40 @@
package com.casic.xz.meterage.extensions
import android.content.Context
+import android.os.Build
+import android.util.Log
import android.view.ViewGroup
-import com.casic.xz.meterage.base.BaseApplication
+import android.view.WindowInsets
+import android.view.WindowManager
import com.casic.xz.meterage.utils.LocaleConstant
import com.pengxh.kt.lite.extensions.convertColor
-import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlin.random.Random
-fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
- var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
- if (statusBarHeight == 0) {
- statusBarHeight = 40f.dp2px(BaseApplication.get())
+/**
+ * 获取状态栏高度,兼容Android 11+
+ * */
+fun Context.getStatusBarHeight(): Int {
+ val statusBarHeight = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ val windowManager = this.getSystemService(Context.WINDOW_SERVICE) as WindowManager
+ val windowMetrics = windowManager.currentWindowMetrics
+ val windowInsets = windowMetrics.windowInsets
+
+ val type = WindowInsets.Type.navigationBars() or WindowInsets.Type.displayCutout()
+ val insets = windowInsets.getInsetsIgnoringVisibility(type)
+ insets.top
+ } else {
+ QMUIDisplayHelper.getStatusBarHeight(this)
}
- rootView.setPadding(0, statusBarHeight, 0, 0)
+ Log.d("kTag", "getStatusBarHeight => $statusBarHeight")
+ return statusBarHeight
+}
+
+/**
+ * 设置沉浸式状态栏,兼容Android 11+
+ * */
+fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
+ rootView.setPadding(0, getStatusBarHeight(), 0, 0)
rootView.requestLayout()
}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
index 5e317d9..f48b04b 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
@@ -5,6 +5,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.SubViewPagerAdapter
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.fragment.detection.AwaitDetectionFragment
import com.casic.xz.meterage.fragment.detection.CompletedDetectionFragment
import com.casic.xz.meterage.fragment.detection.UnderDetectionFragment
@@ -12,7 +13,6 @@
import com.casic.xz.meterage.vm.DetectionViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_detection.*
import kotlinx.android.synthetic.main.include_detection_top_layout.*
@@ -79,7 +79,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 4a2b470..73966f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import com.casic.xz.meterage.base.BaseApplication
import com.casic.xz.meterage.extensions.diffCurrentTime
import com.casic.xz.meterage.extensions.formatToDate
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
@@ -34,7 +35,6 @@
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_home.*
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
@@ -249,7 +249,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index 77c77d4..fc950e1 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -10,6 +10,7 @@
import com.casic.xz.meterage.callback.OnImageCompressListener
import com.casic.xz.meterage.extensions.combineImagePath
import com.casic.xz.meterage.extensions.compressImage
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.extensions.reformat
import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.FileType
@@ -34,7 +35,6 @@
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_mine.*
import java.io.File
@@ -238,7 +238,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
index 828bd85..e683aed 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
@@ -5,6 +5,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.SubViewPagerAdapter
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.fragment.task.AwaitTaskFragment
import com.casic.xz.meterage.fragment.task.CompletedTaskFragment
import com.casic.xz.meterage.fragment.task.OvertimeTaskFragment
@@ -13,7 +14,6 @@
import com.casic.xz.meterage.vm.TaskViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_task.*
import kotlinx.android.synthetic.main.include_task_top_layout.*
@@ -82,7 +82,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/service/ApplicationPushService.kt b/app/src/main/java/com/casic/xz/meterage/service/ApplicationPushService.kt
new file mode 100644
index 0000000..13ff1a7
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/service/ApplicationPushService.kt
@@ -0,0 +1,5 @@
+package com.casic.xz.meterage.service
+
+import com.igexin.sdk.PushService
+
+class ApplicationPushService : PushService()
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 414e67a..9ef0da7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -24,6 +24,8 @@
versionCode 1
versionName "1.0.0.0"
+ manifestPlaceholders = [GETUI_APPID: "RoW3b4QCWH9EnYYiyaUJz5"]
+
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
}
@@ -117,8 +119,6 @@
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//PDF预览
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
- //绕过Android 11反射限制
- implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//数据库框架
@@ -127,4 +127,8 @@
implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
//WebView
implementation 'com.just.agentweb:agentweb-androidx:4.1.4'
+ //个推SDK
+ implementation 'com.getui:gtsdk:3.2.15.0'
+ //个推核心组件
+ implementation 'com.getui:gtc:3.2.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9efc1f6..4da294c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -112,11 +112,28 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
+
+
+
+
+
+
+
-
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 1684c23..54f19f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -1,15 +1,17 @@
package com.casic.xz.meterage.base
import android.app.Application
-import android.content.Context
+import android.util.Log
import com.casic.xz.meterage.greendao.DaoMaster
import com.casic.xz.meterage.greendao.DaoSession
+import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
-import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
class BaseApplication : Application() {
+ private val kTag = "BaseApplication"
+
companion object {
private var application: BaseApplication by Delegates.notNull()
@@ -22,7 +24,11 @@
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
-
+ //推送
+ PushManager.getInstance().initialize(this)
+ PushManager.getInstance().setDebugLogger(this) {
+ Log.d(kTag, it)
+ }
val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
@@ -31,10 +37,4 @@
fun getDaoSession(): DaoSession {
return daoSession
}
-
- //绕过Android 11以上反射限制
- override fun attachBaseContext(base: Context?) {
- super.attachBaseContext(base)
- Reflection.unseal(base)
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
index c2deab4..883a51e 100644
--- a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
@@ -1,20 +1,40 @@
package com.casic.xz.meterage.extensions
import android.content.Context
+import android.os.Build
+import android.util.Log
import android.view.ViewGroup
-import com.casic.xz.meterage.base.BaseApplication
+import android.view.WindowInsets
+import android.view.WindowManager
import com.casic.xz.meterage.utils.LocaleConstant
import com.pengxh.kt.lite.extensions.convertColor
-import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlin.random.Random
-fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
- var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
- if (statusBarHeight == 0) {
- statusBarHeight = 40f.dp2px(BaseApplication.get())
+/**
+ * 获取状态栏高度,兼容Android 11+
+ * */
+fun Context.getStatusBarHeight(): Int {
+ val statusBarHeight = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ val windowManager = this.getSystemService(Context.WINDOW_SERVICE) as WindowManager
+ val windowMetrics = windowManager.currentWindowMetrics
+ val windowInsets = windowMetrics.windowInsets
+
+ val type = WindowInsets.Type.navigationBars() or WindowInsets.Type.displayCutout()
+ val insets = windowInsets.getInsetsIgnoringVisibility(type)
+ insets.top
+ } else {
+ QMUIDisplayHelper.getStatusBarHeight(this)
}
- rootView.setPadding(0, statusBarHeight, 0, 0)
+ Log.d("kTag", "getStatusBarHeight => $statusBarHeight")
+ return statusBarHeight
+}
+
+/**
+ * 设置沉浸式状态栏,兼容Android 11+
+ * */
+fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
+ rootView.setPadding(0, getStatusBarHeight(), 0, 0)
rootView.requestLayout()
}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
index 5e317d9..f48b04b 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
@@ -5,6 +5,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.SubViewPagerAdapter
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.fragment.detection.AwaitDetectionFragment
import com.casic.xz.meterage.fragment.detection.CompletedDetectionFragment
import com.casic.xz.meterage.fragment.detection.UnderDetectionFragment
@@ -12,7 +13,6 @@
import com.casic.xz.meterage.vm.DetectionViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_detection.*
import kotlinx.android.synthetic.main.include_detection_top_layout.*
@@ -79,7 +79,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 4a2b470..73966f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import com.casic.xz.meterage.base.BaseApplication
import com.casic.xz.meterage.extensions.diffCurrentTime
import com.casic.xz.meterage.extensions.formatToDate
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
@@ -34,7 +35,6 @@
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_home.*
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
@@ -249,7 +249,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index 77c77d4..fc950e1 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -10,6 +10,7 @@
import com.casic.xz.meterage.callback.OnImageCompressListener
import com.casic.xz.meterage.extensions.combineImagePath
import com.casic.xz.meterage.extensions.compressImage
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.extensions.reformat
import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.FileType
@@ -34,7 +35,6 @@
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_mine.*
import java.io.File
@@ -238,7 +238,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
index 828bd85..e683aed 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
@@ -5,6 +5,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.SubViewPagerAdapter
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.fragment.task.AwaitTaskFragment
import com.casic.xz.meterage.fragment.task.CompletedTaskFragment
import com.casic.xz.meterage.fragment.task.OvertimeTaskFragment
@@ -13,7 +14,6 @@
import com.casic.xz.meterage.vm.TaskViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_task.*
import kotlinx.android.synthetic.main.include_task_top_layout.*
@@ -82,7 +82,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/service/ApplicationPushService.kt b/app/src/main/java/com/casic/xz/meterage/service/ApplicationPushService.kt
new file mode 100644
index 0000000..13ff1a7
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/service/ApplicationPushService.kt
@@ -0,0 +1,5 @@
+package com.casic.xz.meterage.service
+
+import com.igexin.sdk.PushService
+
+class ApplicationPushService : PushService()
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/service/MeterageIntentService.kt b/app/src/main/java/com/casic/xz/meterage/service/MeterageIntentService.kt
new file mode 100644
index 0000000..bb8aa23
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/service/MeterageIntentService.kt
@@ -0,0 +1,59 @@
+package com.casic.xz.meterage.service
+
+import android.content.Context
+import android.util.Log
+import com.google.gson.Gson
+import com.igexin.sdk.GTIntentService
+import com.igexin.sdk.message.GTCmdMessage
+import com.igexin.sdk.message.GTNotificationMessage
+import com.igexin.sdk.message.GTTransmitMessage
+import com.pengxh.kt.lite.extensions.toJson
+
+class MeterageIntentService : GTIntentService() {
+
+ private val kTag = "MeterageIntentService"
+ private val gson by lazy { Gson() }
+
+ override fun onReceiveServicePid(context: Context?, pid: Int) {
+
+ }
+
+ // 透传消息
+ override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) {
+ Log.d(kTag, "透传消息 -> msg = $msg")
+ }
+
+ // 接收 cid
+ override fun onReceiveClientId(context: Context?, clientid: String?) {
+ Log.d(kTag, "onReceiveClientId -> $clientid")
+ if (clientid.isNullOrBlank()) {
+
+ } else {
+ //注册个推服务
+
+ }
+ }
+
+ // cid 离线上线通知
+ override fun onReceiveOnlineState(context: Context?, online: Boolean) {
+
+ }
+
+ // 各种事件处理回执
+ override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) {
+
+ }
+
+ // 通知到达
+ override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) {
+ if (msg == null) {
+ return
+ }
+ Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}")
+ }
+
+ // 通知点击
+ override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) {
+ Log.d(kTag, "通知点击 -> msg = $msg")
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 414e67a..9ef0da7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -24,6 +24,8 @@
versionCode 1
versionName "1.0.0.0"
+ manifestPlaceholders = [GETUI_APPID: "RoW3b4QCWH9EnYYiyaUJz5"]
+
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
}
@@ -117,8 +119,6 @@
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
//PDF预览
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
- //绕过Android 11反射限制
- implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//数据库框架
@@ -127,4 +127,8 @@
implementation group: 'com.hyman', name: 'flowlayout-lib', version: '1.1.2'
//WebView
implementation 'com.just.agentweb:agentweb-androidx:4.1.4'
+ //个推SDK
+ implementation 'com.getui:gtsdk:3.2.15.0'
+ //个推核心组件
+ implementation 'com.getui:gtc:3.2.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9efc1f6..4da294c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -112,11 +112,28 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
+
+
+
+
+
+
+
-
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 1684c23..54f19f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -1,15 +1,17 @@
package com.casic.xz.meterage.base
import android.app.Application
-import android.content.Context
+import android.util.Log
import com.casic.xz.meterage.greendao.DaoMaster
import com.casic.xz.meterage.greendao.DaoSession
+import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
-import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
class BaseApplication : Application() {
+ private val kTag = "BaseApplication"
+
companion object {
private var application: BaseApplication by Delegates.notNull()
@@ -22,7 +24,11 @@
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
-
+ //推送
+ PushManager.getInstance().initialize(this)
+ PushManager.getInstance().setDebugLogger(this) {
+ Log.d(kTag, it)
+ }
val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
@@ -31,10 +37,4 @@
fun getDaoSession(): DaoSession {
return daoSession
}
-
- //绕过Android 11以上反射限制
- override fun attachBaseContext(base: Context?) {
- super.attachBaseContext(base)
- Reflection.unseal(base)
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
index c2deab4..883a51e 100644
--- a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
@@ -1,20 +1,40 @@
package com.casic.xz.meterage.extensions
import android.content.Context
+import android.os.Build
+import android.util.Log
import android.view.ViewGroup
-import com.casic.xz.meterage.base.BaseApplication
+import android.view.WindowInsets
+import android.view.WindowManager
import com.casic.xz.meterage.utils.LocaleConstant
import com.pengxh.kt.lite.extensions.convertColor
-import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlin.random.Random
-fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
- var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
- if (statusBarHeight == 0) {
- statusBarHeight = 40f.dp2px(BaseApplication.get())
+/**
+ * 获取状态栏高度,兼容Android 11+
+ * */
+fun Context.getStatusBarHeight(): Int {
+ val statusBarHeight = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ val windowManager = this.getSystemService(Context.WINDOW_SERVICE) as WindowManager
+ val windowMetrics = windowManager.currentWindowMetrics
+ val windowInsets = windowMetrics.windowInsets
+
+ val type = WindowInsets.Type.navigationBars() or WindowInsets.Type.displayCutout()
+ val insets = windowInsets.getInsetsIgnoringVisibility(type)
+ insets.top
+ } else {
+ QMUIDisplayHelper.getStatusBarHeight(this)
}
- rootView.setPadding(0, statusBarHeight, 0, 0)
+ Log.d("kTag", "getStatusBarHeight => $statusBarHeight")
+ return statusBarHeight
+}
+
+/**
+ * 设置沉浸式状态栏,兼容Android 11+
+ * */
+fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
+ rootView.setPadding(0, getStatusBarHeight(), 0, 0)
rootView.requestLayout()
}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
index 5e317d9..f48b04b 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
@@ -5,6 +5,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.SubViewPagerAdapter
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.fragment.detection.AwaitDetectionFragment
import com.casic.xz.meterage.fragment.detection.CompletedDetectionFragment
import com.casic.xz.meterage.fragment.detection.UnderDetectionFragment
@@ -12,7 +13,6 @@
import com.casic.xz.meterage.vm.DetectionViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_detection.*
import kotlinx.android.synthetic.main.include_detection_top_layout.*
@@ -79,7 +79,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 4a2b470..73966f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import com.casic.xz.meterage.base.BaseApplication
import com.casic.xz.meterage.extensions.diffCurrentTime
import com.casic.xz.meterage.extensions.formatToDate
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
@@ -34,7 +35,6 @@
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_home.*
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
@@ -249,7 +249,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index 77c77d4..fc950e1 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -10,6 +10,7 @@
import com.casic.xz.meterage.callback.OnImageCompressListener
import com.casic.xz.meterage.extensions.combineImagePath
import com.casic.xz.meterage.extensions.compressImage
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.extensions.reformat
import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.FileType
@@ -34,7 +35,6 @@
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_mine.*
import java.io.File
@@ -238,7 +238,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
index 828bd85..e683aed 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
@@ -5,6 +5,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.SubViewPagerAdapter
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.fragment.task.AwaitTaskFragment
import com.casic.xz.meterage.fragment.task.CompletedTaskFragment
import com.casic.xz.meterage.fragment.task.OvertimeTaskFragment
@@ -13,7 +14,6 @@
import com.casic.xz.meterage.vm.TaskViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_task.*
import kotlinx.android.synthetic.main.include_task_top_layout.*
@@ -82,7 +82,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/service/ApplicationPushService.kt b/app/src/main/java/com/casic/xz/meterage/service/ApplicationPushService.kt
new file mode 100644
index 0000000..13ff1a7
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/service/ApplicationPushService.kt
@@ -0,0 +1,5 @@
+package com.casic.xz.meterage.service
+
+import com.igexin.sdk.PushService
+
+class ApplicationPushService : PushService()
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/service/MeterageIntentService.kt b/app/src/main/java/com/casic/xz/meterage/service/MeterageIntentService.kt
new file mode 100644
index 0000000..bb8aa23
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/service/MeterageIntentService.kt
@@ -0,0 +1,59 @@
+package com.casic.xz.meterage.service
+
+import android.content.Context
+import android.util.Log
+import com.google.gson.Gson
+import com.igexin.sdk.GTIntentService
+import com.igexin.sdk.message.GTCmdMessage
+import com.igexin.sdk.message.GTNotificationMessage
+import com.igexin.sdk.message.GTTransmitMessage
+import com.pengxh.kt.lite.extensions.toJson
+
+class MeterageIntentService : GTIntentService() {
+
+ private val kTag = "MeterageIntentService"
+ private val gson by lazy { Gson() }
+
+ override fun onReceiveServicePid(context: Context?, pid: Int) {
+
+ }
+
+ // 透传消息
+ override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) {
+ Log.d(kTag, "透传消息 -> msg = $msg")
+ }
+
+ // 接收 cid
+ override fun onReceiveClientId(context: Context?, clientid: String?) {
+ Log.d(kTag, "onReceiveClientId -> $clientid")
+ if (clientid.isNullOrBlank()) {
+
+ } else {
+ //注册个推服务
+
+ }
+ }
+
+ // cid 离线上线通知
+ override fun onReceiveOnlineState(context: Context?, online: Boolean) {
+
+ }
+
+ // 各种事件处理回执
+ override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) {
+
+ }
+
+ // 通知到达
+ override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) {
+ if (msg == null) {
+ return
+ }
+ Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}")
+ }
+
+ // 通知点击
+ override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) {
+ Log.d(kTag, "通知点击 -> msg = $msg")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_detection.xml b/app/src/main/res/layout/fragment_detection.xml
index 37eb90b..b2f4d71 100644
--- a/app/src/main/res/layout/fragment_detection.xml
+++ b/app/src/main/res/layout/fragment_detection.xml
@@ -12,14 +12,6 @@
android:layout_height="0dp"
android:background="@color/white" />
-
-
+
+
+
+
+
+
+
-
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 1684c23..54f19f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -1,15 +1,17 @@
package com.casic.xz.meterage.base
import android.app.Application
-import android.content.Context
+import android.util.Log
import com.casic.xz.meterage.greendao.DaoMaster
import com.casic.xz.meterage.greendao.DaoSession
+import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
-import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
class BaseApplication : Application() {
+ private val kTag = "BaseApplication"
+
companion object {
private var application: BaseApplication by Delegates.notNull()
@@ -22,7 +24,11 @@
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
-
+ //推送
+ PushManager.getInstance().initialize(this)
+ PushManager.getInstance().setDebugLogger(this) {
+ Log.d(kTag, it)
+ }
val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
@@ -31,10 +37,4 @@
fun getDaoSession(): DaoSession {
return daoSession
}
-
- //绕过Android 11以上反射限制
- override fun attachBaseContext(base: Context?) {
- super.attachBaseContext(base)
- Reflection.unseal(base)
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
index c2deab4..883a51e 100644
--- a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
@@ -1,20 +1,40 @@
package com.casic.xz.meterage.extensions
import android.content.Context
+import android.os.Build
+import android.util.Log
import android.view.ViewGroup
-import com.casic.xz.meterage.base.BaseApplication
+import android.view.WindowInsets
+import android.view.WindowManager
import com.casic.xz.meterage.utils.LocaleConstant
import com.pengxh.kt.lite.extensions.convertColor
-import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlin.random.Random
-fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
- var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
- if (statusBarHeight == 0) {
- statusBarHeight = 40f.dp2px(BaseApplication.get())
+/**
+ * 获取状态栏高度,兼容Android 11+
+ * */
+fun Context.getStatusBarHeight(): Int {
+ val statusBarHeight = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ val windowManager = this.getSystemService(Context.WINDOW_SERVICE) as WindowManager
+ val windowMetrics = windowManager.currentWindowMetrics
+ val windowInsets = windowMetrics.windowInsets
+
+ val type = WindowInsets.Type.navigationBars() or WindowInsets.Type.displayCutout()
+ val insets = windowInsets.getInsetsIgnoringVisibility(type)
+ insets.top
+ } else {
+ QMUIDisplayHelper.getStatusBarHeight(this)
}
- rootView.setPadding(0, statusBarHeight, 0, 0)
+ Log.d("kTag", "getStatusBarHeight => $statusBarHeight")
+ return statusBarHeight
+}
+
+/**
+ * 设置沉浸式状态栏,兼容Android 11+
+ * */
+fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
+ rootView.setPadding(0, getStatusBarHeight(), 0, 0)
rootView.requestLayout()
}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
index 5e317d9..f48b04b 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
@@ -5,6 +5,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.SubViewPagerAdapter
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.fragment.detection.AwaitDetectionFragment
import com.casic.xz.meterage.fragment.detection.CompletedDetectionFragment
import com.casic.xz.meterage.fragment.detection.UnderDetectionFragment
@@ -12,7 +13,6 @@
import com.casic.xz.meterage.vm.DetectionViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_detection.*
import kotlinx.android.synthetic.main.include_detection_top_layout.*
@@ -79,7 +79,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 4a2b470..73966f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import com.casic.xz.meterage.base.BaseApplication
import com.casic.xz.meterage.extensions.diffCurrentTime
import com.casic.xz.meterage.extensions.formatToDate
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
@@ -34,7 +35,6 @@
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_home.*
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
@@ -249,7 +249,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index 77c77d4..fc950e1 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -10,6 +10,7 @@
import com.casic.xz.meterage.callback.OnImageCompressListener
import com.casic.xz.meterage.extensions.combineImagePath
import com.casic.xz.meterage.extensions.compressImage
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.extensions.reformat
import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.FileType
@@ -34,7 +35,6 @@
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_mine.*
import java.io.File
@@ -238,7 +238,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
index 828bd85..e683aed 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
@@ -5,6 +5,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.SubViewPagerAdapter
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.fragment.task.AwaitTaskFragment
import com.casic.xz.meterage.fragment.task.CompletedTaskFragment
import com.casic.xz.meterage.fragment.task.OvertimeTaskFragment
@@ -13,7 +14,6 @@
import com.casic.xz.meterage.vm.TaskViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_task.*
import kotlinx.android.synthetic.main.include_task_top_layout.*
@@ -82,7 +82,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/service/ApplicationPushService.kt b/app/src/main/java/com/casic/xz/meterage/service/ApplicationPushService.kt
new file mode 100644
index 0000000..13ff1a7
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/service/ApplicationPushService.kt
@@ -0,0 +1,5 @@
+package com.casic.xz.meterage.service
+
+import com.igexin.sdk.PushService
+
+class ApplicationPushService : PushService()
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/service/MeterageIntentService.kt b/app/src/main/java/com/casic/xz/meterage/service/MeterageIntentService.kt
new file mode 100644
index 0000000..bb8aa23
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/service/MeterageIntentService.kt
@@ -0,0 +1,59 @@
+package com.casic.xz.meterage.service
+
+import android.content.Context
+import android.util.Log
+import com.google.gson.Gson
+import com.igexin.sdk.GTIntentService
+import com.igexin.sdk.message.GTCmdMessage
+import com.igexin.sdk.message.GTNotificationMessage
+import com.igexin.sdk.message.GTTransmitMessage
+import com.pengxh.kt.lite.extensions.toJson
+
+class MeterageIntentService : GTIntentService() {
+
+ private val kTag = "MeterageIntentService"
+ private val gson by lazy { Gson() }
+
+ override fun onReceiveServicePid(context: Context?, pid: Int) {
+
+ }
+
+ // 透传消息
+ override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) {
+ Log.d(kTag, "透传消息 -> msg = $msg")
+ }
+
+ // 接收 cid
+ override fun onReceiveClientId(context: Context?, clientid: String?) {
+ Log.d(kTag, "onReceiveClientId -> $clientid")
+ if (clientid.isNullOrBlank()) {
+
+ } else {
+ //注册个推服务
+
+ }
+ }
+
+ // cid 离线上线通知
+ override fun onReceiveOnlineState(context: Context?, online: Boolean) {
+
+ }
+
+ // 各种事件处理回执
+ override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) {
+
+ }
+
+ // 通知到达
+ override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) {
+ if (msg == null) {
+ return
+ }
+ Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}")
+ }
+
+ // 通知点击
+ override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) {
+ Log.d(kTag, "通知点击 -> msg = $msg")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_detection.xml b/app/src/main/res/layout/fragment_detection.xml
index 37eb90b..b2f4d71 100644
--- a/app/src/main/res/layout/fragment_detection.xml
+++ b/app/src/main/res/layout/fragment_detection.xml
@@ -12,14 +12,6 @@
android:layout_height="0dp"
android:background="@color/white" />
-
-
-
-
+
+
+
+
+
+
+
-
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 1684c23..54f19f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -1,15 +1,17 @@
package com.casic.xz.meterage.base
import android.app.Application
-import android.content.Context
+import android.util.Log
import com.casic.xz.meterage.greendao.DaoMaster
import com.casic.xz.meterage.greendao.DaoSession
+import com.igexin.sdk.PushManager
import com.pengxh.kt.lite.utils.SaveKeyValues
-import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
class BaseApplication : Application() {
+ private val kTag = "BaseApplication"
+
companion object {
private var application: BaseApplication by Delegates.notNull()
@@ -22,7 +24,11 @@
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
-
+ //推送
+ PushManager.getInstance().initialize(this)
+ PushManager.getInstance().setDebugLogger(this) {
+ Log.d(kTag, it)
+ }
val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
daoSession = daoMaster.newSession()
@@ -31,10 +37,4 @@
fun getDaoSession(): DaoSession {
return daoSession
}
-
- //绕过Android 11以上反射限制
- override fun attachBaseContext(base: Context?) {
- super.attachBaseContext(base)
- Reflection.unseal(base)
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
index c2deab4..883a51e 100644
--- a/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/Context.kt
@@ -1,20 +1,40 @@
package com.casic.xz.meterage.extensions
import android.content.Context
+import android.os.Build
+import android.util.Log
import android.view.ViewGroup
-import com.casic.xz.meterage.base.BaseApplication
+import android.view.WindowInsets
+import android.view.WindowManager
import com.casic.xz.meterage.utils.LocaleConstant
import com.pengxh.kt.lite.extensions.convertColor
-import com.pengxh.kt.lite.extensions.dp2px
import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlin.random.Random
-fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
- var statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this)
- if (statusBarHeight == 0) {
- statusBarHeight = 40f.dp2px(BaseApplication.get())
+/**
+ * 获取状态栏高度,兼容Android 11+
+ * */
+fun Context.getStatusBarHeight(): Int {
+ val statusBarHeight = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ val windowManager = this.getSystemService(Context.WINDOW_SERVICE) as WindowManager
+ val windowMetrics = windowManager.currentWindowMetrics
+ val windowInsets = windowMetrics.windowInsets
+
+ val type = WindowInsets.Type.navigationBars() or WindowInsets.Type.displayCutout()
+ val insets = windowInsets.getInsetsIgnoringVisibility(type)
+ insets.top
+ } else {
+ QMUIDisplayHelper.getStatusBarHeight(this)
}
- rootView.setPadding(0, statusBarHeight, 0, 0)
+ Log.d("kTag", "getStatusBarHeight => $statusBarHeight")
+ return statusBarHeight
+}
+
+/**
+ * 设置沉浸式状态栏,兼容Android 11+
+ * */
+fun Context.initLayoutImmersionBar(rootView: ViewGroup) {
+ rootView.setPadding(0, getStatusBarHeight(), 0, 0)
rootView.requestLayout()
}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
index 5e317d9..f48b04b 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/DetectionPageFragment.kt
@@ -5,6 +5,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.SubViewPagerAdapter
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.fragment.detection.AwaitDetectionFragment
import com.casic.xz.meterage.fragment.detection.CompletedDetectionFragment
import com.casic.xz.meterage.fragment.detection.UnderDetectionFragment
@@ -12,7 +13,6 @@
import com.casic.xz.meterage.vm.DetectionViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_detection.*
import kotlinx.android.synthetic.main.include_detection_top_layout.*
@@ -79,7 +79,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 4a2b470..73966f0 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import com.casic.xz.meterage.base.BaseApplication
import com.casic.xz.meterage.extensions.diffCurrentTime
import com.casic.xz.meterage.extensions.formatToDate
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
@@ -34,7 +35,6 @@
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_home.*
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
@@ -249,7 +249,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index 77c77d4..fc950e1 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -10,6 +10,7 @@
import com.casic.xz.meterage.callback.OnImageCompressListener
import com.casic.xz.meterage.extensions.combineImagePath
import com.casic.xz.meterage.extensions.compressImage
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.extensions.reformat
import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.FileType
@@ -34,7 +35,6 @@
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_mine.*
import java.io.File
@@ -238,7 +238,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
index 828bd85..e683aed 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/TaskPageFragment.kt
@@ -5,6 +5,7 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.SubViewPagerAdapter
+import com.casic.xz.meterage.extensions.getStatusBarHeight
import com.casic.xz.meterage.fragment.task.AwaitTaskFragment
import com.casic.xz.meterage.fragment.task.CompletedTaskFragment
import com.casic.xz.meterage.fragment.task.OvertimeTaskFragment
@@ -13,7 +14,6 @@
import com.casic.xz.meterage.vm.TaskViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_task.*
import kotlinx.android.synthetic.main.include_task_top_layout.*
@@ -82,7 +82,7 @@
override fun setupTopBarLayout() {
//根据不同设备状态栏高度设置statusBarView高度
- val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val statusBarHeight = requireContext().getStatusBarHeight()
val params = statusBarView.layoutParams as LinearLayout.LayoutParams
params.height = statusBarHeight
statusBarView.requestLayout()
diff --git a/app/src/main/java/com/casic/xz/meterage/service/ApplicationPushService.kt b/app/src/main/java/com/casic/xz/meterage/service/ApplicationPushService.kt
new file mode 100644
index 0000000..13ff1a7
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/service/ApplicationPushService.kt
@@ -0,0 +1,5 @@
+package com.casic.xz.meterage.service
+
+import com.igexin.sdk.PushService
+
+class ApplicationPushService : PushService()
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/service/MeterageIntentService.kt b/app/src/main/java/com/casic/xz/meterage/service/MeterageIntentService.kt
new file mode 100644
index 0000000..bb8aa23
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/service/MeterageIntentService.kt
@@ -0,0 +1,59 @@
+package com.casic.xz.meterage.service
+
+import android.content.Context
+import android.util.Log
+import com.google.gson.Gson
+import com.igexin.sdk.GTIntentService
+import com.igexin.sdk.message.GTCmdMessage
+import com.igexin.sdk.message.GTNotificationMessage
+import com.igexin.sdk.message.GTTransmitMessage
+import com.pengxh.kt.lite.extensions.toJson
+
+class MeterageIntentService : GTIntentService() {
+
+ private val kTag = "MeterageIntentService"
+ private val gson by lazy { Gson() }
+
+ override fun onReceiveServicePid(context: Context?, pid: Int) {
+
+ }
+
+ // 透传消息
+ override fun onReceiveMessageData(context: Context?, msg: GTTransmitMessage?) {
+ Log.d(kTag, "透传消息 -> msg = $msg")
+ }
+
+ // 接收 cid
+ override fun onReceiveClientId(context: Context?, clientid: String?) {
+ Log.d(kTag, "onReceiveClientId -> $clientid")
+ if (clientid.isNullOrBlank()) {
+
+ } else {
+ //注册个推服务
+
+ }
+ }
+
+ // cid 离线上线通知
+ override fun onReceiveOnlineState(context: Context?, online: Boolean) {
+
+ }
+
+ // 各种事件处理回执
+ override fun onReceiveCommandResult(context: Context?, msg: GTCmdMessage?) {
+
+ }
+
+ // 通知到达
+ override fun onNotificationMessageArrived(context: Context?, msg: GTNotificationMessage?) {
+ if (msg == null) {
+ return
+ }
+ Log.d(kTag, "通知到达 -> msg = ${msg.toJson()}")
+ }
+
+ // 通知点击
+ override fun onNotificationMessageClicked(context: Context?, msg: GTNotificationMessage?) {
+ Log.d(kTag, "通知点击 -> msg = $msg")
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_detection.xml b/app/src/main/res/layout/fragment_detection.xml
index 37eb90b..b2f4d71 100644
--- a/app/src/main/res/layout/fragment_detection.xml
+++ b/app/src/main/res/layout/fragment_detection.xml
@@ -12,14 +12,6 @@
android:layout_height="0dp"
android:background="@color/white" />
-
-
-
-