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" /> - - - -