diff --git a/app/build.gradle b/app/build.gradle index 33265ed..5bc8157 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,6 @@ versionCode 1 versionName "v1.1.0.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } manifestPlaceholders = [ @@ -41,15 +39,10 @@ } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - //Google官方授权框架 implementation 'pub.devrel:easypermissions:1.3.0' //腾讯Android UI框架 @@ -82,8 +75,10 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 implementation 'com.github.huangyanbin:SmartTable:1.7.1' - implementation 'com.getui:gtsdk:3.1.4.0' //个推SDK - implementation 'com.getui:gtc:3.1.0.0' //个推核心组件 + implementation 'com.getui:gtsdk:3.1.4.0' + //个推SDK + implementation 'com.getui:gtc:3.1.0.0' + //个推核心组件 //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' //沉浸式状态栏。基础依赖包,必须要依赖 @@ -94,4 +89,6 @@ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' //视频播放器 implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' + //ArcGIS + implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' } diff --git a/app/build.gradle b/app/build.gradle index 33265ed..5bc8157 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,6 @@ versionCode 1 versionName "v1.1.0.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } manifestPlaceholders = [ @@ -41,15 +39,10 @@ } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - //Google官方授权框架 implementation 'pub.devrel:easypermissions:1.3.0' //腾讯Android UI框架 @@ -82,8 +75,10 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 implementation 'com.github.huangyanbin:SmartTable:1.7.1' - implementation 'com.getui:gtsdk:3.1.4.0' //个推SDK - implementation 'com.getui:gtc:3.1.0.0' //个推核心组件 + implementation 'com.getui:gtsdk:3.1.4.0' + //个推SDK + implementation 'com.getui:gtc:3.1.0.0' + //个推核心组件 //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' //沉浸式状态栏。基础依赖包,必须要依赖 @@ -94,4 +89,6 @@ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' //视频播放器 implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' + //ArcGIS + implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' } diff --git a/app/dcms_key b/app/dcms_key new file mode 100644 index 0000000..bcb2319 --- /dev/null +++ b/app/dcms_key Binary files differ diff --git a/app/build.gradle b/app/build.gradle index 33265ed..5bc8157 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,6 @@ versionCode 1 versionName "v1.1.0.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } manifestPlaceholders = [ @@ -41,15 +39,10 @@ } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - //Google官方授权框架 implementation 'pub.devrel:easypermissions:1.3.0' //腾讯Android UI框架 @@ -82,8 +75,10 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 implementation 'com.github.huangyanbin:SmartTable:1.7.1' - implementation 'com.getui:gtsdk:3.1.4.0' //个推SDK - implementation 'com.getui:gtc:3.1.0.0' //个推核心组件 + implementation 'com.getui:gtsdk:3.1.4.0' + //个推SDK + implementation 'com.getui:gtc:3.1.0.0' + //个推核心组件 //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' //沉浸式状态栏。基础依赖包,必须要依赖 @@ -94,4 +89,6 @@ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' //视频播放器 implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' + //ArcGIS + implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' } diff --git a/app/dcms_key b/app/dcms_key new file mode 100644 index 0000000..bcb2319 --- /dev/null +++ b/app/dcms_key Binary files differ diff --git a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java deleted file mode 100644 index d8faada..0000000 --- a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.dcms; - -import android.content.Context; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.casic.dcms", appContext.getPackageName()); - } -} diff --git a/app/build.gradle b/app/build.gradle index 33265ed..5bc8157 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,6 @@ versionCode 1 versionName "v1.1.0.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } manifestPlaceholders = [ @@ -41,15 +39,10 @@ } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - //Google官方授权框架 implementation 'pub.devrel:easypermissions:1.3.0' //腾讯Android UI框架 @@ -82,8 +75,10 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 implementation 'com.github.huangyanbin:SmartTable:1.7.1' - implementation 'com.getui:gtsdk:3.1.4.0' //个推SDK - implementation 'com.getui:gtc:3.1.0.0' //个推核心组件 + implementation 'com.getui:gtsdk:3.1.4.0' + //个推SDK + implementation 'com.getui:gtc:3.1.0.0' + //个推核心组件 //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' //沉浸式状态栏。基础依赖包,必须要依赖 @@ -94,4 +89,6 @@ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' //视频播放器 implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' + //ArcGIS + implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' } diff --git a/app/dcms_key b/app/dcms_key new file mode 100644 index 0000000..bcb2319 --- /dev/null +++ b/app/dcms_key Binary files differ diff --git a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java deleted file mode 100644 index d8faada..0000000 --- a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.dcms; - -import android.content.Context; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.casic.dcms", appContext.getPackageName()); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e7f351..bc9187f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -14,6 +15,13 @@ + + + + + + Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.casic.dcms", appContext.getPackageName()); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e7f351..bc9187f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -14,6 +15,13 @@ + + + + + + { private Context context; - private List mediaList = new ArrayList<>(); + private List mediaList = new ArrayList<>(); public ImageRecycleViewAdapter(Context mContext) { this.context = mContext; } - public void setMediaList(@Nullable List selectList) { + public void setMediaList(@Nullable List imageUrlList) { mediaList.clear(); - if (selectList != null) { - mediaList.addAll(selectList); + if (imageUrlList != null) { + mediaList.addAll(imageUrlList); } notifyDataSetChanged(); } @@ -50,7 +47,7 @@ @Override public int getItemCount() { - return Math.min(mediaList.size(), 3); + return mediaList.size(); } @Override @@ -60,21 +57,19 @@ @Override public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { - Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - itemClickListener.onClick(position); - } - }); - holder.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } + Glide.with(context).load(mediaList.get(position)).into(holder.imageView); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); +// holder.deleteView.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// clickListener.onClick(position); +// } +// }); } static class ItemViewHolder extends RecyclerView.ViewHolder { diff --git a/app/build.gradle b/app/build.gradle index 33265ed..5bc8157 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,6 @@ versionCode 1 versionName "v1.1.0.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } manifestPlaceholders = [ @@ -41,15 +39,10 @@ } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - //Google官方授权框架 implementation 'pub.devrel:easypermissions:1.3.0' //腾讯Android UI框架 @@ -82,8 +75,10 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 implementation 'com.github.huangyanbin:SmartTable:1.7.1' - implementation 'com.getui:gtsdk:3.1.4.0' //个推SDK - implementation 'com.getui:gtc:3.1.0.0' //个推核心组件 + implementation 'com.getui:gtsdk:3.1.4.0' + //个推SDK + implementation 'com.getui:gtc:3.1.0.0' + //个推核心组件 //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' //沉浸式状态栏。基础依赖包,必须要依赖 @@ -94,4 +89,6 @@ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' //视频播放器 implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' + //ArcGIS + implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' } diff --git a/app/dcms_key b/app/dcms_key new file mode 100644 index 0000000..bcb2319 --- /dev/null +++ b/app/dcms_key Binary files differ diff --git a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java deleted file mode 100644 index d8faada..0000000 --- a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.dcms; - -import android.content.Context; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.casic.dcms", appContext.getPackageName()); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e7f351..bc9187f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -14,6 +15,13 @@ + + + + + + { private Context context; - private List mediaList = new ArrayList<>(); + private List mediaList = new ArrayList<>(); public ImageRecycleViewAdapter(Context mContext) { this.context = mContext; } - public void setMediaList(@Nullable List selectList) { + public void setMediaList(@Nullable List imageUrlList) { mediaList.clear(); - if (selectList != null) { - mediaList.addAll(selectList); + if (imageUrlList != null) { + mediaList.addAll(imageUrlList); } notifyDataSetChanged(); } @@ -50,7 +47,7 @@ @Override public int getItemCount() { - return Math.min(mediaList.size(), 3); + return mediaList.size(); } @Override @@ -60,21 +57,19 @@ @Override public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { - Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - itemClickListener.onClick(position); - } - }); - holder.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } + Glide.with(context).load(mediaList.get(position)).into(holder.imageView); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); +// holder.deleteView.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// clickListener.onClick(position); +// } +// }); } static class ItemViewHolder extends RecyclerView.ViewHolder { 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 37f98aa..ce017e5 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -8,6 +8,7 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; +import com.esri.arcgisruntime.ArcGISRuntimeEnvironment; import com.mapbox.mapboxsdk.Mapbox; import com.qmuiteam.qmui.arch.QMUISwipeBackActivityManager; @@ -24,6 +25,8 @@ ToastHelper.initToastHelper(this); //MapBox地图注册 Mapbox.getInstance(this, getString(R.string.mapbox_access_token)); + ArcGISRuntimeEnvironment.setLicense("runtimelite,1000,rud4449636536,none,NKMFA0PL4S0DRJE15166");//去掉开发版水印 + ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); // com.igexin.sdk.PushManager.getInstance().setDebugLogger(this, new IUserLoggerInterface() { diff --git a/app/build.gradle b/app/build.gradle index 33265ed..5bc8157 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,6 @@ versionCode 1 versionName "v1.1.0.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } manifestPlaceholders = [ @@ -41,15 +39,10 @@ } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - //Google官方授权框架 implementation 'pub.devrel:easypermissions:1.3.0' //腾讯Android UI框架 @@ -82,8 +75,10 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 implementation 'com.github.huangyanbin:SmartTable:1.7.1' - implementation 'com.getui:gtsdk:3.1.4.0' //个推SDK - implementation 'com.getui:gtc:3.1.0.0' //个推核心组件 + implementation 'com.getui:gtsdk:3.1.4.0' + //个推SDK + implementation 'com.getui:gtc:3.1.0.0' + //个推核心组件 //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' //沉浸式状态栏。基础依赖包,必须要依赖 @@ -94,4 +89,6 @@ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' //视频播放器 implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' + //ArcGIS + implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' } diff --git a/app/dcms_key b/app/dcms_key new file mode 100644 index 0000000..bcb2319 --- /dev/null +++ b/app/dcms_key Binary files differ diff --git a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java deleted file mode 100644 index d8faada..0000000 --- a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.dcms; - -import android.content.Context; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.casic.dcms", appContext.getPackageName()); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e7f351..bc9187f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -14,6 +15,13 @@ + + + + + + { private Context context; - private List mediaList = new ArrayList<>(); + private List mediaList = new ArrayList<>(); public ImageRecycleViewAdapter(Context mContext) { this.context = mContext; } - public void setMediaList(@Nullable List selectList) { + public void setMediaList(@Nullable List imageUrlList) { mediaList.clear(); - if (selectList != null) { - mediaList.addAll(selectList); + if (imageUrlList != null) { + mediaList.addAll(imageUrlList); } notifyDataSetChanged(); } @@ -50,7 +47,7 @@ @Override public int getItemCount() { - return Math.min(mediaList.size(), 3); + return mediaList.size(); } @Override @@ -60,21 +57,19 @@ @Override public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { - Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - itemClickListener.onClick(position); - } - }); - holder.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } + Glide.with(context).load(mediaList.get(position)).into(holder.imageView); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); +// holder.deleteView.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// clickListener.onClick(position); +// } +// }); } static class ItemViewHolder extends RecyclerView.ViewHolder { 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 37f98aa..ce017e5 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -8,6 +8,7 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; +import com.esri.arcgisruntime.ArcGISRuntimeEnvironment; import com.mapbox.mapboxsdk.Mapbox; import com.qmuiteam.qmui.arch.QMUISwipeBackActivityManager; @@ -24,6 +25,8 @@ ToastHelper.initToastHelper(this); //MapBox地图注册 Mapbox.getInstance(this, getString(R.string.mapbox_access_token)); + ArcGISRuntimeEnvironment.setLicense("runtimelite,1000,rud4449636536,none,NKMFA0PL4S0DRJE15166");//去掉开发版水印 + ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); // com.igexin.sdk.PushManager.getInstance().setDebugLogger(this, new IUserLoggerInterface() { diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java new file mode 100644 index 0000000..dfe881b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -0,0 +1,173 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.location.Location; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; + +import butterknife.BindView; +import butterknife.OnClick; + +public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private Context context = this; + @BindView(R.id.gisTopLayout) + QMUITopBarLayout gisTopLayout; + @BindView(R.id.mapView) + MapView mapView; + @BindView(R.id.expandMapView) + ImageView expandMapView; + @BindView(R.id.minusMapView) + ImageView minusMapView; + + @Override + public int initLayoutView() { + return R.layout.activity_gis; + } + + @Override + protected void setupTopBarLayout() { + gisTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + gisTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + gisTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + ArcGISMap map = new ArcGISMap(); + ArcGISTiledLayer arcGISTiledLayer = new ArcGISTiledLayer(Constant.BASE_SERVICE_URL); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(); + basemap.getBaseLayers().add(arcGISTiledLayer); + //设置地图底图 + map.setBasemap(basemap); + FeatureLayer featureLayer = new FeatureLayer(new ServiceFeatureTable(Constant.COMPONENT_SERVICE_URL)); + + //设置地图相关属性 + map.getOperationalLayers().add(featureLayer); + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setMap(map); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + Point clickPoint = mapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY()))); + addMarker(clickPoint); + + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return super.onSingleTapConfirmed(e); + } + }); + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + if (overlayGraphics.size() != 0) { + overlayGraphics.clear(); + } + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + + } + } + }); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/build.gradle b/app/build.gradle index 33265ed..5bc8157 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,6 @@ versionCode 1 versionName "v1.1.0.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } manifestPlaceholders = [ @@ -41,15 +39,10 @@ } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - //Google官方授权框架 implementation 'pub.devrel:easypermissions:1.3.0' //腾讯Android UI框架 @@ -82,8 +75,10 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 implementation 'com.github.huangyanbin:SmartTable:1.7.1' - implementation 'com.getui:gtsdk:3.1.4.0' //个推SDK - implementation 'com.getui:gtc:3.1.0.0' //个推核心组件 + implementation 'com.getui:gtsdk:3.1.4.0' + //个推SDK + implementation 'com.getui:gtc:3.1.0.0' + //个推核心组件 //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' //沉浸式状态栏。基础依赖包,必须要依赖 @@ -94,4 +89,6 @@ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' //视频播放器 implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' + //ArcGIS + implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' } diff --git a/app/dcms_key b/app/dcms_key new file mode 100644 index 0000000..bcb2319 --- /dev/null +++ b/app/dcms_key Binary files differ diff --git a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java deleted file mode 100644 index d8faada..0000000 --- a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.dcms; - -import android.content.Context; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.casic.dcms", appContext.getPackageName()); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e7f351..bc9187f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -14,6 +15,13 @@ + + + + + + { private Context context; - private List mediaList = new ArrayList<>(); + private List mediaList = new ArrayList<>(); public ImageRecycleViewAdapter(Context mContext) { this.context = mContext; } - public void setMediaList(@Nullable List selectList) { + public void setMediaList(@Nullable List imageUrlList) { mediaList.clear(); - if (selectList != null) { - mediaList.addAll(selectList); + if (imageUrlList != null) { + mediaList.addAll(imageUrlList); } notifyDataSetChanged(); } @@ -50,7 +47,7 @@ @Override public int getItemCount() { - return Math.min(mediaList.size(), 3); + return mediaList.size(); } @Override @@ -60,21 +57,19 @@ @Override public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { - Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - itemClickListener.onClick(position); - } - }); - holder.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } + Glide.with(context).load(mediaList.get(position)).into(holder.imageView); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); +// holder.deleteView.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// clickListener.onClick(position); +// } +// }); } static class ItemViewHolder extends RecyclerView.ViewHolder { 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 37f98aa..ce017e5 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -8,6 +8,7 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; +import com.esri.arcgisruntime.ArcGISRuntimeEnvironment; import com.mapbox.mapboxsdk.Mapbox; import com.qmuiteam.qmui.arch.QMUISwipeBackActivityManager; @@ -24,6 +25,8 @@ ToastHelper.initToastHelper(this); //MapBox地图注册 Mapbox.getInstance(this, getString(R.string.mapbox_access_token)); + ArcGISRuntimeEnvironment.setLicense("runtimelite,1000,rud4449636536,none,NKMFA0PL4S0DRJE15166");//去掉开发版水印 + ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); // com.igexin.sdk.PushManager.getInstance().setDebugLogger(this, new IUserLoggerInterface() { diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java new file mode 100644 index 0000000..dfe881b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -0,0 +1,173 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.location.Location; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; + +import butterknife.BindView; +import butterknife.OnClick; + +public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private Context context = this; + @BindView(R.id.gisTopLayout) + QMUITopBarLayout gisTopLayout; + @BindView(R.id.mapView) + MapView mapView; + @BindView(R.id.expandMapView) + ImageView expandMapView; + @BindView(R.id.minusMapView) + ImageView minusMapView; + + @Override + public int initLayoutView() { + return R.layout.activity_gis; + } + + @Override + protected void setupTopBarLayout() { + gisTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + gisTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + gisTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + ArcGISMap map = new ArcGISMap(); + ArcGISTiledLayer arcGISTiledLayer = new ArcGISTiledLayer(Constant.BASE_SERVICE_URL); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(); + basemap.getBaseLayers().add(arcGISTiledLayer); + //设置地图底图 + map.setBasemap(basemap); + FeatureLayer featureLayer = new FeatureLayer(new ServiceFeatureTable(Constant.COMPONENT_SERVICE_URL)); + + //设置地图相关属性 + map.getOperationalLayers().add(featureLayer); + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setMap(map); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + Point clickPoint = mapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY()))); + addMarker(clickPoint); + + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return super.onSingleTapConfirmed(e); + } + }); + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + if (overlayGraphics.size() != 0) { + overlayGraphics.clear(); + } + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + + } + } + }); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 97682e3..4826307 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -39,7 +39,6 @@ import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -54,7 +53,6 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -65,6 +63,7 @@ public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + private static final String TAG = "QuicklyActivity"; private Context context = this; @BindView(R.id.leftBackView) @@ -101,7 +100,6 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 private String eorc; @@ -140,24 +138,8 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); imageAdapter = new ImageRecycleViewAdapter(this); - selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); selectedResultView.setAdapter(imageAdapter); - //九宫格点击事件 - imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { - @Override - public void onClick(int position) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageAdapter.setMediaList(selectList); - } - }); } @Override @@ -165,7 +147,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -260,17 +242,8 @@ .create().show(); break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } +// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -284,11 +257,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -300,7 +272,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -310,22 +281,32 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - imageAdapter.setMediaList(selectList); + List selectList = PictureSelector.obtainMultipleResult(data); + if (selectList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: - selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); - imageAdapter.setMediaList(selectList); + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); +// String pointJson = data.getStringExtra("pointJson"); +// Type type = new TypeToken() { +// }.getType(); +// LatLng latLng = gson.fromJson(pointJson, type); +// updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); break; default: break; @@ -333,6 +314,24 @@ } } + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + private void updateLocation(LatLng point) { double longitude = point.getLongitude(); longitudeView.setText(String.valueOf(longitude)); @@ -401,6 +400,7 @@ public void obtainUploadResult(UploadImageResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); /** * 系统路径static拼接图片返回路径 * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg @@ -409,10 +409,26 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - PictureFileUtils.deleteAllCacheDirFile(this); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); +// //删除按钮点击事件 +// imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { +// @Override +// public void onClick(int position) { +// selectList.remove(position); +// imageAdapter.setMediaList(selectList); +// } +// }); } } @@ -436,7 +452,7 @@ return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", "361024", "361024100", description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/build.gradle b/app/build.gradle index 33265ed..5bc8157 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,6 @@ versionCode 1 versionName "v1.1.0.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } manifestPlaceholders = [ @@ -41,15 +39,10 @@ } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - //Google官方授权框架 implementation 'pub.devrel:easypermissions:1.3.0' //腾讯Android UI框架 @@ -82,8 +75,10 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 implementation 'com.github.huangyanbin:SmartTable:1.7.1' - implementation 'com.getui:gtsdk:3.1.4.0' //个推SDK - implementation 'com.getui:gtc:3.1.0.0' //个推核心组件 + implementation 'com.getui:gtsdk:3.1.4.0' + //个推SDK + implementation 'com.getui:gtc:3.1.0.0' + //个推核心组件 //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' //沉浸式状态栏。基础依赖包,必须要依赖 @@ -94,4 +89,6 @@ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' //视频播放器 implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' + //ArcGIS + implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' } diff --git a/app/dcms_key b/app/dcms_key new file mode 100644 index 0000000..bcb2319 --- /dev/null +++ b/app/dcms_key Binary files differ diff --git a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java deleted file mode 100644 index d8faada..0000000 --- a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.dcms; - -import android.content.Context; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.casic.dcms", appContext.getPackageName()); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e7f351..bc9187f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -14,6 +15,13 @@ + + + + + + { private Context context; - private List mediaList = new ArrayList<>(); + private List mediaList = new ArrayList<>(); public ImageRecycleViewAdapter(Context mContext) { this.context = mContext; } - public void setMediaList(@Nullable List selectList) { + public void setMediaList(@Nullable List imageUrlList) { mediaList.clear(); - if (selectList != null) { - mediaList.addAll(selectList); + if (imageUrlList != null) { + mediaList.addAll(imageUrlList); } notifyDataSetChanged(); } @@ -50,7 +47,7 @@ @Override public int getItemCount() { - return Math.min(mediaList.size(), 3); + return mediaList.size(); } @Override @@ -60,21 +57,19 @@ @Override public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { - Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - itemClickListener.onClick(position); - } - }); - holder.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } + Glide.with(context).load(mediaList.get(position)).into(holder.imageView); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); +// holder.deleteView.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// clickListener.onClick(position); +// } +// }); } static class ItemViewHolder extends RecyclerView.ViewHolder { 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 37f98aa..ce017e5 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -8,6 +8,7 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; +import com.esri.arcgisruntime.ArcGISRuntimeEnvironment; import com.mapbox.mapboxsdk.Mapbox; import com.qmuiteam.qmui.arch.QMUISwipeBackActivityManager; @@ -24,6 +25,8 @@ ToastHelper.initToastHelper(this); //MapBox地图注册 Mapbox.getInstance(this, getString(R.string.mapbox_access_token)); + ArcGISRuntimeEnvironment.setLicense("runtimelite,1000,rud4449636536,none,NKMFA0PL4S0DRJE15166");//去掉开发版水印 + ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); // com.igexin.sdk.PushManager.getInstance().setDebugLogger(this, new IUserLoggerInterface() { diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java new file mode 100644 index 0000000..dfe881b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -0,0 +1,173 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.location.Location; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; + +import butterknife.BindView; +import butterknife.OnClick; + +public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private Context context = this; + @BindView(R.id.gisTopLayout) + QMUITopBarLayout gisTopLayout; + @BindView(R.id.mapView) + MapView mapView; + @BindView(R.id.expandMapView) + ImageView expandMapView; + @BindView(R.id.minusMapView) + ImageView minusMapView; + + @Override + public int initLayoutView() { + return R.layout.activity_gis; + } + + @Override + protected void setupTopBarLayout() { + gisTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + gisTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + gisTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + ArcGISMap map = new ArcGISMap(); + ArcGISTiledLayer arcGISTiledLayer = new ArcGISTiledLayer(Constant.BASE_SERVICE_URL); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(); + basemap.getBaseLayers().add(arcGISTiledLayer); + //设置地图底图 + map.setBasemap(basemap); + FeatureLayer featureLayer = new FeatureLayer(new ServiceFeatureTable(Constant.COMPONENT_SERVICE_URL)); + + //设置地图相关属性 + map.getOperationalLayers().add(featureLayer); + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setMap(map); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + Point clickPoint = mapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY()))); + addMarker(clickPoint); + + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return super.onSingleTapConfirmed(e); + } + }); + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + if (overlayGraphics.size() != 0) { + overlayGraphics.clear(); + } + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + + } + } + }); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 97682e3..4826307 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -39,7 +39,6 @@ import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -54,7 +53,6 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -65,6 +63,7 @@ public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + private static final String TAG = "QuicklyActivity"; private Context context = this; @BindView(R.id.leftBackView) @@ -101,7 +100,6 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 private String eorc; @@ -140,24 +138,8 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); imageAdapter = new ImageRecycleViewAdapter(this); - selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); selectedResultView.setAdapter(imageAdapter); - //九宫格点击事件 - imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { - @Override - public void onClick(int position) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageAdapter.setMediaList(selectList); - } - }); } @Override @@ -165,7 +147,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -260,17 +242,8 @@ .create().show(); break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } +// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -284,11 +257,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -300,7 +272,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -310,22 +281,32 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - imageAdapter.setMediaList(selectList); + List selectList = PictureSelector.obtainMultipleResult(data); + if (selectList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: - selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); - imageAdapter.setMediaList(selectList); + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); +// String pointJson = data.getStringExtra("pointJson"); +// Type type = new TypeToken() { +// }.getType(); +// LatLng latLng = gson.fromJson(pointJson, type); +// updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); break; default: break; @@ -333,6 +314,24 @@ } } + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + private void updateLocation(LatLng point) { double longitude = point.getLongitude(); longitudeView.setText(String.valueOf(longitude)); @@ -401,6 +400,7 @@ public void obtainUploadResult(UploadImageResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); /** * 系统路径static拼接图片返回路径 * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg @@ -409,10 +409,26 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - PictureFileUtils.deleteAllCacheDirFile(this); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); +// //删除按钮点击事件 +// imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { +// @Override +// public void onClick(int position) { +// selectList.remove(position); +// imageAdapter.setMediaList(selectList); +// } +// }); } } @@ -436,7 +452,7 @@ return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", "361024", "361024100", description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java index d4ec0fe..028190f 100644 --- a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java @@ -64,9 +64,9 @@ @Override protected void setupTopBarLayout() { - mapTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.black)); - mapTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - mapTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + mapTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + mapTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + mapTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -169,7 +169,6 @@ finish(); } }).create().show(); - return true; } }); @@ -200,7 +199,16 @@ } break; case R.id.removeToLocalView: - position = builder.zoom(15).build(); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); + CameraPosition position = builder.target(latLng).zoom(15).build(); + map.animateCamera(CameraUpdateFactory.newCameraPosition(position), 2000); + } + } + }); break; default: break; diff --git a/app/build.gradle b/app/build.gradle index 33265ed..5bc8157 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,6 @@ versionCode 1 versionName "v1.1.0.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } manifestPlaceholders = [ @@ -41,15 +39,10 @@ } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - //Google官方授权框架 implementation 'pub.devrel:easypermissions:1.3.0' //腾讯Android UI框架 @@ -82,8 +75,10 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 implementation 'com.github.huangyanbin:SmartTable:1.7.1' - implementation 'com.getui:gtsdk:3.1.4.0' //个推SDK - implementation 'com.getui:gtc:3.1.0.0' //个推核心组件 + implementation 'com.getui:gtsdk:3.1.4.0' + //个推SDK + implementation 'com.getui:gtc:3.1.0.0' + //个推核心组件 //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' //沉浸式状态栏。基础依赖包,必须要依赖 @@ -94,4 +89,6 @@ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' //视频播放器 implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' + //ArcGIS + implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' } diff --git a/app/dcms_key b/app/dcms_key new file mode 100644 index 0000000..bcb2319 --- /dev/null +++ b/app/dcms_key Binary files differ diff --git a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java deleted file mode 100644 index d8faada..0000000 --- a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.dcms; - -import android.content.Context; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.casic.dcms", appContext.getPackageName()); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e7f351..bc9187f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -14,6 +15,13 @@ + + + + + + { private Context context; - private List mediaList = new ArrayList<>(); + private List mediaList = new ArrayList<>(); public ImageRecycleViewAdapter(Context mContext) { this.context = mContext; } - public void setMediaList(@Nullable List selectList) { + public void setMediaList(@Nullable List imageUrlList) { mediaList.clear(); - if (selectList != null) { - mediaList.addAll(selectList); + if (imageUrlList != null) { + mediaList.addAll(imageUrlList); } notifyDataSetChanged(); } @@ -50,7 +47,7 @@ @Override public int getItemCount() { - return Math.min(mediaList.size(), 3); + return mediaList.size(); } @Override @@ -60,21 +57,19 @@ @Override public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { - Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - itemClickListener.onClick(position); - } - }); - holder.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } + Glide.with(context).load(mediaList.get(position)).into(holder.imageView); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); +// holder.deleteView.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// clickListener.onClick(position); +// } +// }); } static class ItemViewHolder extends RecyclerView.ViewHolder { 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 37f98aa..ce017e5 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -8,6 +8,7 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; +import com.esri.arcgisruntime.ArcGISRuntimeEnvironment; import com.mapbox.mapboxsdk.Mapbox; import com.qmuiteam.qmui.arch.QMUISwipeBackActivityManager; @@ -24,6 +25,8 @@ ToastHelper.initToastHelper(this); //MapBox地图注册 Mapbox.getInstance(this, getString(R.string.mapbox_access_token)); + ArcGISRuntimeEnvironment.setLicense("runtimelite,1000,rud4449636536,none,NKMFA0PL4S0DRJE15166");//去掉开发版水印 + ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); // com.igexin.sdk.PushManager.getInstance().setDebugLogger(this, new IUserLoggerInterface() { diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java new file mode 100644 index 0000000..dfe881b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -0,0 +1,173 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.location.Location; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; + +import butterknife.BindView; +import butterknife.OnClick; + +public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private Context context = this; + @BindView(R.id.gisTopLayout) + QMUITopBarLayout gisTopLayout; + @BindView(R.id.mapView) + MapView mapView; + @BindView(R.id.expandMapView) + ImageView expandMapView; + @BindView(R.id.minusMapView) + ImageView minusMapView; + + @Override + public int initLayoutView() { + return R.layout.activity_gis; + } + + @Override + protected void setupTopBarLayout() { + gisTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + gisTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + gisTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + ArcGISMap map = new ArcGISMap(); + ArcGISTiledLayer arcGISTiledLayer = new ArcGISTiledLayer(Constant.BASE_SERVICE_URL); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(); + basemap.getBaseLayers().add(arcGISTiledLayer); + //设置地图底图 + map.setBasemap(basemap); + FeatureLayer featureLayer = new FeatureLayer(new ServiceFeatureTable(Constant.COMPONENT_SERVICE_URL)); + + //设置地图相关属性 + map.getOperationalLayers().add(featureLayer); + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setMap(map); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + Point clickPoint = mapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY()))); + addMarker(clickPoint); + + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return super.onSingleTapConfirmed(e); + } + }); + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + if (overlayGraphics.size() != 0) { + overlayGraphics.clear(); + } + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + + } + } + }); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 97682e3..4826307 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -39,7 +39,6 @@ import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -54,7 +53,6 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -65,6 +63,7 @@ public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + private static final String TAG = "QuicklyActivity"; private Context context = this; @BindView(R.id.leftBackView) @@ -101,7 +100,6 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 private String eorc; @@ -140,24 +138,8 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); imageAdapter = new ImageRecycleViewAdapter(this); - selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); selectedResultView.setAdapter(imageAdapter); - //九宫格点击事件 - imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { - @Override - public void onClick(int position) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageAdapter.setMediaList(selectList); - } - }); } @Override @@ -165,7 +147,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -260,17 +242,8 @@ .create().show(); break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } +// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -284,11 +257,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -300,7 +272,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -310,22 +281,32 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - imageAdapter.setMediaList(selectList); + List selectList = PictureSelector.obtainMultipleResult(data); + if (selectList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: - selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); - imageAdapter.setMediaList(selectList); + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); +// String pointJson = data.getStringExtra("pointJson"); +// Type type = new TypeToken() { +// }.getType(); +// LatLng latLng = gson.fromJson(pointJson, type); +// updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); break; default: break; @@ -333,6 +314,24 @@ } } + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + private void updateLocation(LatLng point) { double longitude = point.getLongitude(); longitudeView.setText(String.valueOf(longitude)); @@ -401,6 +400,7 @@ public void obtainUploadResult(UploadImageResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); /** * 系统路径static拼接图片返回路径 * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg @@ -409,10 +409,26 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - PictureFileUtils.deleteAllCacheDirFile(this); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); +// //删除按钮点击事件 +// imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { +// @Override +// public void onClick(int position) { +// selectList.remove(position); +// imageAdapter.setMediaList(selectList); +// } +// }); } } @@ -436,7 +452,7 @@ return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", "361024", "361024100", description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java index d4ec0fe..028190f 100644 --- a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java @@ -64,9 +64,9 @@ @Override protected void setupTopBarLayout() { - mapTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.black)); - mapTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - mapTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + mapTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + mapTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + mapTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -169,7 +169,6 @@ finish(); } }).create().show(); - return true; } }); @@ -200,7 +199,16 @@ } break; case R.id.removeToLocalView: - position = builder.zoom(15).build(); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); + CameraPosition position = builder.target(latLng).zoom(15).build(); + map.animateCamera(CameraUpdateFactory.newCameraPosition(position), 2000); + } + } + }); break; default: break; 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 0f5df93..ed00019 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -52,4 +52,7 @@ public static final String IP_KEY = "BASE_IP"; public static final String LOGIN_OUT_ACTION = "loginOut"; public static final String NOTICE_MSG = "receivePush"; + + public static final String BASE_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/2w/MapServer"; //底图图层 + public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer/0"; //部件点图层 } diff --git a/app/build.gradle b/app/build.gradle index 33265ed..5bc8157 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,6 @@ versionCode 1 versionName "v1.1.0.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } manifestPlaceholders = [ @@ -41,15 +39,10 @@ } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - //Google官方授权框架 implementation 'pub.devrel:easypermissions:1.3.0' //腾讯Android UI框架 @@ -82,8 +75,10 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 implementation 'com.github.huangyanbin:SmartTable:1.7.1' - implementation 'com.getui:gtsdk:3.1.4.0' //个推SDK - implementation 'com.getui:gtc:3.1.0.0' //个推核心组件 + implementation 'com.getui:gtsdk:3.1.4.0' + //个推SDK + implementation 'com.getui:gtc:3.1.0.0' + //个推核心组件 //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' //沉浸式状态栏。基础依赖包,必须要依赖 @@ -94,4 +89,6 @@ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' //视频播放器 implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' + //ArcGIS + implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' } diff --git a/app/dcms_key b/app/dcms_key new file mode 100644 index 0000000..bcb2319 --- /dev/null +++ b/app/dcms_key Binary files differ diff --git a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java deleted file mode 100644 index d8faada..0000000 --- a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.dcms; - -import android.content.Context; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.casic.dcms", appContext.getPackageName()); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e7f351..bc9187f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -14,6 +15,13 @@ + + + + + + { private Context context; - private List mediaList = new ArrayList<>(); + private List mediaList = new ArrayList<>(); public ImageRecycleViewAdapter(Context mContext) { this.context = mContext; } - public void setMediaList(@Nullable List selectList) { + public void setMediaList(@Nullable List imageUrlList) { mediaList.clear(); - if (selectList != null) { - mediaList.addAll(selectList); + if (imageUrlList != null) { + mediaList.addAll(imageUrlList); } notifyDataSetChanged(); } @@ -50,7 +47,7 @@ @Override public int getItemCount() { - return Math.min(mediaList.size(), 3); + return mediaList.size(); } @Override @@ -60,21 +57,19 @@ @Override public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { - Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - itemClickListener.onClick(position); - } - }); - holder.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } + Glide.with(context).load(mediaList.get(position)).into(holder.imageView); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); +// holder.deleteView.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// clickListener.onClick(position); +// } +// }); } static class ItemViewHolder extends RecyclerView.ViewHolder { 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 37f98aa..ce017e5 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -8,6 +8,7 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; +import com.esri.arcgisruntime.ArcGISRuntimeEnvironment; import com.mapbox.mapboxsdk.Mapbox; import com.qmuiteam.qmui.arch.QMUISwipeBackActivityManager; @@ -24,6 +25,8 @@ ToastHelper.initToastHelper(this); //MapBox地图注册 Mapbox.getInstance(this, getString(R.string.mapbox_access_token)); + ArcGISRuntimeEnvironment.setLicense("runtimelite,1000,rud4449636536,none,NKMFA0PL4S0DRJE15166");//去掉开发版水印 + ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); // com.igexin.sdk.PushManager.getInstance().setDebugLogger(this, new IUserLoggerInterface() { diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java new file mode 100644 index 0000000..dfe881b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -0,0 +1,173 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.location.Location; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; + +import butterknife.BindView; +import butterknife.OnClick; + +public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private Context context = this; + @BindView(R.id.gisTopLayout) + QMUITopBarLayout gisTopLayout; + @BindView(R.id.mapView) + MapView mapView; + @BindView(R.id.expandMapView) + ImageView expandMapView; + @BindView(R.id.minusMapView) + ImageView minusMapView; + + @Override + public int initLayoutView() { + return R.layout.activity_gis; + } + + @Override + protected void setupTopBarLayout() { + gisTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + gisTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + gisTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + ArcGISMap map = new ArcGISMap(); + ArcGISTiledLayer arcGISTiledLayer = new ArcGISTiledLayer(Constant.BASE_SERVICE_URL); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(); + basemap.getBaseLayers().add(arcGISTiledLayer); + //设置地图底图 + map.setBasemap(basemap); + FeatureLayer featureLayer = new FeatureLayer(new ServiceFeatureTable(Constant.COMPONENT_SERVICE_URL)); + + //设置地图相关属性 + map.getOperationalLayers().add(featureLayer); + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setMap(map); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + Point clickPoint = mapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY()))); + addMarker(clickPoint); + + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return super.onSingleTapConfirmed(e); + } + }); + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + if (overlayGraphics.size() != 0) { + overlayGraphics.clear(); + } + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + + } + } + }); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 97682e3..4826307 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -39,7 +39,6 @@ import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -54,7 +53,6 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -65,6 +63,7 @@ public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + private static final String TAG = "QuicklyActivity"; private Context context = this; @BindView(R.id.leftBackView) @@ -101,7 +100,6 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 private String eorc; @@ -140,24 +138,8 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); imageAdapter = new ImageRecycleViewAdapter(this); - selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); selectedResultView.setAdapter(imageAdapter); - //九宫格点击事件 - imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { - @Override - public void onClick(int position) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageAdapter.setMediaList(selectList); - } - }); } @Override @@ -165,7 +147,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -260,17 +242,8 @@ .create().show(); break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } +// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -284,11 +257,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -300,7 +272,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -310,22 +281,32 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - imageAdapter.setMediaList(selectList); + List selectList = PictureSelector.obtainMultipleResult(data); + if (selectList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: - selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); - imageAdapter.setMediaList(selectList); + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); +// String pointJson = data.getStringExtra("pointJson"); +// Type type = new TypeToken() { +// }.getType(); +// LatLng latLng = gson.fromJson(pointJson, type); +// updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); break; default: break; @@ -333,6 +314,24 @@ } } + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + private void updateLocation(LatLng point) { double longitude = point.getLongitude(); longitudeView.setText(String.valueOf(longitude)); @@ -401,6 +400,7 @@ public void obtainUploadResult(UploadImageResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); /** * 系统路径static拼接图片返回路径 * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg @@ -409,10 +409,26 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - PictureFileUtils.deleteAllCacheDirFile(this); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); +// //删除按钮点击事件 +// imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { +// @Override +// public void onClick(int position) { +// selectList.remove(position); +// imageAdapter.setMediaList(selectList); +// } +// }); } } @@ -436,7 +452,7 @@ return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", "361024", "361024100", description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java index d4ec0fe..028190f 100644 --- a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java @@ -64,9 +64,9 @@ @Override protected void setupTopBarLayout() { - mapTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.black)); - mapTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - mapTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + mapTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + mapTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + mapTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -169,7 +169,6 @@ finish(); } }).create().show(); - return true; } }); @@ -200,7 +199,16 @@ } break; case R.id.removeToLocalView: - position = builder.zoom(15).build(); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); + CameraPosition position = builder.target(latLng).zoom(15).build(); + map.animateCamera(CameraUpdateFactory.newCameraPosition(position), 2000); + } + } + }); break; default: break; 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 0f5df93..ed00019 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -52,4 +52,7 @@ public static final String IP_KEY = "BASE_IP"; public static final String LOGIN_OUT_ACTION = "loginOut"; public static final String NOTICE_MSG = "receivePush"; + + public static final String BASE_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/2w/MapServer"; //底图图层 + public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer/0"; //部件点图层 } diff --git a/app/src/main/res/layout/activity_case_upload_quickly.xml b/app/src/main/res/layout/activity_case_upload_quickly.xml index a799254..a5b3395 100644 --- a/app/src/main/res/layout/activity_case_upload_quickly.xml +++ b/app/src/main/res/layout/activity_case_upload_quickly.xml @@ -270,7 +270,6 @@ android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginEnd="10dp" - android:layout_toStartOf="@id/imageUploadView" android:orientation="vertical"> - - Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.casic.dcms", appContext.getPackageName()); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e7f351..bc9187f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -14,6 +15,13 @@ + + + + + + { private Context context; - private List mediaList = new ArrayList<>(); + private List mediaList = new ArrayList<>(); public ImageRecycleViewAdapter(Context mContext) { this.context = mContext; } - public void setMediaList(@Nullable List selectList) { + public void setMediaList(@Nullable List imageUrlList) { mediaList.clear(); - if (selectList != null) { - mediaList.addAll(selectList); + if (imageUrlList != null) { + mediaList.addAll(imageUrlList); } notifyDataSetChanged(); } @@ -50,7 +47,7 @@ @Override public int getItemCount() { - return Math.min(mediaList.size(), 3); + return mediaList.size(); } @Override @@ -60,21 +57,19 @@ @Override public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { - Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - itemClickListener.onClick(position); - } - }); - holder.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } + Glide.with(context).load(mediaList.get(position)).into(holder.imageView); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); +// holder.deleteView.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// clickListener.onClick(position); +// } +// }); } static class ItemViewHolder extends RecyclerView.ViewHolder { 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 37f98aa..ce017e5 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -8,6 +8,7 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; +import com.esri.arcgisruntime.ArcGISRuntimeEnvironment; import com.mapbox.mapboxsdk.Mapbox; import com.qmuiteam.qmui.arch.QMUISwipeBackActivityManager; @@ -24,6 +25,8 @@ ToastHelper.initToastHelper(this); //MapBox地图注册 Mapbox.getInstance(this, getString(R.string.mapbox_access_token)); + ArcGISRuntimeEnvironment.setLicense("runtimelite,1000,rud4449636536,none,NKMFA0PL4S0DRJE15166");//去掉开发版水印 + ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); // com.igexin.sdk.PushManager.getInstance().setDebugLogger(this, new IUserLoggerInterface() { diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java new file mode 100644 index 0000000..dfe881b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -0,0 +1,173 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.location.Location; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; + +import butterknife.BindView; +import butterknife.OnClick; + +public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private Context context = this; + @BindView(R.id.gisTopLayout) + QMUITopBarLayout gisTopLayout; + @BindView(R.id.mapView) + MapView mapView; + @BindView(R.id.expandMapView) + ImageView expandMapView; + @BindView(R.id.minusMapView) + ImageView minusMapView; + + @Override + public int initLayoutView() { + return R.layout.activity_gis; + } + + @Override + protected void setupTopBarLayout() { + gisTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + gisTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + gisTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + ArcGISMap map = new ArcGISMap(); + ArcGISTiledLayer arcGISTiledLayer = new ArcGISTiledLayer(Constant.BASE_SERVICE_URL); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(); + basemap.getBaseLayers().add(arcGISTiledLayer); + //设置地图底图 + map.setBasemap(basemap); + FeatureLayer featureLayer = new FeatureLayer(new ServiceFeatureTable(Constant.COMPONENT_SERVICE_URL)); + + //设置地图相关属性 + map.getOperationalLayers().add(featureLayer); + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setMap(map); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + Point clickPoint = mapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY()))); + addMarker(clickPoint); + + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return super.onSingleTapConfirmed(e); + } + }); + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + if (overlayGraphics.size() != 0) { + overlayGraphics.clear(); + } + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + + } + } + }); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 97682e3..4826307 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -39,7 +39,6 @@ import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -54,7 +53,6 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -65,6 +63,7 @@ public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + private static final String TAG = "QuicklyActivity"; private Context context = this; @BindView(R.id.leftBackView) @@ -101,7 +100,6 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 private String eorc; @@ -140,24 +138,8 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); imageAdapter = new ImageRecycleViewAdapter(this); - selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); selectedResultView.setAdapter(imageAdapter); - //九宫格点击事件 - imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { - @Override - public void onClick(int position) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageAdapter.setMediaList(selectList); - } - }); } @Override @@ -165,7 +147,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -260,17 +242,8 @@ .create().show(); break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } +// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -284,11 +257,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -300,7 +272,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -310,22 +281,32 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - imageAdapter.setMediaList(selectList); + List selectList = PictureSelector.obtainMultipleResult(data); + if (selectList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: - selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); - imageAdapter.setMediaList(selectList); + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); +// String pointJson = data.getStringExtra("pointJson"); +// Type type = new TypeToken() { +// }.getType(); +// LatLng latLng = gson.fromJson(pointJson, type); +// updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); break; default: break; @@ -333,6 +314,24 @@ } } + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + private void updateLocation(LatLng point) { double longitude = point.getLongitude(); longitudeView.setText(String.valueOf(longitude)); @@ -401,6 +400,7 @@ public void obtainUploadResult(UploadImageResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); /** * 系统路径static拼接图片返回路径 * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg @@ -409,10 +409,26 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - PictureFileUtils.deleteAllCacheDirFile(this); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); +// //删除按钮点击事件 +// imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { +// @Override +// public void onClick(int position) { +// selectList.remove(position); +// imageAdapter.setMediaList(selectList); +// } +// }); } } @@ -436,7 +452,7 @@ return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", "361024", "361024100", description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java index d4ec0fe..028190f 100644 --- a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java @@ -64,9 +64,9 @@ @Override protected void setupTopBarLayout() { - mapTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.black)); - mapTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - mapTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + mapTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + mapTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + mapTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -169,7 +169,6 @@ finish(); } }).create().show(); - return true; } }); @@ -200,7 +199,16 @@ } break; case R.id.removeToLocalView: - position = builder.zoom(15).build(); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); + CameraPosition position = builder.target(latLng).zoom(15).build(); + map.animateCamera(CameraUpdateFactory.newCameraPosition(position), 2000); + } + } + }); break; default: break; 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 0f5df93..ed00019 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -52,4 +52,7 @@ public static final String IP_KEY = "BASE_IP"; public static final String LOGIN_OUT_ACTION = "loginOut"; public static final String NOTICE_MSG = "receivePush"; + + public static final String BASE_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/2w/MapServer"; //底图图层 + public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer/0"; //部件点图层 } diff --git a/app/src/main/res/layout/activity_case_upload_quickly.xml b/app/src/main/res/layout/activity_case_upload_quickly.xml index a799254..a5b3395 100644 --- a/app/src/main/res/layout/activity_case_upload_quickly.xml +++ b/app/src/main/res/layout/activity_case_upload_quickly.xml @@ -270,7 +270,6 @@ android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginEnd="10dp" - android:layout_toStartOf="@id/imageUploadView" android:orientation="vertical"> - - + + + + + + + + + + + + + + + + + + diff --git a/app/build.gradle b/app/build.gradle index 33265ed..5bc8157 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,6 @@ versionCode 1 versionName "v1.1.0.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } manifestPlaceholders = [ @@ -41,15 +39,10 @@ } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - //Google官方授权框架 implementation 'pub.devrel:easypermissions:1.3.0' //腾讯Android UI框架 @@ -82,8 +75,10 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 implementation 'com.github.huangyanbin:SmartTable:1.7.1' - implementation 'com.getui:gtsdk:3.1.4.0' //个推SDK - implementation 'com.getui:gtc:3.1.0.0' //个推核心组件 + implementation 'com.getui:gtsdk:3.1.4.0' + //个推SDK + implementation 'com.getui:gtc:3.1.0.0' + //个推核心组件 //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' //沉浸式状态栏。基础依赖包,必须要依赖 @@ -94,4 +89,6 @@ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' //视频播放器 implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' + //ArcGIS + implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' } diff --git a/app/dcms_key b/app/dcms_key new file mode 100644 index 0000000..bcb2319 --- /dev/null +++ b/app/dcms_key Binary files differ diff --git a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java deleted file mode 100644 index d8faada..0000000 --- a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.dcms; - -import android.content.Context; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.casic.dcms", appContext.getPackageName()); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e7f351..bc9187f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -14,6 +15,13 @@ + + + + + + { private Context context; - private List mediaList = new ArrayList<>(); + private List mediaList = new ArrayList<>(); public ImageRecycleViewAdapter(Context mContext) { this.context = mContext; } - public void setMediaList(@Nullable List selectList) { + public void setMediaList(@Nullable List imageUrlList) { mediaList.clear(); - if (selectList != null) { - mediaList.addAll(selectList); + if (imageUrlList != null) { + mediaList.addAll(imageUrlList); } notifyDataSetChanged(); } @@ -50,7 +47,7 @@ @Override public int getItemCount() { - return Math.min(mediaList.size(), 3); + return mediaList.size(); } @Override @@ -60,21 +57,19 @@ @Override public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { - Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - itemClickListener.onClick(position); - } - }); - holder.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } + Glide.with(context).load(mediaList.get(position)).into(holder.imageView); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); +// holder.deleteView.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// clickListener.onClick(position); +// } +// }); } static class ItemViewHolder extends RecyclerView.ViewHolder { 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 37f98aa..ce017e5 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -8,6 +8,7 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; +import com.esri.arcgisruntime.ArcGISRuntimeEnvironment; import com.mapbox.mapboxsdk.Mapbox; import com.qmuiteam.qmui.arch.QMUISwipeBackActivityManager; @@ -24,6 +25,8 @@ ToastHelper.initToastHelper(this); //MapBox地图注册 Mapbox.getInstance(this, getString(R.string.mapbox_access_token)); + ArcGISRuntimeEnvironment.setLicense("runtimelite,1000,rud4449636536,none,NKMFA0PL4S0DRJE15166");//去掉开发版水印 + ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); // com.igexin.sdk.PushManager.getInstance().setDebugLogger(this, new IUserLoggerInterface() { diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java new file mode 100644 index 0000000..dfe881b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -0,0 +1,173 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.location.Location; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; + +import butterknife.BindView; +import butterknife.OnClick; + +public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private Context context = this; + @BindView(R.id.gisTopLayout) + QMUITopBarLayout gisTopLayout; + @BindView(R.id.mapView) + MapView mapView; + @BindView(R.id.expandMapView) + ImageView expandMapView; + @BindView(R.id.minusMapView) + ImageView minusMapView; + + @Override + public int initLayoutView() { + return R.layout.activity_gis; + } + + @Override + protected void setupTopBarLayout() { + gisTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + gisTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + gisTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + ArcGISMap map = new ArcGISMap(); + ArcGISTiledLayer arcGISTiledLayer = new ArcGISTiledLayer(Constant.BASE_SERVICE_URL); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(); + basemap.getBaseLayers().add(arcGISTiledLayer); + //设置地图底图 + map.setBasemap(basemap); + FeatureLayer featureLayer = new FeatureLayer(new ServiceFeatureTable(Constant.COMPONENT_SERVICE_URL)); + + //设置地图相关属性 + map.getOperationalLayers().add(featureLayer); + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setMap(map); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + Point clickPoint = mapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY()))); + addMarker(clickPoint); + + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return super.onSingleTapConfirmed(e); + } + }); + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + if (overlayGraphics.size() != 0) { + overlayGraphics.clear(); + } + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + + } + } + }); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 97682e3..4826307 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -39,7 +39,6 @@ import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -54,7 +53,6 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -65,6 +63,7 @@ public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + private static final String TAG = "QuicklyActivity"; private Context context = this; @BindView(R.id.leftBackView) @@ -101,7 +100,6 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 private String eorc; @@ -140,24 +138,8 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); imageAdapter = new ImageRecycleViewAdapter(this); - selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); selectedResultView.setAdapter(imageAdapter); - //九宫格点击事件 - imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { - @Override - public void onClick(int position) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageAdapter.setMediaList(selectList); - } - }); } @Override @@ -165,7 +147,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -260,17 +242,8 @@ .create().show(); break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } +// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -284,11 +257,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -300,7 +272,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -310,22 +281,32 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - imageAdapter.setMediaList(selectList); + List selectList = PictureSelector.obtainMultipleResult(data); + if (selectList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: - selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); - imageAdapter.setMediaList(selectList); + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); +// String pointJson = data.getStringExtra("pointJson"); +// Type type = new TypeToken() { +// }.getType(); +// LatLng latLng = gson.fromJson(pointJson, type); +// updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); break; default: break; @@ -333,6 +314,24 @@ } } + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + private void updateLocation(LatLng point) { double longitude = point.getLongitude(); longitudeView.setText(String.valueOf(longitude)); @@ -401,6 +400,7 @@ public void obtainUploadResult(UploadImageResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); /** * 系统路径static拼接图片返回路径 * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg @@ -409,10 +409,26 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - PictureFileUtils.deleteAllCacheDirFile(this); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); +// //删除按钮点击事件 +// imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { +// @Override +// public void onClick(int position) { +// selectList.remove(position); +// imageAdapter.setMediaList(selectList); +// } +// }); } } @@ -436,7 +452,7 @@ return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", "361024", "361024100", description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java index d4ec0fe..028190f 100644 --- a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java @@ -64,9 +64,9 @@ @Override protected void setupTopBarLayout() { - mapTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.black)); - mapTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - mapTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + mapTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + mapTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + mapTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -169,7 +169,6 @@ finish(); } }).create().show(); - return true; } }); @@ -200,7 +199,16 @@ } break; case R.id.removeToLocalView: - position = builder.zoom(15).build(); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); + CameraPosition position = builder.target(latLng).zoom(15).build(); + map.animateCamera(CameraUpdateFactory.newCameraPosition(position), 2000); + } + } + }); break; default: break; 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 0f5df93..ed00019 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -52,4 +52,7 @@ public static final String IP_KEY = "BASE_IP"; public static final String LOGIN_OUT_ACTION = "loginOut"; public static final String NOTICE_MSG = "receivePush"; + + public static final String BASE_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/2w/MapServer"; //底图图层 + public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer/0"; //部件点图层 } diff --git a/app/src/main/res/layout/activity_case_upload_quickly.xml b/app/src/main/res/layout/activity_case_upload_quickly.xml index a799254..a5b3395 100644 --- a/app/src/main/res/layout/activity_case_upload_quickly.xml +++ b/app/src/main/res/layout/activity_case_upload_quickly.xml @@ -270,7 +270,6 @@ android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginEnd="10dp" - android:layout_toStartOf="@id/imageUploadView" android:orientation="vertical"> - - + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_select_gridview.xml b/app/src/main/res/layout/item_select_gridview.xml index 5c9541b..5834e40 100644 --- a/app/src/main/res/layout/item_select_gridview.xml +++ b/app/src/main/res/layout/item_select_gridview.xml @@ -5,8 +5,8 @@ + android:background="@drawable/ic_delete_black" + android:visibility="gone" /> \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 33265ed..5bc8157 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,6 @@ versionCode 1 versionName "v1.1.0.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } manifestPlaceholders = [ @@ -41,15 +39,10 @@ } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - //Google官方授权框架 implementation 'pub.devrel:easypermissions:1.3.0' //腾讯Android UI框架 @@ -82,8 +75,10 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 implementation 'com.github.huangyanbin:SmartTable:1.7.1' - implementation 'com.getui:gtsdk:3.1.4.0' //个推SDK - implementation 'com.getui:gtc:3.1.0.0' //个推核心组件 + implementation 'com.getui:gtsdk:3.1.4.0' + //个推SDK + implementation 'com.getui:gtc:3.1.0.0' + //个推核心组件 //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' //沉浸式状态栏。基础依赖包,必须要依赖 @@ -94,4 +89,6 @@ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' //视频播放器 implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' + //ArcGIS + implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' } diff --git a/app/dcms_key b/app/dcms_key new file mode 100644 index 0000000..bcb2319 --- /dev/null +++ b/app/dcms_key Binary files differ diff --git a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java deleted file mode 100644 index d8faada..0000000 --- a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.dcms; - -import android.content.Context; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.casic.dcms", appContext.getPackageName()); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e7f351..bc9187f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -14,6 +15,13 @@ + + + + + + { private Context context; - private List mediaList = new ArrayList<>(); + private List mediaList = new ArrayList<>(); public ImageRecycleViewAdapter(Context mContext) { this.context = mContext; } - public void setMediaList(@Nullable List selectList) { + public void setMediaList(@Nullable List imageUrlList) { mediaList.clear(); - if (selectList != null) { - mediaList.addAll(selectList); + if (imageUrlList != null) { + mediaList.addAll(imageUrlList); } notifyDataSetChanged(); } @@ -50,7 +47,7 @@ @Override public int getItemCount() { - return Math.min(mediaList.size(), 3); + return mediaList.size(); } @Override @@ -60,21 +57,19 @@ @Override public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { - Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - itemClickListener.onClick(position); - } - }); - holder.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } + Glide.with(context).load(mediaList.get(position)).into(holder.imageView); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); +// holder.deleteView.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// clickListener.onClick(position); +// } +// }); } static class ItemViewHolder extends RecyclerView.ViewHolder { 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 37f98aa..ce017e5 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -8,6 +8,7 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; +import com.esri.arcgisruntime.ArcGISRuntimeEnvironment; import com.mapbox.mapboxsdk.Mapbox; import com.qmuiteam.qmui.arch.QMUISwipeBackActivityManager; @@ -24,6 +25,8 @@ ToastHelper.initToastHelper(this); //MapBox地图注册 Mapbox.getInstance(this, getString(R.string.mapbox_access_token)); + ArcGISRuntimeEnvironment.setLicense("runtimelite,1000,rud4449636536,none,NKMFA0PL4S0DRJE15166");//去掉开发版水印 + ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); // com.igexin.sdk.PushManager.getInstance().setDebugLogger(this, new IUserLoggerInterface() { diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java new file mode 100644 index 0000000..dfe881b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -0,0 +1,173 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.location.Location; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; + +import butterknife.BindView; +import butterknife.OnClick; + +public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private Context context = this; + @BindView(R.id.gisTopLayout) + QMUITopBarLayout gisTopLayout; + @BindView(R.id.mapView) + MapView mapView; + @BindView(R.id.expandMapView) + ImageView expandMapView; + @BindView(R.id.minusMapView) + ImageView minusMapView; + + @Override + public int initLayoutView() { + return R.layout.activity_gis; + } + + @Override + protected void setupTopBarLayout() { + gisTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + gisTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + gisTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + ArcGISMap map = new ArcGISMap(); + ArcGISTiledLayer arcGISTiledLayer = new ArcGISTiledLayer(Constant.BASE_SERVICE_URL); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(); + basemap.getBaseLayers().add(arcGISTiledLayer); + //设置地图底图 + map.setBasemap(basemap); + FeatureLayer featureLayer = new FeatureLayer(new ServiceFeatureTable(Constant.COMPONENT_SERVICE_URL)); + + //设置地图相关属性 + map.getOperationalLayers().add(featureLayer); + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setMap(map); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + Point clickPoint = mapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY()))); + addMarker(clickPoint); + + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return super.onSingleTapConfirmed(e); + } + }); + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + if (overlayGraphics.size() != 0) { + overlayGraphics.clear(); + } + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + + } + } + }); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 97682e3..4826307 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -39,7 +39,6 @@ import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -54,7 +53,6 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -65,6 +63,7 @@ public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + private static final String TAG = "QuicklyActivity"; private Context context = this; @BindView(R.id.leftBackView) @@ -101,7 +100,6 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 private String eorc; @@ -140,24 +138,8 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); imageAdapter = new ImageRecycleViewAdapter(this); - selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); selectedResultView.setAdapter(imageAdapter); - //九宫格点击事件 - imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { - @Override - public void onClick(int position) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageAdapter.setMediaList(selectList); - } - }); } @Override @@ -165,7 +147,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -260,17 +242,8 @@ .create().show(); break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } +// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -284,11 +257,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -300,7 +272,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -310,22 +281,32 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - imageAdapter.setMediaList(selectList); + List selectList = PictureSelector.obtainMultipleResult(data); + if (selectList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: - selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); - imageAdapter.setMediaList(selectList); + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); +// String pointJson = data.getStringExtra("pointJson"); +// Type type = new TypeToken() { +// }.getType(); +// LatLng latLng = gson.fromJson(pointJson, type); +// updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); break; default: break; @@ -333,6 +314,24 @@ } } + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + private void updateLocation(LatLng point) { double longitude = point.getLongitude(); longitudeView.setText(String.valueOf(longitude)); @@ -401,6 +400,7 @@ public void obtainUploadResult(UploadImageResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); /** * 系统路径static拼接图片返回路径 * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg @@ -409,10 +409,26 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - PictureFileUtils.deleteAllCacheDirFile(this); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); +// //删除按钮点击事件 +// imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { +// @Override +// public void onClick(int position) { +// selectList.remove(position); +// imageAdapter.setMediaList(selectList); +// } +// }); } } @@ -436,7 +452,7 @@ return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", "361024", "361024100", description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java index d4ec0fe..028190f 100644 --- a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java @@ -64,9 +64,9 @@ @Override protected void setupTopBarLayout() { - mapTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.black)); - mapTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - mapTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + mapTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + mapTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + mapTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -169,7 +169,6 @@ finish(); } }).create().show(); - return true; } }); @@ -200,7 +199,16 @@ } break; case R.id.removeToLocalView: - position = builder.zoom(15).build(); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); + CameraPosition position = builder.target(latLng).zoom(15).build(); + map.animateCamera(CameraUpdateFactory.newCameraPosition(position), 2000); + } + } + }); break; default: break; 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 0f5df93..ed00019 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -52,4 +52,7 @@ public static final String IP_KEY = "BASE_IP"; public static final String LOGIN_OUT_ACTION = "loginOut"; public static final String NOTICE_MSG = "receivePush"; + + public static final String BASE_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/2w/MapServer"; //底图图层 + public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer/0"; //部件点图层 } diff --git a/app/src/main/res/layout/activity_case_upload_quickly.xml b/app/src/main/res/layout/activity_case_upload_quickly.xml index a799254..a5b3395 100644 --- a/app/src/main/res/layout/activity_case_upload_quickly.xml +++ b/app/src/main/res/layout/activity_case_upload_quickly.xml @@ -270,7 +270,6 @@ android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginEnd="10dp" - android:layout_toStartOf="@id/imageUploadView" android:orientation="vertical"> - - + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_select_gridview.xml b/app/src/main/res/layout/item_select_gridview.xml index 5c9541b..5834e40 100644 --- a/app/src/main/res/layout/item_select_gridview.xml +++ b/app/src/main/res/layout/item_select_gridview.xml @@ -5,8 +5,8 @@ + android:background="@drawable/ic_delete_black" + android:visibility="gone" /> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 04296eb..c5da4e8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -18,5 +18,5 @@ (V)取事部件点:通过地图取点打开的地图窗口,直接在地图上单击,即可完成取事件点或部件点的操作,获取网格、坐标等信息。 pk.eyJ1IjoiMTgzMTA1ODE5MTYiLCJhIjoiY2tuN2hna2hhMG9hYzJ1bTFzamY0dXhsaCJ9.yWjMxHEHvXFe8c0AWT1bTQ - AAPK068bca9a1246485881b11f568444dc8ajG37wO52bDOv5NZgrAiOZstaEdqvG0bjKEZJX9gXgvR5Jq56g56eyswsu5ziFquD + AAPK93b60c1b1b064409aafaa03bc5bd3df1eM4wAH7Cxp9rfcD_AEmUqjuk3p2nq-P_tAiHCRh-iyuLIBqeDiKD0urjkJd42iCh diff --git a/app/build.gradle b/app/build.gradle index 33265ed..5bc8157 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,6 @@ versionCode 1 versionName "v1.1.0.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } manifestPlaceholders = [ @@ -41,15 +39,10 @@ } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - //Google官方授权框架 implementation 'pub.devrel:easypermissions:1.3.0' //腾讯Android UI框架 @@ -82,8 +75,10 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 implementation 'com.github.huangyanbin:SmartTable:1.7.1' - implementation 'com.getui:gtsdk:3.1.4.0' //个推SDK - implementation 'com.getui:gtc:3.1.0.0' //个推核心组件 + implementation 'com.getui:gtsdk:3.1.4.0' + //个推SDK + implementation 'com.getui:gtc:3.1.0.0' + //个推核心组件 //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' //沉浸式状态栏。基础依赖包,必须要依赖 @@ -94,4 +89,6 @@ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' //视频播放器 implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' + //ArcGIS + implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' } diff --git a/app/dcms_key b/app/dcms_key new file mode 100644 index 0000000..bcb2319 --- /dev/null +++ b/app/dcms_key Binary files differ diff --git a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java deleted file mode 100644 index d8faada..0000000 --- a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.dcms; - -import android.content.Context; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.casic.dcms", appContext.getPackageName()); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e7f351..bc9187f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -14,6 +15,13 @@ + + + + + + { private Context context; - private List mediaList = new ArrayList<>(); + private List mediaList = new ArrayList<>(); public ImageRecycleViewAdapter(Context mContext) { this.context = mContext; } - public void setMediaList(@Nullable List selectList) { + public void setMediaList(@Nullable List imageUrlList) { mediaList.clear(); - if (selectList != null) { - mediaList.addAll(selectList); + if (imageUrlList != null) { + mediaList.addAll(imageUrlList); } notifyDataSetChanged(); } @@ -50,7 +47,7 @@ @Override public int getItemCount() { - return Math.min(mediaList.size(), 3); + return mediaList.size(); } @Override @@ -60,21 +57,19 @@ @Override public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { - Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - itemClickListener.onClick(position); - } - }); - holder.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } + Glide.with(context).load(mediaList.get(position)).into(holder.imageView); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); +// holder.deleteView.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// clickListener.onClick(position); +// } +// }); } static class ItemViewHolder extends RecyclerView.ViewHolder { 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 37f98aa..ce017e5 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -8,6 +8,7 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; +import com.esri.arcgisruntime.ArcGISRuntimeEnvironment; import com.mapbox.mapboxsdk.Mapbox; import com.qmuiteam.qmui.arch.QMUISwipeBackActivityManager; @@ -24,6 +25,8 @@ ToastHelper.initToastHelper(this); //MapBox地图注册 Mapbox.getInstance(this, getString(R.string.mapbox_access_token)); + ArcGISRuntimeEnvironment.setLicense("runtimelite,1000,rud4449636536,none,NKMFA0PL4S0DRJE15166");//去掉开发版水印 + ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); // com.igexin.sdk.PushManager.getInstance().setDebugLogger(this, new IUserLoggerInterface() { diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java new file mode 100644 index 0000000..dfe881b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -0,0 +1,173 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.location.Location; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; + +import butterknife.BindView; +import butterknife.OnClick; + +public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private Context context = this; + @BindView(R.id.gisTopLayout) + QMUITopBarLayout gisTopLayout; + @BindView(R.id.mapView) + MapView mapView; + @BindView(R.id.expandMapView) + ImageView expandMapView; + @BindView(R.id.minusMapView) + ImageView minusMapView; + + @Override + public int initLayoutView() { + return R.layout.activity_gis; + } + + @Override + protected void setupTopBarLayout() { + gisTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + gisTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + gisTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + ArcGISMap map = new ArcGISMap(); + ArcGISTiledLayer arcGISTiledLayer = new ArcGISTiledLayer(Constant.BASE_SERVICE_URL); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(); + basemap.getBaseLayers().add(arcGISTiledLayer); + //设置地图底图 + map.setBasemap(basemap); + FeatureLayer featureLayer = new FeatureLayer(new ServiceFeatureTable(Constant.COMPONENT_SERVICE_URL)); + + //设置地图相关属性 + map.getOperationalLayers().add(featureLayer); + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setMap(map); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + Point clickPoint = mapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY()))); + addMarker(clickPoint); + + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return super.onSingleTapConfirmed(e); + } + }); + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + if (overlayGraphics.size() != 0) { + overlayGraphics.clear(); + } + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + + } + } + }); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 97682e3..4826307 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -39,7 +39,6 @@ import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -54,7 +53,6 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -65,6 +63,7 @@ public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + private static final String TAG = "QuicklyActivity"; private Context context = this; @BindView(R.id.leftBackView) @@ -101,7 +100,6 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 private String eorc; @@ -140,24 +138,8 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); imageAdapter = new ImageRecycleViewAdapter(this); - selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); selectedResultView.setAdapter(imageAdapter); - //九宫格点击事件 - imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { - @Override - public void onClick(int position) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageAdapter.setMediaList(selectList); - } - }); } @Override @@ -165,7 +147,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -260,17 +242,8 @@ .create().show(); break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } +// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -284,11 +257,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -300,7 +272,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -310,22 +281,32 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - imageAdapter.setMediaList(selectList); + List selectList = PictureSelector.obtainMultipleResult(data); + if (selectList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: - selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); - imageAdapter.setMediaList(selectList); + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); +// String pointJson = data.getStringExtra("pointJson"); +// Type type = new TypeToken() { +// }.getType(); +// LatLng latLng = gson.fromJson(pointJson, type); +// updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); break; default: break; @@ -333,6 +314,24 @@ } } + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + private void updateLocation(LatLng point) { double longitude = point.getLongitude(); longitudeView.setText(String.valueOf(longitude)); @@ -401,6 +400,7 @@ public void obtainUploadResult(UploadImageResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); /** * 系统路径static拼接图片返回路径 * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg @@ -409,10 +409,26 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - PictureFileUtils.deleteAllCacheDirFile(this); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); +// //删除按钮点击事件 +// imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { +// @Override +// public void onClick(int position) { +// selectList.remove(position); +// imageAdapter.setMediaList(selectList); +// } +// }); } } @@ -436,7 +452,7 @@ return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", "361024", "361024100", description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java index d4ec0fe..028190f 100644 --- a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java @@ -64,9 +64,9 @@ @Override protected void setupTopBarLayout() { - mapTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.black)); - mapTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - mapTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + mapTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + mapTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + mapTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -169,7 +169,6 @@ finish(); } }).create().show(); - return true; } }); @@ -200,7 +199,16 @@ } break; case R.id.removeToLocalView: - position = builder.zoom(15).build(); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); + CameraPosition position = builder.target(latLng).zoom(15).build(); + map.animateCamera(CameraUpdateFactory.newCameraPosition(position), 2000); + } + } + }); break; default: break; 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 0f5df93..ed00019 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -52,4 +52,7 @@ public static final String IP_KEY = "BASE_IP"; public static final String LOGIN_OUT_ACTION = "loginOut"; public static final String NOTICE_MSG = "receivePush"; + + public static final String BASE_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/2w/MapServer"; //底图图层 + public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer/0"; //部件点图层 } diff --git a/app/src/main/res/layout/activity_case_upload_quickly.xml b/app/src/main/res/layout/activity_case_upload_quickly.xml index a799254..a5b3395 100644 --- a/app/src/main/res/layout/activity_case_upload_quickly.xml +++ b/app/src/main/res/layout/activity_case_upload_quickly.xml @@ -270,7 +270,6 @@ android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginEnd="10dp" - android:layout_toStartOf="@id/imageUploadView" android:orientation="vertical"> - - + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_select_gridview.xml b/app/src/main/res/layout/item_select_gridview.xml index 5c9541b..5834e40 100644 --- a/app/src/main/res/layout/item_select_gridview.xml +++ b/app/src/main/res/layout/item_select_gridview.xml @@ -5,8 +5,8 @@ + android:background="@drawable/ic_delete_black" + android:visibility="gone" /> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 04296eb..c5da4e8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -18,5 +18,5 @@ (V)取事部件点:通过地图取点打开的地图窗口,直接在地图上单击,即可完成取事件点或部件点的操作,获取网格、坐标等信息。 pk.eyJ1IjoiMTgzMTA1ODE5MTYiLCJhIjoiY2tuN2hna2hhMG9hYzJ1bTFzamY0dXhsaCJ9.yWjMxHEHvXFe8c0AWT1bTQ - AAPK068bca9a1246485881b11f568444dc8ajG37wO52bDOv5NZgrAiOZstaEdqvG0bjKEZJX9gXgvR5Jq56g56eyswsu5ziFquD + AAPK93b60c1b1b064409aafaa03bc5bd3df1eM4wAH7Cxp9rfcD_AEmUqjuk3p2nq-P_tAiHCRh-iyuLIBqeDiKD0urjkJd42iCh diff --git a/app/src/test/java/com/casic/dcms/ExampleUnitTest.java b/app/src/test/java/com/casic/dcms/ExampleUnitTest.java deleted file mode 100644 index 66ab075..0000000 --- a/app/src/test/java/com/casic/dcms/ExampleUnitTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.dcms; - -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * Example local unit test, which will execute on the development machine (host). - * - * @see Testing documentation - */ -public class ExampleUnitTest { - @Test - public void addition_isCorrect() { - assertEquals(4, 2 + 2); - } -} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 33265ed..5bc8157 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,6 @@ versionCode 1 versionName "v1.1.0.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" } manifestPlaceholders = [ @@ -41,15 +39,10 @@ } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - //Google官方授权框架 implementation 'pub.devrel:easypermissions:1.3.0' //腾讯Android UI框架 @@ -82,8 +75,10 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 implementation 'com.github.huangyanbin:SmartTable:1.7.1' - implementation 'com.getui:gtsdk:3.1.4.0' //个推SDK - implementation 'com.getui:gtc:3.1.0.0' //个推核心组件 + implementation 'com.getui:gtsdk:3.1.4.0' + //个推SDK + implementation 'com.getui:gtc:3.1.0.0' + //个推核心组件 //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' //沉浸式状态栏。基础依赖包,必须要依赖 @@ -94,4 +89,6 @@ implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' //视频播放器 implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' + //ArcGIS + implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' } diff --git a/app/dcms_key b/app/dcms_key new file mode 100644 index 0000000..bcb2319 --- /dev/null +++ b/app/dcms_key Binary files differ diff --git a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java deleted file mode 100644 index d8faada..0000000 --- a/app/src/androidTest/java/com/casic/dcms/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.dcms; - -import android.content.Context; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.casic.dcms", appContext.getPackageName()); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7e7f351..bc9187f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -14,6 +15,13 @@ + + + + + + { private Context context; - private List mediaList = new ArrayList<>(); + private List mediaList = new ArrayList<>(); public ImageRecycleViewAdapter(Context mContext) { this.context = mContext; } - public void setMediaList(@Nullable List selectList) { + public void setMediaList(@Nullable List imageUrlList) { mediaList.clear(); - if (selectList != null) { - mediaList.addAll(selectList); + if (imageUrlList != null) { + mediaList.addAll(imageUrlList); } notifyDataSetChanged(); } @@ -50,7 +47,7 @@ @Override public int getItemCount() { - return Math.min(mediaList.size(), 3); + return mediaList.size(); } @Override @@ -60,21 +57,19 @@ @Override public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { - Glide.with(context).load(mediaList.get(position).getRealPath()).into(holder.imageView); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - itemClickListener.onClick(position); - } - }); - holder.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } + Glide.with(context).load(mediaList.get(position)).into(holder.imageView); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + itemClickListener.onClick(position); + } + }); +// holder.deleteView.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// clickListener.onClick(position); +// } +// }); } static class ItemViewHolder extends RecyclerView.ViewHolder { 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 37f98aa..ce017e5 100644 --- a/app/src/main/java/com/casic/dcms/base/BaseApplication.java +++ b/app/src/main/java/com/casic/dcms/base/BaseApplication.java @@ -8,6 +8,7 @@ import com.casic.dcms.greendao.DaoSession; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.ToastHelper; +import com.esri.arcgisruntime.ArcGISRuntimeEnvironment; import com.mapbox.mapboxsdk.Mapbox; import com.qmuiteam.qmui.arch.QMUISwipeBackActivityManager; @@ -24,6 +25,8 @@ ToastHelper.initToastHelper(this); //MapBox地图注册 Mapbox.getInstance(this, getString(R.string.mapbox_access_token)); + ArcGISRuntimeEnvironment.setLicense("runtimelite,1000,rud4449636536,none,NKMFA0PL4S0DRJE15166");//去掉开发版水印 + ArcGISRuntimeEnvironment.setApiKey(getString(R.string.arcgis_key)); //个推初始化 com.igexin.sdk.PushManager.getInstance().initialize(this); // com.igexin.sdk.PushManager.getInstance().setDebugLogger(this, new IUserLoggerInterface() { diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java new file mode 100644 index 0000000..dfe881b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -0,0 +1,173 @@ +package com.casic.dcms.ui; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.location.Location; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.layers.ArcGISTiledLayer; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.MapView; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; + +import butterknife.BindView; +import butterknife.OnClick; + +public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private Context context = this; + @BindView(R.id.gisTopLayout) + QMUITopBarLayout gisTopLayout; + @BindView(R.id.mapView) + MapView mapView; + @BindView(R.id.expandMapView) + ImageView expandMapView; + @BindView(R.id.minusMapView) + ImageView minusMapView; + + @Override + public int initLayoutView() { + return R.layout.activity_gis; + } + + @Override + protected void setupTopBarLayout() { + gisTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + gisTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + gisTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + ArcGISMap map = new ArcGISMap(); + ArcGISTiledLayer arcGISTiledLayer = new ArcGISTiledLayer(Constant.BASE_SERVICE_URL); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(); + basemap.getBaseLayers().add(arcGISTiledLayer); + //设置地图底图 + map.setBasemap(basemap); + FeatureLayer featureLayer = new FeatureLayer(new ServiceFeatureTable(Constant.COMPONENT_SERVICE_URL)); + + //设置地图相关属性 + map.getOperationalLayers().add(featureLayer); + mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + mapView.setMap(map); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + Point clickPoint = mapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY()))); + addMarker(clickPoint); + + new QMUIDialog.MessageDialogBuilder(context) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + setResult(RESULT_OK, intent); + finish(); + } + }).create().show(); + return super.onSingleTapConfirmed(e); + } + }); + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = mapView.getGraphicsOverlays(); + if (overlayGraphics.size() != 0) { + overlayGraphics.clear(); + } + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @OnClick({R.id.expandMapView, R.id.minusMapView, R.id.removeToLocalView}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.expandMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 0.5); + break; + case R.id.minusMapView: + mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); + break; + case R.id.removeToLocalView: + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + + } + } + }); + break; + default: + break; + } + } + + protected void onResume() { + super.onResume(); + mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.pause(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.dispose(); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 97682e3..4826307 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -39,7 +39,6 @@ import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; @@ -54,7 +53,6 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -65,6 +63,7 @@ public class CaseUploadQuicklyActivity extends BaseActivity implements View.OnClickListener, ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadImageView { + private static final String TAG = "QuicklyActivity"; private Context context = this; @BindView(R.id.leftBackView) @@ -101,7 +100,6 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 private String eorc; @@ -140,24 +138,8 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); imageAdapter = new ImageRecycleViewAdapter(this); - selectedResultView.setLayoutManager(new GridLayoutManager(this, 3)); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); selectedResultView.setAdapter(imageAdapter); - //九宫格点击事件 - imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { - @Override - public void onClick(int position) { - //查看大图 - showBigImage(selectList.get(position).getRealPath()); - } - }); - //删除按钮点击事件 - imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { - @Override - public void onClick(int position) { - selectList.remove(position); - imageAdapter.setMediaList(selectList); - } - }); } @Override @@ -165,7 +147,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -260,17 +242,8 @@ .create().show(); break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } +// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); + startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -284,11 +257,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -300,7 +272,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -310,22 +281,32 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - imageAdapter.setMediaList(selectList); + List selectList = PictureSelector.obtainMultipleResult(data); + if (selectList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); + return; + } + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: - selectList.add(PictureSelector.obtainMultipleResult(data).get(0)); - imageAdapter.setMediaList(selectList); + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); +// String pointJson = data.getStringExtra("pointJson"); +// Type type = new TypeToken() { +// }.getType(); +// LatLng latLng = gson.fromJson(pointJson, type); +// updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); break; default: break; @@ -333,6 +314,24 @@ } } + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityNameView.setText(buffer); + } + private void updateLocation(LatLng point) { double longitude = point.getLongitude(); longitudeView.setText(String.valueOf(longitude)); @@ -401,6 +400,7 @@ public void obtainUploadResult(UploadImageResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); /** * 系统路径static拼接图片返回路径 * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg @@ -409,10 +409,26 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - PictureFileUtils.deleteAllCacheDirFile(this); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); +// //删除按钮点击事件 +// imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { +// @Override +// public void onClick(int position) { +// selectList.remove(position); +// imageAdapter.setMediaList(selectList); +// } +// }); } } @@ -436,7 +452,7 @@ return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "崇仁县", "巴山镇", + "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", "361024", "361024100", description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java index d4ec0fe..028190f 100644 --- a/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MapBoxActivity.java @@ -64,9 +64,9 @@ @Override protected void setupTopBarLayout() { - mapTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.black)); - mapTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.lightGray)); - mapTopLayout.addLeftImageButton(R.drawable.ic_left_black, 0).setOnClickListener(new View.OnClickListener() { + mapTopLayout.setTitle("选择点位").setTextColor(ContextCompat.getColor(this, R.color.white)); + mapTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + mapTopLayout.addLeftImageButton(R.drawable.ic_left_white, 0).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); @@ -169,7 +169,6 @@ finish(); } }).create().show(); - return true; } }); @@ -200,7 +199,16 @@ } break; case R.id.removeToLocalView: - position = builder.zoom(15).build(); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + @Override + public void onLocationGet(Location location) { + if (location != null) { + LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); + CameraPosition position = builder.target(latLng).zoom(15).build(); + map.animateCamera(CameraUpdateFactory.newCameraPosition(position), 2000); + } + } + }); break; default: break; 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 0f5df93..ed00019 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -52,4 +52,7 @@ public static final String IP_KEY = "BASE_IP"; public static final String LOGIN_OUT_ACTION = "loginOut"; public static final String NOTICE_MSG = "receivePush"; + + public static final String BASE_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/2w/MapServer"; //底图图层 + public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer/0"; //部件点图层 } diff --git a/app/src/main/res/layout/activity_case_upload_quickly.xml b/app/src/main/res/layout/activity_case_upload_quickly.xml index a799254..a5b3395 100644 --- a/app/src/main/res/layout/activity_case_upload_quickly.xml +++ b/app/src/main/res/layout/activity_case_upload_quickly.xml @@ -270,7 +270,6 @@ android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginEnd="10dp" - android:layout_toStartOf="@id/imageUploadView" android:orientation="vertical"> - - + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_select_gridview.xml b/app/src/main/res/layout/item_select_gridview.xml index 5c9541b..5834e40 100644 --- a/app/src/main/res/layout/item_select_gridview.xml +++ b/app/src/main/res/layout/item_select_gridview.xml @@ -5,8 +5,8 @@ + android:background="@drawable/ic_delete_black" + android:visibility="gone" /> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 04296eb..c5da4e8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -18,5 +18,5 @@ (V)取事部件点:通过地图取点打开的地图窗口,直接在地图上单击,即可完成取事件点或部件点的操作,获取网格、坐标等信息。 pk.eyJ1IjoiMTgzMTA1ODE5MTYiLCJhIjoiY2tuN2hna2hhMG9hYzJ1bTFzamY0dXhsaCJ9.yWjMxHEHvXFe8c0AWT1bTQ - AAPK068bca9a1246485881b11f568444dc8ajG37wO52bDOv5NZgrAiOZstaEdqvG0bjKEZJX9gXgvR5Jq56g56eyswsu5ziFquD + AAPK93b60c1b1b064409aafaa03bc5bd3df1eM4wAH7Cxp9rfcD_AEmUqjuk3p2nq-P_tAiHCRh-iyuLIBqeDiKD0urjkJd42iCh diff --git a/app/src/test/java/com/casic/dcms/ExampleUnitTest.java b/app/src/test/java/com/casic/dcms/ExampleUnitTest.java deleted file mode 100644 index 66ab075..0000000 --- a/app/src/test/java/com/casic/dcms/ExampleUnitTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.dcms; - -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * Example local unit test, which will execute on the development machine (host). - * - * @see Testing documentation - */ -public class ExampleUnitTest { - @Test - public void addition_isCorrect() { - assertEquals(4, 2 + 2); - } -} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 81485d8..66d8065 100644 --- a/build.gradle +++ b/build.gradle @@ -44,6 +44,10 @@ //依赖库 maven { url 'https://jitpack.io' } mavenCentral() + //ArcGIS + maven { + url 'https://esri.jfrog.io/artifactory/arcgis' + } } }