diff --git a/app/build.gradle b/app/build.gradle index c649d4a..68f1bf0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 2 - versionName "v2.1.0.0" + versionCode 11 + versionName "v1.0.0.3" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/build.gradle b/app/build.gradle index c649d4a..68f1bf0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 2 - versionName "v2.1.0.0" + versionCode 11 + versionName "v1.0.0.3" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a5cca2e..5792e20 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + @@ -44,7 +45,7 @@ tools:targetApi="m"> + android:excludeFromRecents="false"> @@ -86,7 +87,7 @@ - + + + + + + @@ -110,5 +122,7 @@ + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index c649d4a..68f1bf0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 2 - versionName "v2.1.0.0" + versionCode 11 + versionName "v1.0.0.3" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a5cca2e..5792e20 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + @@ -44,7 +45,7 @@ tools:targetApi="m"> + android:excludeFromRecents="false"> @@ -86,7 +87,7 @@ - + + + + + + @@ -110,5 +122,7 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 0a18374..8bb4989 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -23,7 +23,7 @@ QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); ToastHelper.initToastHelper(this); - FileUtils.initFileConfig(); + FileUtils.initFileConfig(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/build.gradle b/app/build.gradle index c649d4a..68f1bf0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 2 - versionName "v2.1.0.0" + versionCode 11 + versionName "v1.0.0.3" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a5cca2e..5792e20 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + @@ -44,7 +45,7 @@ tools:targetApi="m"> + android:excludeFromRecents="false"> @@ -86,7 +87,7 @@ - + + + + + + @@ -110,5 +122,7 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 0a18374..8bb4989 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -23,7 +23,7 @@ QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); ToastHelper.initToastHelper(this); - FileUtils.initFileConfig(); + FileUtils.initFileConfig(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java new file mode 100644 index 0000000..52c10a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -0,0 +1,60 @@ +package com.casic.dcms.service; + +import android.app.Notification; +import android.app.Service; +import android.content.Intent; +import android.location.Location; +import android.os.IBinder; +import android.os.Message; +import android.util.Log; + +import androidx.annotation.Nullable; + +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; +import com.casic.dcms.utils.callback.ILocationListener; + +public class UploadLocationService extends Service { + + private static final String TAG = "UploadLocationService"; + + public UploadLocationService() { + + } + + @Override + public void onCreate() { + super.onCreate(); + Log.d(TAG, "onCreate: UploadLocationService"); + NotificationHelper notificationHelper = NotificationHelper.getInstance(this); + Notification notification = notificationHelper.createKeepAlive(); + startForeground(Integer.MAX_VALUE, notification); + + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + Message message = Message.obtain(); + message.what = Constant.UPLOAD_LOCATION; + message.obj = location; + MainActivity.sendMessage(message); + } + } + }); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + // 如果Service被终止,当资源允许情况下,重启service + return START_STICKY; + } + + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } +} diff --git a/app/build.gradle b/app/build.gradle index c649d4a..68f1bf0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 2 - versionName "v2.1.0.0" + versionCode 11 + versionName "v1.0.0.3" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a5cca2e..5792e20 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + @@ -44,7 +45,7 @@ tools:targetApi="m"> + android:excludeFromRecents="false"> @@ -86,7 +87,7 @@ - + + + + + + @@ -110,5 +122,7 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 0a18374..8bb4989 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -23,7 +23,7 @@ QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); ToastHelper.initToastHelper(this); - FileUtils.initFileConfig(); + FileUtils.initFileConfig(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java new file mode 100644 index 0000000..52c10a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -0,0 +1,60 @@ +package com.casic.dcms.service; + +import android.app.Notification; +import android.app.Service; +import android.content.Intent; +import android.location.Location; +import android.os.IBinder; +import android.os.Message; +import android.util.Log; + +import androidx.annotation.Nullable; + +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; +import com.casic.dcms.utils.callback.ILocationListener; + +public class UploadLocationService extends Service { + + private static final String TAG = "UploadLocationService"; + + public UploadLocationService() { + + } + + @Override + public void onCreate() { + super.onCreate(); + Log.d(TAG, "onCreate: UploadLocationService"); + NotificationHelper notificationHelper = NotificationHelper.getInstance(this); + Notification notification = notificationHelper.createKeepAlive(); + startForeground(Integer.MAX_VALUE, notification); + + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + Message message = Message.obtain(); + message.what = Constant.UPLOAD_LOCATION; + message.obj = location; + MainActivity.sendMessage(message); + } + } + }); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + // 如果Service被终止,当资源允许情况下,重启service + return START_STICKY; + } + + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 225d5d1..8722cf6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -4,9 +4,9 @@ import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Build; import android.os.Handler; import android.os.Message; -import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; import android.widget.TextView; @@ -25,17 +25,16 @@ import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; import com.casic.dcms.mvp.view.IUploadPositionView; +import com.casic.dcms.service.UploadLocationService; import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; -import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.gyf.immersionbar.ImmersionBar; @@ -61,6 +60,7 @@ private List pageList; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private String imei = ""; private static WeakReferenceHandler weakReferenceHandler; @Override @@ -79,6 +79,7 @@ public void initData() { //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); + weakReferenceHandler = new WeakReferenceHandler(this); uploadPositionPresenter = new UploadPositionPresenterImpl(this); registerPresenter = new PushRegisterPresenterImpl(this); pageList = new ArrayList<>(); @@ -86,23 +87,13 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - weakReferenceHandler = new WeakReferenceHandler(this); - String imei = OtherUtils.obtainSimCardSerialNumber(this); - if (TextUtils.isEmpty(imei)) { - return; + imei = OtherUtils.obtainSimCardSerialNumber(this); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + startForegroundService(new Intent(this, UploadLocationService.class)); + } else { + startService(new Intent(this, UploadLocationService.class)); } - //根据条件上传位置信息 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - Log.d(TAG, "onLocationGet: 位置上报"); - uploadPositionPresenter.onReadyRetrofitRequest(imei, - String.valueOf(location.getLatitude()), - String.valueOf(location.getLongitude())); - } - } - }); } @Override @@ -162,6 +153,7 @@ /** * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + * 供{@link com.casic.dcms.service.UploadLocationService#onCreate()}页面调用 */ public static void sendMessage(Message msg) { weakReferenceHandler.sendMessage(msg); @@ -204,6 +196,12 @@ CaseDetailActivity.class); notificationHelper.push(1, notification); break; + case Constant.UPLOAD_LOCATION: + Log.d(TAG, "位置上报"); + Location location = (Location) msg.obj; + mainActivity.uploadPositionPresenter.onReadyRetrofitRequest(mainActivity.imei, + String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude())); + break; case Constant.LOGIN_OUT: Log.d(TAG, "退出登录"); //回到登录页 @@ -216,7 +214,6 @@ } - @Override public void obtainUploadPositionResult(ActionResultBean resultBean) { // Log.d(TAG, "obtainUploadPositionResult: " + new Gson().toJson(resultBean)); diff --git a/app/build.gradle b/app/build.gradle index c649d4a..68f1bf0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 2 - versionName "v2.1.0.0" + versionCode 11 + versionName "v1.0.0.3" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a5cca2e..5792e20 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + @@ -44,7 +45,7 @@ tools:targetApi="m"> + android:excludeFromRecents="false"> @@ -86,7 +87,7 @@ - + + + + + + @@ -110,5 +122,7 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 0a18374..8bb4989 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -23,7 +23,7 @@ QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); ToastHelper.initToastHelper(this); - FileUtils.initFileConfig(); + FileUtils.initFileConfig(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java new file mode 100644 index 0000000..52c10a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -0,0 +1,60 @@ +package com.casic.dcms.service; + +import android.app.Notification; +import android.app.Service; +import android.content.Intent; +import android.location.Location; +import android.os.IBinder; +import android.os.Message; +import android.util.Log; + +import androidx.annotation.Nullable; + +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; +import com.casic.dcms.utils.callback.ILocationListener; + +public class UploadLocationService extends Service { + + private static final String TAG = "UploadLocationService"; + + public UploadLocationService() { + + } + + @Override + public void onCreate() { + super.onCreate(); + Log.d(TAG, "onCreate: UploadLocationService"); + NotificationHelper notificationHelper = NotificationHelper.getInstance(this); + Notification notification = notificationHelper.createKeepAlive(); + startForeground(Integer.MAX_VALUE, notification); + + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + Message message = Message.obtain(); + message.what = Constant.UPLOAD_LOCATION; + message.obj = location; + MainActivity.sendMessage(message); + } + } + }); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + // 如果Service被终止,当资源允许情况下,重启service + return START_STICKY; + } + + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 225d5d1..8722cf6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -4,9 +4,9 @@ import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Build; import android.os.Handler; import android.os.Message; -import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; import android.widget.TextView; @@ -25,17 +25,16 @@ import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; import com.casic.dcms.mvp.view.IUploadPositionView; +import com.casic.dcms.service.UploadLocationService; import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; -import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.gyf.immersionbar.ImmersionBar; @@ -61,6 +60,7 @@ private List pageList; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private String imei = ""; private static WeakReferenceHandler weakReferenceHandler; @Override @@ -79,6 +79,7 @@ public void initData() { //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); + weakReferenceHandler = new WeakReferenceHandler(this); uploadPositionPresenter = new UploadPositionPresenterImpl(this); registerPresenter = new PushRegisterPresenterImpl(this); pageList = new ArrayList<>(); @@ -86,23 +87,13 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - weakReferenceHandler = new WeakReferenceHandler(this); - String imei = OtherUtils.obtainSimCardSerialNumber(this); - if (TextUtils.isEmpty(imei)) { - return; + imei = OtherUtils.obtainSimCardSerialNumber(this); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + startForegroundService(new Intent(this, UploadLocationService.class)); + } else { + startService(new Intent(this, UploadLocationService.class)); } - //根据条件上传位置信息 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - Log.d(TAG, "onLocationGet: 位置上报"); - uploadPositionPresenter.onReadyRetrofitRequest(imei, - String.valueOf(location.getLatitude()), - String.valueOf(location.getLongitude())); - } - } - }); } @Override @@ -162,6 +153,7 @@ /** * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + * 供{@link com.casic.dcms.service.UploadLocationService#onCreate()}页面调用 */ public static void sendMessage(Message msg) { weakReferenceHandler.sendMessage(msg); @@ -204,6 +196,12 @@ CaseDetailActivity.class); notificationHelper.push(1, notification); break; + case Constant.UPLOAD_LOCATION: + Log.d(TAG, "位置上报"); + Location location = (Location) msg.obj; + mainActivity.uploadPositionPresenter.onReadyRetrofitRequest(mainActivity.imei, + String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude())); + break; case Constant.LOGIN_OUT: Log.d(TAG, "退出登录"); //回到登录页 @@ -216,7 +214,6 @@ } - @Override public void obtainUploadPositionResult(ActionResultBean resultBean) { // Log.d(TAG, "obtainUploadPositionResult: " + new Gson().toJson(resultBean)); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index 4177798..f01637b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -83,8 +83,6 @@ progressDialog = new ProgressDialog(context); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(context.getResources().getDrawable(R.drawable.bg_progress)); - progressDialog.setCanceledOnTouchOutside(false); - progressDialog.setCancelable(false); } @Override diff --git a/app/build.gradle b/app/build.gradle index c649d4a..68f1bf0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 2 - versionName "v2.1.0.0" + versionCode 11 + versionName "v1.0.0.3" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a5cca2e..5792e20 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + @@ -44,7 +45,7 @@ tools:targetApi="m"> + android:excludeFromRecents="false"> @@ -86,7 +87,7 @@ - + + + + + + @@ -110,5 +122,7 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 0a18374..8bb4989 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -23,7 +23,7 @@ QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); ToastHelper.initToastHelper(this); - FileUtils.initFileConfig(); + FileUtils.initFileConfig(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java new file mode 100644 index 0000000..52c10a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -0,0 +1,60 @@ +package com.casic.dcms.service; + +import android.app.Notification; +import android.app.Service; +import android.content.Intent; +import android.location.Location; +import android.os.IBinder; +import android.os.Message; +import android.util.Log; + +import androidx.annotation.Nullable; + +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; +import com.casic.dcms.utils.callback.ILocationListener; + +public class UploadLocationService extends Service { + + private static final String TAG = "UploadLocationService"; + + public UploadLocationService() { + + } + + @Override + public void onCreate() { + super.onCreate(); + Log.d(TAG, "onCreate: UploadLocationService"); + NotificationHelper notificationHelper = NotificationHelper.getInstance(this); + Notification notification = notificationHelper.createKeepAlive(); + startForeground(Integer.MAX_VALUE, notification); + + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + Message message = Message.obtain(); + message.what = Constant.UPLOAD_LOCATION; + message.obj = location; + MainActivity.sendMessage(message); + } + } + }); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + // 如果Service被终止,当资源允许情况下,重启service + return START_STICKY; + } + + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 225d5d1..8722cf6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -4,9 +4,9 @@ import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Build; import android.os.Handler; import android.os.Message; -import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; import android.widget.TextView; @@ -25,17 +25,16 @@ import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; import com.casic.dcms.mvp.view.IUploadPositionView; +import com.casic.dcms.service.UploadLocationService; import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; -import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.gyf.immersionbar.ImmersionBar; @@ -61,6 +60,7 @@ private List pageList; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private String imei = ""; private static WeakReferenceHandler weakReferenceHandler; @Override @@ -79,6 +79,7 @@ public void initData() { //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); + weakReferenceHandler = new WeakReferenceHandler(this); uploadPositionPresenter = new UploadPositionPresenterImpl(this); registerPresenter = new PushRegisterPresenterImpl(this); pageList = new ArrayList<>(); @@ -86,23 +87,13 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - weakReferenceHandler = new WeakReferenceHandler(this); - String imei = OtherUtils.obtainSimCardSerialNumber(this); - if (TextUtils.isEmpty(imei)) { - return; + imei = OtherUtils.obtainSimCardSerialNumber(this); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + startForegroundService(new Intent(this, UploadLocationService.class)); + } else { + startService(new Intent(this, UploadLocationService.class)); } - //根据条件上传位置信息 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - Log.d(TAG, "onLocationGet: 位置上报"); - uploadPositionPresenter.onReadyRetrofitRequest(imei, - String.valueOf(location.getLatitude()), - String.valueOf(location.getLongitude())); - } - } - }); } @Override @@ -162,6 +153,7 @@ /** * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + * 供{@link com.casic.dcms.service.UploadLocationService#onCreate()}页面调用 */ public static void sendMessage(Message msg) { weakReferenceHandler.sendMessage(msg); @@ -204,6 +196,12 @@ CaseDetailActivity.class); notificationHelper.push(1, notification); break; + case Constant.UPLOAD_LOCATION: + Log.d(TAG, "位置上报"); + Location location = (Location) msg.obj; + mainActivity.uploadPositionPresenter.onReadyRetrofitRequest(mainActivity.imei, + String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude())); + break; case Constant.LOGIN_OUT: Log.d(TAG, "退出登录"); //回到登录页 @@ -216,7 +214,6 @@ } - @Override public void obtainUploadPositionResult(ActionResultBean resultBean) { // Log.d(TAG, "obtainUploadPositionResult: " + new Gson().toJson(resultBean)); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index 4177798..f01637b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -83,8 +83,6 @@ progressDialog = new ProgressDialog(context); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(context.getResources().getDrawable(R.drawable.bg_progress)); - progressDialog.setCanceledOnTouchOutside(false); - progressDialog.setCancelable(false); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java deleted file mode 100644 index 1b2bb6c..0000000 --- a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author : Pengxh - * @time : 2021/4/14 10:55 - * @email : 290677893@qq.com - **/ -public class BroadcastManager { - private static final String TAG = "BroadcastManager"; - private Context mContext; - private static BroadcastManager broadcastManager; - private Map receiverMap; - - private BroadcastManager(Context context) { - this.mContext = context; - receiverMap = new HashMap<>(); - } - - /** - * 双重锁单例 - */ - public static BroadcastManager getInstance(Context context) { - if (broadcastManager == null) { - synchronized (BroadcastManager.class) { - if (broadcastManager == null) { - broadcastManager = new BroadcastManager(context); - } - } - } - return broadcastManager; - } - - /** - * 添加单个Action,广播的初始化 - */ - public void addAction(String action, BroadcastReceiver receiver) { - try { - IntentFilter filter = new IntentFilter(); - filter.addAction(action); - mContext.registerReceiver(receiver, filter); - receiverMap.put(action, receiver); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 添加多个Action,广播的初始化 - */ - public void addAction(String[] actions, BroadcastReceiver receiver) { - try { - IntentFilter filter = new IntentFilter(); - for (String action : actions) { - filter.addAction(action); - receiverMap.put(action, receiver); - } - mContext.registerReceiver(receiver, filter); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 发送广播 - * - * @param action 唯一码 - * @param msg 参数 - */ - public void sendBroadcast(String action, String msg) { - try { - Intent intent = new Intent(); - intent.setAction(action); - intent.putExtra("data", msg); - mContext.sendBroadcast(intent); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 销毁广播 - * - * @param actions action集合 - */ - public void destroy(String... actions) { - try { - if (receiverMap != null) { - for (String action : actions) { - BroadcastReceiver receiver = receiverMap.get(action); - if (receiver != null) { - mContext.unregisterReceiver(receiver); - } - } - } - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } - } -} diff --git a/app/build.gradle b/app/build.gradle index c649d4a..68f1bf0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 2 - versionName "v2.1.0.0" + versionCode 11 + versionName "v1.0.0.3" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a5cca2e..5792e20 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + @@ -44,7 +45,7 @@ tools:targetApi="m"> + android:excludeFromRecents="false"> @@ -86,7 +87,7 @@ - + + + + + + @@ -110,5 +122,7 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 0a18374..8bb4989 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -23,7 +23,7 @@ QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); ToastHelper.initToastHelper(this); - FileUtils.initFileConfig(); + FileUtils.initFileConfig(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java new file mode 100644 index 0000000..52c10a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -0,0 +1,60 @@ +package com.casic.dcms.service; + +import android.app.Notification; +import android.app.Service; +import android.content.Intent; +import android.location.Location; +import android.os.IBinder; +import android.os.Message; +import android.util.Log; + +import androidx.annotation.Nullable; + +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; +import com.casic.dcms.utils.callback.ILocationListener; + +public class UploadLocationService extends Service { + + private static final String TAG = "UploadLocationService"; + + public UploadLocationService() { + + } + + @Override + public void onCreate() { + super.onCreate(); + Log.d(TAG, "onCreate: UploadLocationService"); + NotificationHelper notificationHelper = NotificationHelper.getInstance(this); + Notification notification = notificationHelper.createKeepAlive(); + startForeground(Integer.MAX_VALUE, notification); + + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + Message message = Message.obtain(); + message.what = Constant.UPLOAD_LOCATION; + message.obj = location; + MainActivity.sendMessage(message); + } + } + }); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + // 如果Service被终止,当资源允许情况下,重启service + return START_STICKY; + } + + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 225d5d1..8722cf6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -4,9 +4,9 @@ import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Build; import android.os.Handler; import android.os.Message; -import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; import android.widget.TextView; @@ -25,17 +25,16 @@ import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; import com.casic.dcms.mvp.view.IUploadPositionView; +import com.casic.dcms.service.UploadLocationService; import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; -import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.gyf.immersionbar.ImmersionBar; @@ -61,6 +60,7 @@ private List pageList; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private String imei = ""; private static WeakReferenceHandler weakReferenceHandler; @Override @@ -79,6 +79,7 @@ public void initData() { //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); + weakReferenceHandler = new WeakReferenceHandler(this); uploadPositionPresenter = new UploadPositionPresenterImpl(this); registerPresenter = new PushRegisterPresenterImpl(this); pageList = new ArrayList<>(); @@ -86,23 +87,13 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - weakReferenceHandler = new WeakReferenceHandler(this); - String imei = OtherUtils.obtainSimCardSerialNumber(this); - if (TextUtils.isEmpty(imei)) { - return; + imei = OtherUtils.obtainSimCardSerialNumber(this); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + startForegroundService(new Intent(this, UploadLocationService.class)); + } else { + startService(new Intent(this, UploadLocationService.class)); } - //根据条件上传位置信息 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - Log.d(TAG, "onLocationGet: 位置上报"); - uploadPositionPresenter.onReadyRetrofitRequest(imei, - String.valueOf(location.getLatitude()), - String.valueOf(location.getLongitude())); - } - } - }); } @Override @@ -162,6 +153,7 @@ /** * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + * 供{@link com.casic.dcms.service.UploadLocationService#onCreate()}页面调用 */ public static void sendMessage(Message msg) { weakReferenceHandler.sendMessage(msg); @@ -204,6 +196,12 @@ CaseDetailActivity.class); notificationHelper.push(1, notification); break; + case Constant.UPLOAD_LOCATION: + Log.d(TAG, "位置上报"); + Location location = (Location) msg.obj; + mainActivity.uploadPositionPresenter.onReadyRetrofitRequest(mainActivity.imei, + String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude())); + break; case Constant.LOGIN_OUT: Log.d(TAG, "退出登录"); //回到登录页 @@ -216,7 +214,6 @@ } - @Override public void obtainUploadPositionResult(ActionResultBean resultBean) { // Log.d(TAG, "obtainUploadPositionResult: " + new Gson().toJson(resultBean)); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index 4177798..f01637b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -83,8 +83,6 @@ progressDialog = new ProgressDialog(context); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(context.getResources().getDrawable(R.drawable.bg_progress)); - progressDialog.setCanceledOnTouchOutside(false); - progressDialog.setCancelable(false); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java deleted file mode 100644 index 1b2bb6c..0000000 --- a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author : Pengxh - * @time : 2021/4/14 10:55 - * @email : 290677893@qq.com - **/ -public class BroadcastManager { - private static final String TAG = "BroadcastManager"; - private Context mContext; - private static BroadcastManager broadcastManager; - private Map receiverMap; - - private BroadcastManager(Context context) { - this.mContext = context; - receiverMap = new HashMap<>(); - } - - /** - * 双重锁单例 - */ - public static BroadcastManager getInstance(Context context) { - if (broadcastManager == null) { - synchronized (BroadcastManager.class) { - if (broadcastManager == null) { - broadcastManager = new BroadcastManager(context); - } - } - } - return broadcastManager; - } - - /** - * 添加单个Action,广播的初始化 - */ - public void addAction(String action, BroadcastReceiver receiver) { - try { - IntentFilter filter = new IntentFilter(); - filter.addAction(action); - mContext.registerReceiver(receiver, filter); - receiverMap.put(action, receiver); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 添加多个Action,广播的初始化 - */ - public void addAction(String[] actions, BroadcastReceiver receiver) { - try { - IntentFilter filter = new IntentFilter(); - for (String action : actions) { - filter.addAction(action); - receiverMap.put(action, receiver); - } - mContext.registerReceiver(receiver, filter); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 发送广播 - * - * @param action 唯一码 - * @param msg 参数 - */ - public void sendBroadcast(String action, String msg) { - try { - Intent intent = new Intent(); - intent.setAction(action); - intent.putExtra("data", msg); - mContext.sendBroadcast(intent); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 销毁广播 - * - * @param actions action集合 - */ - public void destroy(String... actions) { - try { - if (receiverMap != null) { - for (String action : actions) { - BroadcastReceiver receiver = receiverMap.get(action); - if (receiver != null) { - mContext.unregisterReceiver(receiver); - } - } - } - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d34b289..5840276 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -53,6 +53,7 @@ public static final int CASE_HANDLE_OK = 17; public static final int CASE_OVERTIME_OK = 18; public static final int CASE_URGENT_OK = 19; + public static final int UPLOAD_LOCATION = 20; public static final double DEFAULT_LNG = 116.06639658728571; public static final double DEFAULT_LAT = 27.759547805536418; diff --git a/app/build.gradle b/app/build.gradle index c649d4a..68f1bf0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 2 - versionName "v2.1.0.0" + versionCode 11 + versionName "v1.0.0.3" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a5cca2e..5792e20 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + @@ -44,7 +45,7 @@ tools:targetApi="m"> + android:excludeFromRecents="false"> @@ -86,7 +87,7 @@ - + + + + + + @@ -110,5 +122,7 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 0a18374..8bb4989 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -23,7 +23,7 @@ QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); ToastHelper.initToastHelper(this); - FileUtils.initFileConfig(); + FileUtils.initFileConfig(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java new file mode 100644 index 0000000..52c10a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -0,0 +1,60 @@ +package com.casic.dcms.service; + +import android.app.Notification; +import android.app.Service; +import android.content.Intent; +import android.location.Location; +import android.os.IBinder; +import android.os.Message; +import android.util.Log; + +import androidx.annotation.Nullable; + +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; +import com.casic.dcms.utils.callback.ILocationListener; + +public class UploadLocationService extends Service { + + private static final String TAG = "UploadLocationService"; + + public UploadLocationService() { + + } + + @Override + public void onCreate() { + super.onCreate(); + Log.d(TAG, "onCreate: UploadLocationService"); + NotificationHelper notificationHelper = NotificationHelper.getInstance(this); + Notification notification = notificationHelper.createKeepAlive(); + startForeground(Integer.MAX_VALUE, notification); + + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + Message message = Message.obtain(); + message.what = Constant.UPLOAD_LOCATION; + message.obj = location; + MainActivity.sendMessage(message); + } + } + }); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + // 如果Service被终止,当资源允许情况下,重启service + return START_STICKY; + } + + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 225d5d1..8722cf6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -4,9 +4,9 @@ import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Build; import android.os.Handler; import android.os.Message; -import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; import android.widget.TextView; @@ -25,17 +25,16 @@ import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; import com.casic.dcms.mvp.view.IUploadPositionView; +import com.casic.dcms.service.UploadLocationService; import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; -import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.gyf.immersionbar.ImmersionBar; @@ -61,6 +60,7 @@ private List pageList; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private String imei = ""; private static WeakReferenceHandler weakReferenceHandler; @Override @@ -79,6 +79,7 @@ public void initData() { //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); + weakReferenceHandler = new WeakReferenceHandler(this); uploadPositionPresenter = new UploadPositionPresenterImpl(this); registerPresenter = new PushRegisterPresenterImpl(this); pageList = new ArrayList<>(); @@ -86,23 +87,13 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - weakReferenceHandler = new WeakReferenceHandler(this); - String imei = OtherUtils.obtainSimCardSerialNumber(this); - if (TextUtils.isEmpty(imei)) { - return; + imei = OtherUtils.obtainSimCardSerialNumber(this); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + startForegroundService(new Intent(this, UploadLocationService.class)); + } else { + startService(new Intent(this, UploadLocationService.class)); } - //根据条件上传位置信息 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - Log.d(TAG, "onLocationGet: 位置上报"); - uploadPositionPresenter.onReadyRetrofitRequest(imei, - String.valueOf(location.getLatitude()), - String.valueOf(location.getLongitude())); - } - } - }); } @Override @@ -162,6 +153,7 @@ /** * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + * 供{@link com.casic.dcms.service.UploadLocationService#onCreate()}页面调用 */ public static void sendMessage(Message msg) { weakReferenceHandler.sendMessage(msg); @@ -204,6 +196,12 @@ CaseDetailActivity.class); notificationHelper.push(1, notification); break; + case Constant.UPLOAD_LOCATION: + Log.d(TAG, "位置上报"); + Location location = (Location) msg.obj; + mainActivity.uploadPositionPresenter.onReadyRetrofitRequest(mainActivity.imei, + String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude())); + break; case Constant.LOGIN_OUT: Log.d(TAG, "退出登录"); //回到登录页 @@ -216,7 +214,6 @@ } - @Override public void obtainUploadPositionResult(ActionResultBean resultBean) { // Log.d(TAG, "obtainUploadPositionResult: " + new Gson().toJson(resultBean)); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index 4177798..f01637b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -83,8 +83,6 @@ progressDialog = new ProgressDialog(context); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(context.getResources().getDrawable(R.drawable.bg_progress)); - progressDialog.setCanceledOnTouchOutside(false); - progressDialog.setCancelable(false); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java deleted file mode 100644 index 1b2bb6c..0000000 --- a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author : Pengxh - * @time : 2021/4/14 10:55 - * @email : 290677893@qq.com - **/ -public class BroadcastManager { - private static final String TAG = "BroadcastManager"; - private Context mContext; - private static BroadcastManager broadcastManager; - private Map receiverMap; - - private BroadcastManager(Context context) { - this.mContext = context; - receiverMap = new HashMap<>(); - } - - /** - * 双重锁单例 - */ - public static BroadcastManager getInstance(Context context) { - if (broadcastManager == null) { - synchronized (BroadcastManager.class) { - if (broadcastManager == null) { - broadcastManager = new BroadcastManager(context); - } - } - } - return broadcastManager; - } - - /** - * 添加单个Action,广播的初始化 - */ - public void addAction(String action, BroadcastReceiver receiver) { - try { - IntentFilter filter = new IntentFilter(); - filter.addAction(action); - mContext.registerReceiver(receiver, filter); - receiverMap.put(action, receiver); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 添加多个Action,广播的初始化 - */ - public void addAction(String[] actions, BroadcastReceiver receiver) { - try { - IntentFilter filter = new IntentFilter(); - for (String action : actions) { - filter.addAction(action); - receiverMap.put(action, receiver); - } - mContext.registerReceiver(receiver, filter); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 发送广播 - * - * @param action 唯一码 - * @param msg 参数 - */ - public void sendBroadcast(String action, String msg) { - try { - Intent intent = new Intent(); - intent.setAction(action); - intent.putExtra("data", msg); - mContext.sendBroadcast(intent); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 销毁广播 - * - * @param actions action集合 - */ - public void destroy(String... actions) { - try { - if (receiverMap != null) { - for (String action : actions) { - BroadcastReceiver receiver = receiverMap.get(action); - if (receiver != null) { - mContext.unregisterReceiver(receiver); - } - } - } - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d34b289..5840276 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -53,6 +53,7 @@ public static final int CASE_HANDLE_OK = 17; public static final int CASE_OVERTIME_OK = 18; public static final int CASE_URGENT_OK = 19; + public static final int UPLOAD_LOCATION = 20; public static final double DEFAULT_LNG = 116.06639658728571; public static final double DEFAULT_LAT = 27.759547805536418; diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index d5fb6ba..51f9943 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -1,5 +1,6 @@ package com.casic.dcms.utils; +import android.content.Context; import android.os.Environment; import android.util.Log; @@ -11,26 +12,42 @@ public class FileUtils { private static final String TAG = "FileUtils"; - private static File parentDir; + private static File audioDir; + private static File imageDir; + private static File downloadDir; - public static void initFileConfig() { - parentDir = new File(Environment.getExternalStorageDirectory(), "Casic"); + public static void initFileConfig(Context context) { + File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { boolean mkdir = parentDir.mkdir(); if (mkdir) { Log.d(TAG, "initFileConfig: 创建Casic文件夹"); + audioDir = new File(parentDir, "AudioFile"); + if (!audioDir.exists()) { + boolean mkAudioDir = audioDir.mkdir(); + if (mkAudioDir) { + Log.d(TAG, "initFileConfig: 创建AudioFile文件夹"); + } + } + imageDir = new File(parentDir, "CompressImageFile"); + if (!imageDir.exists()) { + boolean mkImageDir = imageDir.mkdir(); + if (mkImageDir) { + Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); + } + } + downloadDir = new File(parentDir, "DownloadFile"); + if (!downloadDir.exists()) { + boolean mkDownDir = downloadDir.mkdir(); + if (mkDownDir) { + Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹"); + } + } } } } static File getOutputAudioFile() { - File audioDir = new File(parentDir, "AudioFile"); - if (!audioDir.exists()) { - boolean mkdir = audioDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建AudioFile文件夹"); - } - } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); File audioFile = new File(audioDir + File.separator + "AUD_" + timeStamp + ".m4a"); if (!audioFile.exists()) { @@ -44,25 +61,11 @@ } public static String getImageCompressPath() { - File imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkdir = imageDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); - } - } return imageDir.toString(); } //储存下载文件的目录 - public static String getDownloadFilePath() { - File downloadDir = new File(parentDir, "DownloadFile"); - if (!downloadDir.exists()) { - boolean mkdir = downloadDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹"); - } - } + static String getDownloadFilePath() { return downloadDir.toString(); } diff --git a/app/build.gradle b/app/build.gradle index c649d4a..68f1bf0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 2 - versionName "v2.1.0.0" + versionCode 11 + versionName "v1.0.0.3" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a5cca2e..5792e20 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + @@ -44,7 +45,7 @@ tools:targetApi="m"> + android:excludeFromRecents="false"> @@ -86,7 +87,7 @@ - + + + + + + @@ -110,5 +122,7 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 0a18374..8bb4989 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -23,7 +23,7 @@ QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); ToastHelper.initToastHelper(this); - FileUtils.initFileConfig(); + FileUtils.initFileConfig(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java new file mode 100644 index 0000000..52c10a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -0,0 +1,60 @@ +package com.casic.dcms.service; + +import android.app.Notification; +import android.app.Service; +import android.content.Intent; +import android.location.Location; +import android.os.IBinder; +import android.os.Message; +import android.util.Log; + +import androidx.annotation.Nullable; + +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; +import com.casic.dcms.utils.callback.ILocationListener; + +public class UploadLocationService extends Service { + + private static final String TAG = "UploadLocationService"; + + public UploadLocationService() { + + } + + @Override + public void onCreate() { + super.onCreate(); + Log.d(TAG, "onCreate: UploadLocationService"); + NotificationHelper notificationHelper = NotificationHelper.getInstance(this); + Notification notification = notificationHelper.createKeepAlive(); + startForeground(Integer.MAX_VALUE, notification); + + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + Message message = Message.obtain(); + message.what = Constant.UPLOAD_LOCATION; + message.obj = location; + MainActivity.sendMessage(message); + } + } + }); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + // 如果Service被终止,当资源允许情况下,重启service + return START_STICKY; + } + + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 225d5d1..8722cf6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -4,9 +4,9 @@ import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Build; import android.os.Handler; import android.os.Message; -import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; import android.widget.TextView; @@ -25,17 +25,16 @@ import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; import com.casic.dcms.mvp.view.IUploadPositionView; +import com.casic.dcms.service.UploadLocationService; import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; -import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.gyf.immersionbar.ImmersionBar; @@ -61,6 +60,7 @@ private List pageList; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private String imei = ""; private static WeakReferenceHandler weakReferenceHandler; @Override @@ -79,6 +79,7 @@ public void initData() { //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); + weakReferenceHandler = new WeakReferenceHandler(this); uploadPositionPresenter = new UploadPositionPresenterImpl(this); registerPresenter = new PushRegisterPresenterImpl(this); pageList = new ArrayList<>(); @@ -86,23 +87,13 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - weakReferenceHandler = new WeakReferenceHandler(this); - String imei = OtherUtils.obtainSimCardSerialNumber(this); - if (TextUtils.isEmpty(imei)) { - return; + imei = OtherUtils.obtainSimCardSerialNumber(this); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + startForegroundService(new Intent(this, UploadLocationService.class)); + } else { + startService(new Intent(this, UploadLocationService.class)); } - //根据条件上传位置信息 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - Log.d(TAG, "onLocationGet: 位置上报"); - uploadPositionPresenter.onReadyRetrofitRequest(imei, - String.valueOf(location.getLatitude()), - String.valueOf(location.getLongitude())); - } - } - }); } @Override @@ -162,6 +153,7 @@ /** * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + * 供{@link com.casic.dcms.service.UploadLocationService#onCreate()}页面调用 */ public static void sendMessage(Message msg) { weakReferenceHandler.sendMessage(msg); @@ -204,6 +196,12 @@ CaseDetailActivity.class); notificationHelper.push(1, notification); break; + case Constant.UPLOAD_LOCATION: + Log.d(TAG, "位置上报"); + Location location = (Location) msg.obj; + mainActivity.uploadPositionPresenter.onReadyRetrofitRequest(mainActivity.imei, + String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude())); + break; case Constant.LOGIN_OUT: Log.d(TAG, "退出登录"); //回到登录页 @@ -216,7 +214,6 @@ } - @Override public void obtainUploadPositionResult(ActionResultBean resultBean) { // Log.d(TAG, "obtainUploadPositionResult: " + new Gson().toJson(resultBean)); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index 4177798..f01637b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -83,8 +83,6 @@ progressDialog = new ProgressDialog(context); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(context.getResources().getDrawable(R.drawable.bg_progress)); - progressDialog.setCanceledOnTouchOutside(false); - progressDialog.setCancelable(false); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java deleted file mode 100644 index 1b2bb6c..0000000 --- a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author : Pengxh - * @time : 2021/4/14 10:55 - * @email : 290677893@qq.com - **/ -public class BroadcastManager { - private static final String TAG = "BroadcastManager"; - private Context mContext; - private static BroadcastManager broadcastManager; - private Map receiverMap; - - private BroadcastManager(Context context) { - this.mContext = context; - receiverMap = new HashMap<>(); - } - - /** - * 双重锁单例 - */ - public static BroadcastManager getInstance(Context context) { - if (broadcastManager == null) { - synchronized (BroadcastManager.class) { - if (broadcastManager == null) { - broadcastManager = new BroadcastManager(context); - } - } - } - return broadcastManager; - } - - /** - * 添加单个Action,广播的初始化 - */ - public void addAction(String action, BroadcastReceiver receiver) { - try { - IntentFilter filter = new IntentFilter(); - filter.addAction(action); - mContext.registerReceiver(receiver, filter); - receiverMap.put(action, receiver); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 添加多个Action,广播的初始化 - */ - public void addAction(String[] actions, BroadcastReceiver receiver) { - try { - IntentFilter filter = new IntentFilter(); - for (String action : actions) { - filter.addAction(action); - receiverMap.put(action, receiver); - } - mContext.registerReceiver(receiver, filter); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 发送广播 - * - * @param action 唯一码 - * @param msg 参数 - */ - public void sendBroadcast(String action, String msg) { - try { - Intent intent = new Intent(); - intent.setAction(action); - intent.putExtra("data", msg); - mContext.sendBroadcast(intent); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 销毁广播 - * - * @param actions action集合 - */ - public void destroy(String... actions) { - try { - if (receiverMap != null) { - for (String action : actions) { - BroadcastReceiver receiver = receiverMap.get(action); - if (receiver != null) { - mContext.unregisterReceiver(receiver); - } - } - } - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d34b289..5840276 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -53,6 +53,7 @@ public static final int CASE_HANDLE_OK = 17; public static final int CASE_OVERTIME_OK = 18; public static final int CASE_URGENT_OK = 19; + public static final int UPLOAD_LOCATION = 20; public static final double DEFAULT_LNG = 116.06639658728571; public static final double DEFAULT_LAT = 27.759547805536418; diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index d5fb6ba..51f9943 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -1,5 +1,6 @@ package com.casic.dcms.utils; +import android.content.Context; import android.os.Environment; import android.util.Log; @@ -11,26 +12,42 @@ public class FileUtils { private static final String TAG = "FileUtils"; - private static File parentDir; + private static File audioDir; + private static File imageDir; + private static File downloadDir; - public static void initFileConfig() { - parentDir = new File(Environment.getExternalStorageDirectory(), "Casic"); + public static void initFileConfig(Context context) { + File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { boolean mkdir = parentDir.mkdir(); if (mkdir) { Log.d(TAG, "initFileConfig: 创建Casic文件夹"); + audioDir = new File(parentDir, "AudioFile"); + if (!audioDir.exists()) { + boolean mkAudioDir = audioDir.mkdir(); + if (mkAudioDir) { + Log.d(TAG, "initFileConfig: 创建AudioFile文件夹"); + } + } + imageDir = new File(parentDir, "CompressImageFile"); + if (!imageDir.exists()) { + boolean mkImageDir = imageDir.mkdir(); + if (mkImageDir) { + Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); + } + } + downloadDir = new File(parentDir, "DownloadFile"); + if (!downloadDir.exists()) { + boolean mkDownDir = downloadDir.mkdir(); + if (mkDownDir) { + Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹"); + } + } } } } static File getOutputAudioFile() { - File audioDir = new File(parentDir, "AudioFile"); - if (!audioDir.exists()) { - boolean mkdir = audioDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建AudioFile文件夹"); - } - } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); File audioFile = new File(audioDir + File.separator + "AUD_" + timeStamp + ".m4a"); if (!audioFile.exists()) { @@ -44,25 +61,11 @@ } public static String getImageCompressPath() { - File imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkdir = imageDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); - } - } return imageDir.toString(); } //储存下载文件的目录 - public static String getDownloadFilePath() { - File downloadDir = new File(parentDir, "DownloadFile"); - if (!downloadDir.exists()) { - boolean mkdir = downloadDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹"); - } - } + static String getDownloadFilePath() { return downloadDir.toString(); } diff --git a/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java index cfe5bfc..0164146 100644 --- a/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java @@ -63,16 +63,15 @@ /** * 创建常驻状态栏通知 - * - * @param title 通知标题 - * @param message 通知内容 */ - public Notification createKeepAlive(String title, String message) { + public Notification createKeepAlive() { Notification.Builder builder = createBuilder(); - builder.setContentTitle(title) - .setContentText(message) + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.normal); + builder.setContentTitle("移动城管") + .setContentText("移动城管运行中") .setWhen(System.currentTimeMillis()) - .setSmallIcon(R.mipmap.app_logo); + .setSmallIcon(R.mipmap.app_logo) + .setLargeIcon(bitmap); Notification notification = builder.build(); notification.flags = Notification.FLAG_NO_CLEAR; return notification; diff --git a/app/build.gradle b/app/build.gradle index c649d4a..68f1bf0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 2 - versionName "v2.1.0.0" + versionCode 11 + versionName "v1.0.0.3" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a5cca2e..5792e20 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + @@ -44,7 +45,7 @@ tools:targetApi="m"> + android:excludeFromRecents="false"> @@ -86,7 +87,7 @@ - + + + + + + @@ -110,5 +122,7 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 0a18374..8bb4989 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -23,7 +23,7 @@ QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); ToastHelper.initToastHelper(this); - FileUtils.initFileConfig(); + FileUtils.initFileConfig(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java new file mode 100644 index 0000000..52c10a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -0,0 +1,60 @@ +package com.casic.dcms.service; + +import android.app.Notification; +import android.app.Service; +import android.content.Intent; +import android.location.Location; +import android.os.IBinder; +import android.os.Message; +import android.util.Log; + +import androidx.annotation.Nullable; + +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; +import com.casic.dcms.utils.callback.ILocationListener; + +public class UploadLocationService extends Service { + + private static final String TAG = "UploadLocationService"; + + public UploadLocationService() { + + } + + @Override + public void onCreate() { + super.onCreate(); + Log.d(TAG, "onCreate: UploadLocationService"); + NotificationHelper notificationHelper = NotificationHelper.getInstance(this); + Notification notification = notificationHelper.createKeepAlive(); + startForeground(Integer.MAX_VALUE, notification); + + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + Message message = Message.obtain(); + message.what = Constant.UPLOAD_LOCATION; + message.obj = location; + MainActivity.sendMessage(message); + } + } + }); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + // 如果Service被终止,当资源允许情况下,重启service + return START_STICKY; + } + + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 225d5d1..8722cf6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -4,9 +4,9 @@ import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Build; import android.os.Handler; import android.os.Message; -import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; import android.widget.TextView; @@ -25,17 +25,16 @@ import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; import com.casic.dcms.mvp.view.IUploadPositionView; +import com.casic.dcms.service.UploadLocationService; import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; -import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.gyf.immersionbar.ImmersionBar; @@ -61,6 +60,7 @@ private List pageList; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private String imei = ""; private static WeakReferenceHandler weakReferenceHandler; @Override @@ -79,6 +79,7 @@ public void initData() { //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); + weakReferenceHandler = new WeakReferenceHandler(this); uploadPositionPresenter = new UploadPositionPresenterImpl(this); registerPresenter = new PushRegisterPresenterImpl(this); pageList = new ArrayList<>(); @@ -86,23 +87,13 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - weakReferenceHandler = new WeakReferenceHandler(this); - String imei = OtherUtils.obtainSimCardSerialNumber(this); - if (TextUtils.isEmpty(imei)) { - return; + imei = OtherUtils.obtainSimCardSerialNumber(this); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + startForegroundService(new Intent(this, UploadLocationService.class)); + } else { + startService(new Intent(this, UploadLocationService.class)); } - //根据条件上传位置信息 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - Log.d(TAG, "onLocationGet: 位置上报"); - uploadPositionPresenter.onReadyRetrofitRequest(imei, - String.valueOf(location.getLatitude()), - String.valueOf(location.getLongitude())); - } - } - }); } @Override @@ -162,6 +153,7 @@ /** * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + * 供{@link com.casic.dcms.service.UploadLocationService#onCreate()}页面调用 */ public static void sendMessage(Message msg) { weakReferenceHandler.sendMessage(msg); @@ -204,6 +196,12 @@ CaseDetailActivity.class); notificationHelper.push(1, notification); break; + case Constant.UPLOAD_LOCATION: + Log.d(TAG, "位置上报"); + Location location = (Location) msg.obj; + mainActivity.uploadPositionPresenter.onReadyRetrofitRequest(mainActivity.imei, + String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude())); + break; case Constant.LOGIN_OUT: Log.d(TAG, "退出登录"); //回到登录页 @@ -216,7 +214,6 @@ } - @Override public void obtainUploadPositionResult(ActionResultBean resultBean) { // Log.d(TAG, "obtainUploadPositionResult: " + new Gson().toJson(resultBean)); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index 4177798..f01637b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -83,8 +83,6 @@ progressDialog = new ProgressDialog(context); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(context.getResources().getDrawable(R.drawable.bg_progress)); - progressDialog.setCanceledOnTouchOutside(false); - progressDialog.setCancelable(false); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java deleted file mode 100644 index 1b2bb6c..0000000 --- a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author : Pengxh - * @time : 2021/4/14 10:55 - * @email : 290677893@qq.com - **/ -public class BroadcastManager { - private static final String TAG = "BroadcastManager"; - private Context mContext; - private static BroadcastManager broadcastManager; - private Map receiverMap; - - private BroadcastManager(Context context) { - this.mContext = context; - receiverMap = new HashMap<>(); - } - - /** - * 双重锁单例 - */ - public static BroadcastManager getInstance(Context context) { - if (broadcastManager == null) { - synchronized (BroadcastManager.class) { - if (broadcastManager == null) { - broadcastManager = new BroadcastManager(context); - } - } - } - return broadcastManager; - } - - /** - * 添加单个Action,广播的初始化 - */ - public void addAction(String action, BroadcastReceiver receiver) { - try { - IntentFilter filter = new IntentFilter(); - filter.addAction(action); - mContext.registerReceiver(receiver, filter); - receiverMap.put(action, receiver); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 添加多个Action,广播的初始化 - */ - public void addAction(String[] actions, BroadcastReceiver receiver) { - try { - IntentFilter filter = new IntentFilter(); - for (String action : actions) { - filter.addAction(action); - receiverMap.put(action, receiver); - } - mContext.registerReceiver(receiver, filter); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 发送广播 - * - * @param action 唯一码 - * @param msg 参数 - */ - public void sendBroadcast(String action, String msg) { - try { - Intent intent = new Intent(); - intent.setAction(action); - intent.putExtra("data", msg); - mContext.sendBroadcast(intent); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 销毁广播 - * - * @param actions action集合 - */ - public void destroy(String... actions) { - try { - if (receiverMap != null) { - for (String action : actions) { - BroadcastReceiver receiver = receiverMap.get(action); - if (receiver != null) { - mContext.unregisterReceiver(receiver); - } - } - } - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d34b289..5840276 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -53,6 +53,7 @@ public static final int CASE_HANDLE_OK = 17; public static final int CASE_OVERTIME_OK = 18; public static final int CASE_URGENT_OK = 19; + public static final int UPLOAD_LOCATION = 20; public static final double DEFAULT_LNG = 116.06639658728571; public static final double DEFAULT_LAT = 27.759547805536418; diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index d5fb6ba..51f9943 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -1,5 +1,6 @@ package com.casic.dcms.utils; +import android.content.Context; import android.os.Environment; import android.util.Log; @@ -11,26 +12,42 @@ public class FileUtils { private static final String TAG = "FileUtils"; - private static File parentDir; + private static File audioDir; + private static File imageDir; + private static File downloadDir; - public static void initFileConfig() { - parentDir = new File(Environment.getExternalStorageDirectory(), "Casic"); + public static void initFileConfig(Context context) { + File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { boolean mkdir = parentDir.mkdir(); if (mkdir) { Log.d(TAG, "initFileConfig: 创建Casic文件夹"); + audioDir = new File(parentDir, "AudioFile"); + if (!audioDir.exists()) { + boolean mkAudioDir = audioDir.mkdir(); + if (mkAudioDir) { + Log.d(TAG, "initFileConfig: 创建AudioFile文件夹"); + } + } + imageDir = new File(parentDir, "CompressImageFile"); + if (!imageDir.exists()) { + boolean mkImageDir = imageDir.mkdir(); + if (mkImageDir) { + Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); + } + } + downloadDir = new File(parentDir, "DownloadFile"); + if (!downloadDir.exists()) { + boolean mkDownDir = downloadDir.mkdir(); + if (mkDownDir) { + Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹"); + } + } } } } static File getOutputAudioFile() { - File audioDir = new File(parentDir, "AudioFile"); - if (!audioDir.exists()) { - boolean mkdir = audioDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建AudioFile文件夹"); - } - } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); File audioFile = new File(audioDir + File.separator + "AUD_" + timeStamp + ".m4a"); if (!audioFile.exists()) { @@ -44,25 +61,11 @@ } public static String getImageCompressPath() { - File imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkdir = imageDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); - } - } return imageDir.toString(); } //储存下载文件的目录 - public static String getDownloadFilePath() { - File downloadDir = new File(parentDir, "DownloadFile"); - if (!downloadDir.exists()) { - boolean mkdir = downloadDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹"); - } - } + static String getDownloadFilePath() { return downloadDir.toString(); } diff --git a/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java index cfe5bfc..0164146 100644 --- a/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java @@ -63,16 +63,15 @@ /** * 创建常驻状态栏通知 - * - * @param title 通知标题 - * @param message 通知内容 */ - public Notification createKeepAlive(String title, String message) { + public Notification createKeepAlive() { Notification.Builder builder = createBuilder(); - builder.setContentTitle(title) - .setContentText(message) + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.normal); + builder.setContentTitle("移动城管") + .setContentText("移动城管运行中") .setWhen(System.currentTimeMillis()) - .setSmallIcon(R.mipmap.app_logo); + .setSmallIcon(R.mipmap.app_logo) + .setLargeIcon(bitmap); Notification notification = builder.build(); notification.flags = Notification.FLAG_NO_CLEAR; return notification; diff --git a/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java b/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java new file mode 100644 index 0000000..4683201 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java @@ -0,0 +1,6 @@ +package com.casic.dcms.utils; + +import androidx.core.content.FileProvider; + +public class VersionUpgradeFileProvider extends FileProvider { +} diff --git a/app/build.gradle b/app/build.gradle index c649d4a..68f1bf0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 2 - versionName "v2.1.0.0" + versionCode 11 + versionName "v1.0.0.3" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a5cca2e..5792e20 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + @@ -44,7 +45,7 @@ tools:targetApi="m"> + android:excludeFromRecents="false"> @@ -86,7 +87,7 @@ - + + + + + + @@ -110,5 +122,7 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 0a18374..8bb4989 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -23,7 +23,7 @@ QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); ToastHelper.initToastHelper(this); - FileUtils.initFileConfig(); + FileUtils.initFileConfig(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java new file mode 100644 index 0000000..52c10a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -0,0 +1,60 @@ +package com.casic.dcms.service; + +import android.app.Notification; +import android.app.Service; +import android.content.Intent; +import android.location.Location; +import android.os.IBinder; +import android.os.Message; +import android.util.Log; + +import androidx.annotation.Nullable; + +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; +import com.casic.dcms.utils.callback.ILocationListener; + +public class UploadLocationService extends Service { + + private static final String TAG = "UploadLocationService"; + + public UploadLocationService() { + + } + + @Override + public void onCreate() { + super.onCreate(); + Log.d(TAG, "onCreate: UploadLocationService"); + NotificationHelper notificationHelper = NotificationHelper.getInstance(this); + Notification notification = notificationHelper.createKeepAlive(); + startForeground(Integer.MAX_VALUE, notification); + + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + Message message = Message.obtain(); + message.what = Constant.UPLOAD_LOCATION; + message.obj = location; + MainActivity.sendMessage(message); + } + } + }); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + // 如果Service被终止,当资源允许情况下,重启service + return START_STICKY; + } + + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 225d5d1..8722cf6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -4,9 +4,9 @@ import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Build; import android.os.Handler; import android.os.Message; -import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; import android.widget.TextView; @@ -25,17 +25,16 @@ import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; import com.casic.dcms.mvp.view.IUploadPositionView; +import com.casic.dcms.service.UploadLocationService; import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; -import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.gyf.immersionbar.ImmersionBar; @@ -61,6 +60,7 @@ private List pageList; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private String imei = ""; private static WeakReferenceHandler weakReferenceHandler; @Override @@ -79,6 +79,7 @@ public void initData() { //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); + weakReferenceHandler = new WeakReferenceHandler(this); uploadPositionPresenter = new UploadPositionPresenterImpl(this); registerPresenter = new PushRegisterPresenterImpl(this); pageList = new ArrayList<>(); @@ -86,23 +87,13 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - weakReferenceHandler = new WeakReferenceHandler(this); - String imei = OtherUtils.obtainSimCardSerialNumber(this); - if (TextUtils.isEmpty(imei)) { - return; + imei = OtherUtils.obtainSimCardSerialNumber(this); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + startForegroundService(new Intent(this, UploadLocationService.class)); + } else { + startService(new Intent(this, UploadLocationService.class)); } - //根据条件上传位置信息 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - Log.d(TAG, "onLocationGet: 位置上报"); - uploadPositionPresenter.onReadyRetrofitRequest(imei, - String.valueOf(location.getLatitude()), - String.valueOf(location.getLongitude())); - } - } - }); } @Override @@ -162,6 +153,7 @@ /** * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + * 供{@link com.casic.dcms.service.UploadLocationService#onCreate()}页面调用 */ public static void sendMessage(Message msg) { weakReferenceHandler.sendMessage(msg); @@ -204,6 +196,12 @@ CaseDetailActivity.class); notificationHelper.push(1, notification); break; + case Constant.UPLOAD_LOCATION: + Log.d(TAG, "位置上报"); + Location location = (Location) msg.obj; + mainActivity.uploadPositionPresenter.onReadyRetrofitRequest(mainActivity.imei, + String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude())); + break; case Constant.LOGIN_OUT: Log.d(TAG, "退出登录"); //回到登录页 @@ -216,7 +214,6 @@ } - @Override public void obtainUploadPositionResult(ActionResultBean resultBean) { // Log.d(TAG, "obtainUploadPositionResult: " + new Gson().toJson(resultBean)); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index 4177798..f01637b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -83,8 +83,6 @@ progressDialog = new ProgressDialog(context); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(context.getResources().getDrawable(R.drawable.bg_progress)); - progressDialog.setCanceledOnTouchOutside(false); - progressDialog.setCancelable(false); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java deleted file mode 100644 index 1b2bb6c..0000000 --- a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author : Pengxh - * @time : 2021/4/14 10:55 - * @email : 290677893@qq.com - **/ -public class BroadcastManager { - private static final String TAG = "BroadcastManager"; - private Context mContext; - private static BroadcastManager broadcastManager; - private Map receiverMap; - - private BroadcastManager(Context context) { - this.mContext = context; - receiverMap = new HashMap<>(); - } - - /** - * 双重锁单例 - */ - public static BroadcastManager getInstance(Context context) { - if (broadcastManager == null) { - synchronized (BroadcastManager.class) { - if (broadcastManager == null) { - broadcastManager = new BroadcastManager(context); - } - } - } - return broadcastManager; - } - - /** - * 添加单个Action,广播的初始化 - */ - public void addAction(String action, BroadcastReceiver receiver) { - try { - IntentFilter filter = new IntentFilter(); - filter.addAction(action); - mContext.registerReceiver(receiver, filter); - receiverMap.put(action, receiver); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 添加多个Action,广播的初始化 - */ - public void addAction(String[] actions, BroadcastReceiver receiver) { - try { - IntentFilter filter = new IntentFilter(); - for (String action : actions) { - filter.addAction(action); - receiverMap.put(action, receiver); - } - mContext.registerReceiver(receiver, filter); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 发送广播 - * - * @param action 唯一码 - * @param msg 参数 - */ - public void sendBroadcast(String action, String msg) { - try { - Intent intent = new Intent(); - intent.setAction(action); - intent.putExtra("data", msg); - mContext.sendBroadcast(intent); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 销毁广播 - * - * @param actions action集合 - */ - public void destroy(String... actions) { - try { - if (receiverMap != null) { - for (String action : actions) { - BroadcastReceiver receiver = receiverMap.get(action); - if (receiver != null) { - mContext.unregisterReceiver(receiver); - } - } - } - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d34b289..5840276 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -53,6 +53,7 @@ public static final int CASE_HANDLE_OK = 17; public static final int CASE_OVERTIME_OK = 18; public static final int CASE_URGENT_OK = 19; + public static final int UPLOAD_LOCATION = 20; public static final double DEFAULT_LNG = 116.06639658728571; public static final double DEFAULT_LAT = 27.759547805536418; diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index d5fb6ba..51f9943 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -1,5 +1,6 @@ package com.casic.dcms.utils; +import android.content.Context; import android.os.Environment; import android.util.Log; @@ -11,26 +12,42 @@ public class FileUtils { private static final String TAG = "FileUtils"; - private static File parentDir; + private static File audioDir; + private static File imageDir; + private static File downloadDir; - public static void initFileConfig() { - parentDir = new File(Environment.getExternalStorageDirectory(), "Casic"); + public static void initFileConfig(Context context) { + File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { boolean mkdir = parentDir.mkdir(); if (mkdir) { Log.d(TAG, "initFileConfig: 创建Casic文件夹"); + audioDir = new File(parentDir, "AudioFile"); + if (!audioDir.exists()) { + boolean mkAudioDir = audioDir.mkdir(); + if (mkAudioDir) { + Log.d(TAG, "initFileConfig: 创建AudioFile文件夹"); + } + } + imageDir = new File(parentDir, "CompressImageFile"); + if (!imageDir.exists()) { + boolean mkImageDir = imageDir.mkdir(); + if (mkImageDir) { + Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); + } + } + downloadDir = new File(parentDir, "DownloadFile"); + if (!downloadDir.exists()) { + boolean mkDownDir = downloadDir.mkdir(); + if (mkDownDir) { + Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹"); + } + } } } } static File getOutputAudioFile() { - File audioDir = new File(parentDir, "AudioFile"); - if (!audioDir.exists()) { - boolean mkdir = audioDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建AudioFile文件夹"); - } - } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); File audioFile = new File(audioDir + File.separator + "AUD_" + timeStamp + ".m4a"); if (!audioFile.exists()) { @@ -44,25 +61,11 @@ } public static String getImageCompressPath() { - File imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkdir = imageDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); - } - } return imageDir.toString(); } //储存下载文件的目录 - public static String getDownloadFilePath() { - File downloadDir = new File(parentDir, "DownloadFile"); - if (!downloadDir.exists()) { - boolean mkdir = downloadDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹"); - } - } + static String getDownloadFilePath() { return downloadDir.toString(); } diff --git a/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java index cfe5bfc..0164146 100644 --- a/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java @@ -63,16 +63,15 @@ /** * 创建常驻状态栏通知 - * - * @param title 通知标题 - * @param message 通知内容 */ - public Notification createKeepAlive(String title, String message) { + public Notification createKeepAlive() { Notification.Builder builder = createBuilder(); - builder.setContentTitle(title) - .setContentText(message) + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.normal); + builder.setContentTitle("移动城管") + .setContentText("移动城管运行中") .setWhen(System.currentTimeMillis()) - .setSmallIcon(R.mipmap.app_logo); + .setSmallIcon(R.mipmap.app_logo) + .setLargeIcon(bitmap); Notification notification = builder.build(); notification.flags = Notification.FLAG_NO_CLEAR; return notification; diff --git a/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java b/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java new file mode 100644 index 0000000..4683201 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java @@ -0,0 +1,6 @@ +package com.casic.dcms.utils; + +import androidx.core.content.FileProvider; + +public class VersionUpgradeFileProvider extends FileProvider { +} diff --git a/app/src/main/res/layout/activity_case_detail.xml b/app/src/main/res/layout/activity_case_detail.xml index f2d36c4..90263ac 100644 --- a/app/src/main/res/layout/activity_case_detail.xml +++ b/app/src/main/res/layout/activity_case_detail.xml @@ -189,7 +189,6 @@ android:layout_alignParentEnd="true" android:layout_marginStart="25dp" android:layout_toEndOf="@id/v" - android:gravity="end" android:textSize="@dimen/textFontSize" /> diff --git a/app/build.gradle b/app/build.gradle index c649d4a..68f1bf0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 2 - versionName "v2.1.0.0" + versionCode 11 + versionName "v1.0.0.3" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a5cca2e..5792e20 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + @@ -44,7 +45,7 @@ tools:targetApi="m"> + android:excludeFromRecents="false"> @@ -86,7 +87,7 @@ - + + + + + + @@ -110,5 +122,7 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 0a18374..8bb4989 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -23,7 +23,7 @@ QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); ToastHelper.initToastHelper(this); - FileUtils.initFileConfig(); + FileUtils.initFileConfig(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java new file mode 100644 index 0000000..52c10a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -0,0 +1,60 @@ +package com.casic.dcms.service; + +import android.app.Notification; +import android.app.Service; +import android.content.Intent; +import android.location.Location; +import android.os.IBinder; +import android.os.Message; +import android.util.Log; + +import androidx.annotation.Nullable; + +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; +import com.casic.dcms.utils.callback.ILocationListener; + +public class UploadLocationService extends Service { + + private static final String TAG = "UploadLocationService"; + + public UploadLocationService() { + + } + + @Override + public void onCreate() { + super.onCreate(); + Log.d(TAG, "onCreate: UploadLocationService"); + NotificationHelper notificationHelper = NotificationHelper.getInstance(this); + Notification notification = notificationHelper.createKeepAlive(); + startForeground(Integer.MAX_VALUE, notification); + + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + Message message = Message.obtain(); + message.what = Constant.UPLOAD_LOCATION; + message.obj = location; + MainActivity.sendMessage(message); + } + } + }); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + // 如果Service被终止,当资源允许情况下,重启service + return START_STICKY; + } + + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 225d5d1..8722cf6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -4,9 +4,9 @@ import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Build; import android.os.Handler; import android.os.Message; -import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; import android.widget.TextView; @@ -25,17 +25,16 @@ import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; import com.casic.dcms.mvp.view.IUploadPositionView; +import com.casic.dcms.service.UploadLocationService; import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; -import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.gyf.immersionbar.ImmersionBar; @@ -61,6 +60,7 @@ private List pageList; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private String imei = ""; private static WeakReferenceHandler weakReferenceHandler; @Override @@ -79,6 +79,7 @@ public void initData() { //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); + weakReferenceHandler = new WeakReferenceHandler(this); uploadPositionPresenter = new UploadPositionPresenterImpl(this); registerPresenter = new PushRegisterPresenterImpl(this); pageList = new ArrayList<>(); @@ -86,23 +87,13 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - weakReferenceHandler = new WeakReferenceHandler(this); - String imei = OtherUtils.obtainSimCardSerialNumber(this); - if (TextUtils.isEmpty(imei)) { - return; + imei = OtherUtils.obtainSimCardSerialNumber(this); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + startForegroundService(new Intent(this, UploadLocationService.class)); + } else { + startService(new Intent(this, UploadLocationService.class)); } - //根据条件上传位置信息 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - Log.d(TAG, "onLocationGet: 位置上报"); - uploadPositionPresenter.onReadyRetrofitRequest(imei, - String.valueOf(location.getLatitude()), - String.valueOf(location.getLongitude())); - } - } - }); } @Override @@ -162,6 +153,7 @@ /** * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + * 供{@link com.casic.dcms.service.UploadLocationService#onCreate()}页面调用 */ public static void sendMessage(Message msg) { weakReferenceHandler.sendMessage(msg); @@ -204,6 +196,12 @@ CaseDetailActivity.class); notificationHelper.push(1, notification); break; + case Constant.UPLOAD_LOCATION: + Log.d(TAG, "位置上报"); + Location location = (Location) msg.obj; + mainActivity.uploadPositionPresenter.onReadyRetrofitRequest(mainActivity.imei, + String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude())); + break; case Constant.LOGIN_OUT: Log.d(TAG, "退出登录"); //回到登录页 @@ -216,7 +214,6 @@ } - @Override public void obtainUploadPositionResult(ActionResultBean resultBean) { // Log.d(TAG, "obtainUploadPositionResult: " + new Gson().toJson(resultBean)); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index 4177798..f01637b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -83,8 +83,6 @@ progressDialog = new ProgressDialog(context); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(context.getResources().getDrawable(R.drawable.bg_progress)); - progressDialog.setCanceledOnTouchOutside(false); - progressDialog.setCancelable(false); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java deleted file mode 100644 index 1b2bb6c..0000000 --- a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author : Pengxh - * @time : 2021/4/14 10:55 - * @email : 290677893@qq.com - **/ -public class BroadcastManager { - private static final String TAG = "BroadcastManager"; - private Context mContext; - private static BroadcastManager broadcastManager; - private Map receiverMap; - - private BroadcastManager(Context context) { - this.mContext = context; - receiverMap = new HashMap<>(); - } - - /** - * 双重锁单例 - */ - public static BroadcastManager getInstance(Context context) { - if (broadcastManager == null) { - synchronized (BroadcastManager.class) { - if (broadcastManager == null) { - broadcastManager = new BroadcastManager(context); - } - } - } - return broadcastManager; - } - - /** - * 添加单个Action,广播的初始化 - */ - public void addAction(String action, BroadcastReceiver receiver) { - try { - IntentFilter filter = new IntentFilter(); - filter.addAction(action); - mContext.registerReceiver(receiver, filter); - receiverMap.put(action, receiver); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 添加多个Action,广播的初始化 - */ - public void addAction(String[] actions, BroadcastReceiver receiver) { - try { - IntentFilter filter = new IntentFilter(); - for (String action : actions) { - filter.addAction(action); - receiverMap.put(action, receiver); - } - mContext.registerReceiver(receiver, filter); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 发送广播 - * - * @param action 唯一码 - * @param msg 参数 - */ - public void sendBroadcast(String action, String msg) { - try { - Intent intent = new Intent(); - intent.setAction(action); - intent.putExtra("data", msg); - mContext.sendBroadcast(intent); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 销毁广播 - * - * @param actions action集合 - */ - public void destroy(String... actions) { - try { - if (receiverMap != null) { - for (String action : actions) { - BroadcastReceiver receiver = receiverMap.get(action); - if (receiver != null) { - mContext.unregisterReceiver(receiver); - } - } - } - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d34b289..5840276 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -53,6 +53,7 @@ public static final int CASE_HANDLE_OK = 17; public static final int CASE_OVERTIME_OK = 18; public static final int CASE_URGENT_OK = 19; + public static final int UPLOAD_LOCATION = 20; public static final double DEFAULT_LNG = 116.06639658728571; public static final double DEFAULT_LAT = 27.759547805536418; diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index d5fb6ba..51f9943 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -1,5 +1,6 @@ package com.casic.dcms.utils; +import android.content.Context; import android.os.Environment; import android.util.Log; @@ -11,26 +12,42 @@ public class FileUtils { private static final String TAG = "FileUtils"; - private static File parentDir; + private static File audioDir; + private static File imageDir; + private static File downloadDir; - public static void initFileConfig() { - parentDir = new File(Environment.getExternalStorageDirectory(), "Casic"); + public static void initFileConfig(Context context) { + File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { boolean mkdir = parentDir.mkdir(); if (mkdir) { Log.d(TAG, "initFileConfig: 创建Casic文件夹"); + audioDir = new File(parentDir, "AudioFile"); + if (!audioDir.exists()) { + boolean mkAudioDir = audioDir.mkdir(); + if (mkAudioDir) { + Log.d(TAG, "initFileConfig: 创建AudioFile文件夹"); + } + } + imageDir = new File(parentDir, "CompressImageFile"); + if (!imageDir.exists()) { + boolean mkImageDir = imageDir.mkdir(); + if (mkImageDir) { + Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); + } + } + downloadDir = new File(parentDir, "DownloadFile"); + if (!downloadDir.exists()) { + boolean mkDownDir = downloadDir.mkdir(); + if (mkDownDir) { + Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹"); + } + } } } } static File getOutputAudioFile() { - File audioDir = new File(parentDir, "AudioFile"); - if (!audioDir.exists()) { - boolean mkdir = audioDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建AudioFile文件夹"); - } - } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); File audioFile = new File(audioDir + File.separator + "AUD_" + timeStamp + ".m4a"); if (!audioFile.exists()) { @@ -44,25 +61,11 @@ } public static String getImageCompressPath() { - File imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkdir = imageDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); - } - } return imageDir.toString(); } //储存下载文件的目录 - public static String getDownloadFilePath() { - File downloadDir = new File(parentDir, "DownloadFile"); - if (!downloadDir.exists()) { - boolean mkdir = downloadDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹"); - } - } + static String getDownloadFilePath() { return downloadDir.toString(); } diff --git a/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java index cfe5bfc..0164146 100644 --- a/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java @@ -63,16 +63,15 @@ /** * 创建常驻状态栏通知 - * - * @param title 通知标题 - * @param message 通知内容 */ - public Notification createKeepAlive(String title, String message) { + public Notification createKeepAlive() { Notification.Builder builder = createBuilder(); - builder.setContentTitle(title) - .setContentText(message) + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.normal); + builder.setContentTitle("移动城管") + .setContentText("移动城管运行中") .setWhen(System.currentTimeMillis()) - .setSmallIcon(R.mipmap.app_logo); + .setSmallIcon(R.mipmap.app_logo) + .setLargeIcon(bitmap); Notification notification = builder.build(); notification.flags = Notification.FLAG_NO_CLEAR; return notification; diff --git a/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java b/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java new file mode 100644 index 0000000..4683201 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java @@ -0,0 +1,6 @@ +package com.casic.dcms.utils; + +import androidx.core.content.FileProvider; + +public class VersionUpgradeFileProvider extends FileProvider { +} diff --git a/app/src/main/res/layout/activity_case_detail.xml b/app/src/main/res/layout/activity_case_detail.xml index f2d36c4..90263ac 100644 --- a/app/src/main/res/layout/activity_case_detail.xml +++ b/app/src/main/res/layout/activity_case_detail.xml @@ -189,7 +189,6 @@ android:layout_alignParentEnd="true" android:layout_marginStart="25dp" android:layout_toEndOf="@id/v" - android:gravity="end" android:textSize="@dimen/textFontSize" /> diff --git a/app/src/main/res/layout/include_case_base_layout_read_only.xml b/app/src/main/res/layout/include_case_base_layout_read_only.xml index 39ca7aa..eb77a8c 100644 --- a/app/src/main/res/layout/include_case_base_layout_read_only.xml +++ b/app/src/main/res/layout/include_case_base_layout_read_only.xml @@ -136,6 +136,7 @@ diff --git a/app/build.gradle b/app/build.gradle index c649d4a..68f1bf0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ applicationId "com.casic.dcms" minSdkVersion 21 targetSdkVersion 30 - versionCode 2 - versionName "v2.1.0.0" + versionCode 11 + versionName "v1.0.0.3" ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a5cca2e..5792e20 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + @@ -44,7 +45,7 @@ tools:targetApi="m"> + android:excludeFromRecents="false"> @@ -86,7 +87,7 @@ - + + + + + + @@ -110,5 +122,7 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/base/BaseApplication.java b/app/src/main/java/com/casic/dcms/base/BaseApplication.java index 0a18374..8bb4989 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -23,7 +23,7 @@ QMUISwipeBackActivityManager.init(this); SaveKeyValues.initSharedPreferences(this); ToastHelper.initToastHelper(this); - FileUtils.initFileConfig(); + FileUtils.initFileConfig(this); ArcGISRuntimeEnvironment.setLicense(getString(R.string.arcgis_license));//去掉开发版水印 ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 diff --git a/app/src/main/java/com/casic/dcms/service/UploadLocationService.java b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java new file mode 100644 index 0000000..52c10a5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/service/UploadLocationService.java @@ -0,0 +1,60 @@ +package com.casic.dcms.service; + +import android.app.Notification; +import android.app.Service; +import android.content.Intent; +import android.location.Location; +import android.os.IBinder; +import android.os.Message; +import android.util.Log; + +import androidx.annotation.Nullable; + +import com.casic.dcms.ui.MainActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.NotificationHelper; +import com.casic.dcms.utils.callback.ILocationListener; + +public class UploadLocationService extends Service { + + private static final String TAG = "UploadLocationService"; + + public UploadLocationService() { + + } + + @Override + public void onCreate() { + super.onCreate(); + Log.d(TAG, "onCreate: UploadLocationService"); + NotificationHelper notificationHelper = NotificationHelper.getInstance(this); + Notification notification = notificationHelper.createKeepAlive(); + startForeground(Integer.MAX_VALUE, notification); + + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + Message message = Message.obtain(); + message.what = Constant.UPLOAD_LOCATION; + message.obj = location; + MainActivity.sendMessage(message); + } + } + }); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + // 如果Service被终止,当资源允许情况下,重启service + return START_STICKY; + } + + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return null; + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 225d5d1..8722cf6 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -4,9 +4,9 @@ import android.content.Context; import android.content.Intent; import android.location.Location; +import android.os.Build; import android.os.Handler; import android.os.Message; -import android.text.TextUtils; import android.util.Log; import android.view.MenuItem; import android.widget.TextView; @@ -25,17 +25,16 @@ import com.casic.dcms.mvp.presenter.UploadPositionPresenterImpl; import com.casic.dcms.mvp.view.IPushRegisterView; import com.casic.dcms.mvp.view.IUploadPositionView; +import com.casic.dcms.service.UploadLocationService; import com.casic.dcms.ui.fragment.HomePageFragment; import com.casic.dcms.ui.fragment.MinePageFragment; import com.casic.dcms.ui.fragment.NoticePageFragment; import com.casic.dcms.ui.fragment.PhonePageFragment; import com.casic.dcms.utils.Constant; -import com.casic.dcms.utils.LocationHelper; import com.casic.dcms.utils.NotificationHelper; import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; -import com.casic.dcms.utils.callback.ILocationListener; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.gyf.immersionbar.ImmersionBar; @@ -61,6 +60,7 @@ private List pageList; private UploadPositionPresenterImpl uploadPositionPresenter; private PushRegisterPresenterImpl registerPresenter; + private String imei = ""; private static WeakReferenceHandler weakReferenceHandler; @Override @@ -79,6 +79,7 @@ public void initData() { //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); + weakReferenceHandler = new WeakReferenceHandler(this); uploadPositionPresenter = new UploadPositionPresenterImpl(this); registerPresenter = new PushRegisterPresenterImpl(this); pageList = new ArrayList<>(); @@ -86,23 +87,13 @@ pageList.add(new PhonePageFragment()); pageList.add(new NoticePageFragment()); pageList.add(new MinePageFragment()); - weakReferenceHandler = new WeakReferenceHandler(this); - String imei = OtherUtils.obtainSimCardSerialNumber(this); - if (TextUtils.isEmpty(imei)) { - return; + imei = OtherUtils.obtainSimCardSerialNumber(this); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + startForegroundService(new Intent(this, UploadLocationService.class)); + } else { + startService(new Intent(this, UploadLocationService.class)); } - //根据条件上传位置信息 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - @Override - public void onLocationGet(Location location) { - if (location != null) { - Log.d(TAG, "onLocationGet: 位置上报"); - uploadPositionPresenter.onReadyRetrofitRequest(imei, - String.valueOf(location.getLatitude()), - String.valueOf(location.getLongitude())); - } - } - }); } @Override @@ -162,6 +153,7 @@ /** * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveClientId(Context, String)}页面调用 * 供{@link com.casic.dcms.service.GeTuiIntentService#onReceiveMessageData(Context, GTTransmitMessage)}页面调用 + * 供{@link com.casic.dcms.service.UploadLocationService#onCreate()}页面调用 */ public static void sendMessage(Message msg) { weakReferenceHandler.sendMessage(msg); @@ -204,6 +196,12 @@ CaseDetailActivity.class); notificationHelper.push(1, notification); break; + case Constant.UPLOAD_LOCATION: + Log.d(TAG, "位置上报"); + Location location = (Location) msg.obj; + mainActivity.uploadPositionPresenter.onReadyRetrofitRequest(mainActivity.imei, + String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude())); + break; case Constant.LOGIN_OUT: Log.d(TAG, "退出登录"); //回到登录页 @@ -216,7 +214,6 @@ } - @Override public void obtainUploadPositionResult(ActionResultBean resultBean) { // Log.d(TAG, "obtainUploadPositionResult: " + new Gson().toJson(resultBean)); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index 4177798..f01637b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -83,8 +83,6 @@ progressDialog = new ProgressDialog(context); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgressDrawable(context.getResources().getDrawable(R.drawable.bg_progress)); - progressDialog.setCanceledOnTouchOutside(false); - progressDialog.setCancelable(false); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java b/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java deleted file mode 100644 index 1b2bb6c..0000000 --- a/app/src/main/java/com/casic/dcms/utils/BroadcastManager.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.casic.dcms.utils; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author : Pengxh - * @time : 2021/4/14 10:55 - * @email : 290677893@qq.com - **/ -public class BroadcastManager { - private static final String TAG = "BroadcastManager"; - private Context mContext; - private static BroadcastManager broadcastManager; - private Map receiverMap; - - private BroadcastManager(Context context) { - this.mContext = context; - receiverMap = new HashMap<>(); - } - - /** - * 双重锁单例 - */ - public static BroadcastManager getInstance(Context context) { - if (broadcastManager == null) { - synchronized (BroadcastManager.class) { - if (broadcastManager == null) { - broadcastManager = new BroadcastManager(context); - } - } - } - return broadcastManager; - } - - /** - * 添加单个Action,广播的初始化 - */ - public void addAction(String action, BroadcastReceiver receiver) { - try { - IntentFilter filter = new IntentFilter(); - filter.addAction(action); - mContext.registerReceiver(receiver, filter); - receiverMap.put(action, receiver); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 添加多个Action,广播的初始化 - */ - public void addAction(String[] actions, BroadcastReceiver receiver) { - try { - IntentFilter filter = new IntentFilter(); - for (String action : actions) { - filter.addAction(action); - receiverMap.put(action, receiver); - } - mContext.registerReceiver(receiver, filter); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 发送广播 - * - * @param action 唯一码 - * @param msg 参数 - */ - public void sendBroadcast(String action, String msg) { - try { - Intent intent = new Intent(); - intent.setAction(action); - intent.putExtra("data", msg); - mContext.sendBroadcast(intent); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 销毁广播 - * - * @param actions action集合 - */ - public void destroy(String... actions) { - try { - if (receiverMap != null) { - for (String action : actions) { - BroadcastReceiver receiver = receiverMap.get(action); - if (receiver != null) { - mContext.unregisterReceiver(receiver); - } - } - } - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index d34b289..5840276 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -53,6 +53,7 @@ public static final int CASE_HANDLE_OK = 17; public static final int CASE_OVERTIME_OK = 18; public static final int CASE_URGENT_OK = 19; + public static final int UPLOAD_LOCATION = 20; public static final double DEFAULT_LNG = 116.06639658728571; public static final double DEFAULT_LAT = 27.759547805536418; diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java index d5fb6ba..51f9943 100644 --- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java @@ -1,5 +1,6 @@ package com.casic.dcms.utils; +import android.content.Context; import android.os.Environment; import android.util.Log; @@ -11,26 +12,42 @@ public class FileUtils { private static final String TAG = "FileUtils"; - private static File parentDir; + private static File audioDir; + private static File imageDir; + private static File downloadDir; - public static void initFileConfig() { - parentDir = new File(Environment.getExternalStorageDirectory(), "Casic"); + public static void initFileConfig(Context context) { + File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic"); if (!parentDir.exists()) { boolean mkdir = parentDir.mkdir(); if (mkdir) { Log.d(TAG, "initFileConfig: 创建Casic文件夹"); + audioDir = new File(parentDir, "AudioFile"); + if (!audioDir.exists()) { + boolean mkAudioDir = audioDir.mkdir(); + if (mkAudioDir) { + Log.d(TAG, "initFileConfig: 创建AudioFile文件夹"); + } + } + imageDir = new File(parentDir, "CompressImageFile"); + if (!imageDir.exists()) { + boolean mkImageDir = imageDir.mkdir(); + if (mkImageDir) { + Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); + } + } + downloadDir = new File(parentDir, "DownloadFile"); + if (!downloadDir.exists()) { + boolean mkDownDir = downloadDir.mkdir(); + if (mkDownDir) { + Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹"); + } + } } } } static File getOutputAudioFile() { - File audioDir = new File(parentDir, "AudioFile"); - if (!audioDir.exists()) { - boolean mkdir = audioDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建AudioFile文件夹"); - } - } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date()); File audioFile = new File(audioDir + File.separator + "AUD_" + timeStamp + ".m4a"); if (!audioFile.exists()) { @@ -44,25 +61,11 @@ } public static String getImageCompressPath() { - File imageDir = new File(parentDir, "CompressImageFile"); - if (!imageDir.exists()) { - boolean mkdir = imageDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建CompressImageFile文件夹"); - } - } return imageDir.toString(); } //储存下载文件的目录 - public static String getDownloadFilePath() { - File downloadDir = new File(parentDir, "DownloadFile"); - if (!downloadDir.exists()) { - boolean mkdir = downloadDir.mkdir(); - if (mkdir) { - Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹"); - } - } + static String getDownloadFilePath() { return downloadDir.toString(); } diff --git a/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java index cfe5bfc..0164146 100644 --- a/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/NotificationHelper.java @@ -63,16 +63,15 @@ /** * 创建常驻状态栏通知 - * - * @param title 通知标题 - * @param message 通知内容 */ - public Notification createKeepAlive(String title, String message) { + public Notification createKeepAlive() { Notification.Builder builder = createBuilder(); - builder.setContentTitle(title) - .setContentText(message) + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.normal); + builder.setContentTitle("移动城管") + .setContentText("移动城管运行中") .setWhen(System.currentTimeMillis()) - .setSmallIcon(R.mipmap.app_logo); + .setSmallIcon(R.mipmap.app_logo) + .setLargeIcon(bitmap); Notification notification = builder.build(); notification.flags = Notification.FLAG_NO_CLEAR; return notification; diff --git a/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java b/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java new file mode 100644 index 0000000..4683201 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java @@ -0,0 +1,6 @@ +package com.casic.dcms.utils; + +import androidx.core.content.FileProvider; + +public class VersionUpgradeFileProvider extends FileProvider { +} diff --git a/app/src/main/res/layout/activity_case_detail.xml b/app/src/main/res/layout/activity_case_detail.xml index f2d36c4..90263ac 100644 --- a/app/src/main/res/layout/activity_case_detail.xml +++ b/app/src/main/res/layout/activity_case_detail.xml @@ -189,7 +189,6 @@ android:layout_alignParentEnd="true" android:layout_marginStart="25dp" android:layout_toEndOf="@id/v" - android:gravity="end" android:textSize="@dimen/textFontSize" /> diff --git a/app/src/main/res/layout/include_case_base_layout_read_only.xml b/app/src/main/res/layout/include_case_base_layout_read_only.xml index 39ca7aa..eb77a8c 100644 --- a/app/src/main/res/layout/include_case_base_layout_read_only.xml +++ b/app/src/main/res/layout/include_case_base_layout_read_only.xml @@ -136,6 +136,7 @@ diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml index 9d7b44f..023b133 100644 --- a/app/src/main/res/xml/file_paths.xml +++ b/app/src/main/res/xml/file_paths.xml @@ -1,5 +1,9 @@ + +