From 8fc6ed7d2a16aa891bc2e8827c96ff10a286e9d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=82=96=E5=B2=A9=28=E7=A7=BB=E5=8A=A8=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E7=BB=84=29?= Date: Thu, 8 Jul 2021 15:29:00 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E6=8B=8D=E6=91=84=E8=A7=86=E9=A2=91=E7=A8=8B=E5=BA=8F=E5=B4=A9?= =?UTF-8?q?=E6=BA=83=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 2 + .../outdoor/activity/HomeActivity.java | 6 + .../outdoor/activity/LoginActivity.java | 9 +- .../outdoor/activity/MainActivity.java | 1 + .../outdoor/activity/PictureActivity.java | 64 ++++++--- .../com/navinfo/outdoor/api/Constant.java | 9 +- .../navinfo/outdoor/api/UserApplication.java | 11 +- .../outdoor/fragment/PoiVideoFragment.java | 2 +- .../outdoor/fragment/RoadFragment.java | 2 +- .../outdoor/fragment/TreasureFragment.java | 125 +++--------------- .../com/navinfo/outdoor/room/PoiDatabase.java | 7 + .../outdoor/util/MyTecentLocationSource.java | 34 +++++ .../outdoor/util/TecentLocationUtils.java | 121 +++++++++++++++++ app/src/main/res/layout/activity_picture.xml | 11 +- 15 files changed, 266 insertions(+), 140 deletions(-) create mode 100644 app/src/main/java/com/navinfo/outdoor/util/MyTecentLocationSource.java create mode 100644 app/src/main/java/com/navinfo/outdoor/util/TecentLocationUtils.java diff --git a/app/build.gradle b/app/build.gradle index 3b14d7f..10ef29a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 29 buildToolsVersion '29.0.2' - // ndkVersion '23.0.7123448' + ndkVersion '21.1.6352462' defaultConfig { applicationId "com.navinfo.outdoor" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e96e2e5..bcfdba8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,8 +71,10 @@ diff --git a/app/src/main/java/com/navinfo/outdoor/activity/HomeActivity.java b/app/src/main/java/com/navinfo/outdoor/activity/HomeActivity.java index 52548ea..1a5e670 100644 --- a/app/src/main/java/com/navinfo/outdoor/activity/HomeActivity.java +++ b/app/src/main/java/com/navinfo/outdoor/activity/HomeActivity.java @@ -22,6 +22,7 @@ import android.widget.TextView; import com.navinfo.outdoor.R; import com.google.android.material.tabs.TabLayout; import com.gyf.immersionbar.ImmersionBar; +import com.navinfo.outdoor.util.TecentLocationUtils; import org.greenrobot.eventbus.EventBus; @@ -124,4 +125,9 @@ public class HomeActivity extends BaseActivity{ super.onBackPressed(); } } + + @Override + protected void onDestroy() { + super.onDestroy(); + } } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/outdoor/activity/LoginActivity.java b/app/src/main/java/com/navinfo/outdoor/activity/LoginActivity.java index b2d9d99..a9bfc37 100644 --- a/app/src/main/java/com/navinfo/outdoor/activity/LoginActivity.java +++ b/app/src/main/java/com/navinfo/outdoor/activity/LoginActivity.java @@ -1,11 +1,14 @@ package com.navinfo.outdoor.activity; import android.content.Intent; +import android.content.res.Configuration; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; +import androidx.annotation.NonNull; + import com.navinfo.outdoor.R; import com.navinfo.outdoor.base.BaseActivity; @@ -64,6 +67,8 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener } } - - + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + super.onConfigurationChanged(newConfig); + } } diff --git a/app/src/main/java/com/navinfo/outdoor/activity/MainActivity.java b/app/src/main/java/com/navinfo/outdoor/activity/MainActivity.java index 02bb6b4..8c283b2 100644 --- a/app/src/main/java/com/navinfo/outdoor/activity/MainActivity.java +++ b/app/src/main/java/com/navinfo/outdoor/activity/MainActivity.java @@ -77,6 +77,7 @@ public class MainActivity extends BaseActivity { public void onFinish() { Intent intent = new Intent(MainActivity.this, LoginActivity.class); startActivity(intent); + MainActivity.this.finish(); } }.start(); } diff --git a/app/src/main/java/com/navinfo/outdoor/activity/PictureActivity.java b/app/src/main/java/com/navinfo/outdoor/activity/PictureActivity.java index 24f2f9a..7c6ab3f 100644 --- a/app/src/main/java/com/navinfo/outdoor/activity/PictureActivity.java +++ b/app/src/main/java/com/navinfo/outdoor/activity/PictureActivity.java @@ -29,6 +29,7 @@ import com.navinfo.outdoor.R; import com.navinfo.outdoor.api.Constant; import com.navinfo.outdoor.base.BaseActivity; +import com.navinfo.outdoor.util.MyTecentLocationSource; import com.navinfo.outdoor.util.NetWorkUtils; import com.navinfo.outdoor.util.SdkFolderCreate; import com.navinfo.outdoor.util.ToastUtil; @@ -43,18 +44,17 @@ import com.otaliastudios.cameraview.VideoResult; import com.otaliastudios.cameraview.controls.Engine; import com.otaliastudios.cameraview.controls.Mode; -import com.otaliastudios.cameraview.size.AspectRatio; -import com.otaliastudios.cameraview.size.SizeSelectors; import com.tencent.map.geolocation.TencentLocation; -import com.tencent.map.geolocation.TencentLocationListener; -import com.tencent.map.geolocation.TencentLocationManager; -import com.tencent.map.geolocation.TencentLocationRequest; -import com.tencent.tencentmap.mapsdk.maps.LocationSource; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; +import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; import com.tencent.tencentmap.mapsdk.maps.MapView; import com.tencent.tencentmap.mapsdk.maps.TencentMap; +import com.tencent.tencentmap.mapsdk.maps.TextureMapView; import com.tencent.tencentmap.mapsdk.maps.UiSettings; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; import com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle; @@ -69,27 +69,25 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; -import java.util.List; - -import static com.tencent.mapsdk.internal.aaa.getContext; +import static com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE; public class PictureActivity extends BaseActivity implements View.OnClickListener { private static final CameraLogger LOG = CameraLogger.create("Picture"); private CameraView camera; - private ImageButton capturePicture; +// private ImageButton capturePicture; private long captureTime = 0; private android.widget.Button btnSwitch; private TencentMap tencentMap; private MyLocationStyle locationStyle; -// private OnLocationChangedListener locationChangedListener; - private MapView ivMap; - private Button captureVideo; + private TextureMapView ivMap; + private Button captureVideo, stopVideo; private Button btnVideo; private ImageView ivPic; @Override protected int getLayout() { + EventBus.getDefault().register(this); return R.layout.activity_picture; } @@ -97,7 +95,7 @@ public class PictureActivity extends BaseActivity implements View.OnClickListene protected void initView() { super.initView(); this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); - ivMap = (MapView) findViewById(R.id.iv_map); + ivMap = (TextureMapView) findViewById(R.id.iv_map); ivPic = findViewById(R.id.iv_pic); btnVideo = findViewById(R.id.btn_video); btnVideo.setOnClickListener(this::onClick); @@ -111,13 +109,14 @@ public class PictureActivity extends BaseActivity implements View.OnClickListene camera.setOnClickListener(this::onClick); captureVideo = findViewById(R.id.capuretVideo); captureVideo.setOnClickListener(this::onClick); + + stopVideo = findViewById(R.id.btn_stop_video); + stopVideo.setOnClickListener(this::onClick); //拍照权限 camera.setLifecycleOwner(this); camera.setEngine(Engine.CAMERA1); //设置拍照的宽高 - //camera.setVideoSize(SizeSelectors.or(SizeSelectors.maxHeight(1000), SizeSelectors.smallest(), SizeSelectors.aspectRatio(AspectRatio.of(1, 1), 0))); - // camera.setVideoSize(SizeSelectors.or(SizeSelectors.maxHeight(Integer.parseInt(getIntent().getStringExtra("pic"))), SizeSelectors.aspectRatio(AspectRatio.of(1, 1), 0))); SdkFolderCreate.mkdirs(Constant.PICTURE_FOLDER); //获取地图 tencentMap = ivMap.getMap(); @@ -125,6 +124,8 @@ public class PictureActivity extends BaseActivity implements View.OnClickListene UiSettings uiSettings = tencentMap.getUiSettings(); //设置logo的大小 uiSettings.setLogoScale(0.7f); +// uiSettings.setAllGesturesEnabled(false); + setLocMarkerStyle(); // 设置当前位置显示样式 //相机预览监听 camera.addCameraListener(new CameraListener() { @@ -209,8 +210,10 @@ public class PictureActivity extends BaseActivity implements View.OnClickListene String format = formatter.format(calendar.getTime()); //文件 File file = new File(Constant.PICTURE_FOLDER, format + ".mp4"); - camera.takeVideo(file, 15000); + camera.takeVideo(file); break; + case R.id.btn_stop_video: + } } @@ -232,15 +235,17 @@ public class PictureActivity extends BaseActivity implements View.OnClickListene * 设置定位图标样式 */ private void setLocMarkerStyle() { + tencentMap.setLocationSource(new MyTecentLocationSource(this)); + tencentMap.setMyLocationEnabled(true); + locationStyle = new MyLocationStyle(); + locationStyle = locationStyle.myLocationType(LOCATION_TYPE_LOCATION_ROTATE); //创建图标 BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.location)); locationStyle.icon(bitmapDescriptor); //设置定位圆形区域的边框宽度; + locationStyle.fillColor(getResources().getColor(android.R.color.transparent)); locationStyle.strokeWidth(1); - //设置圆区域的颜色 - // locationStyle.fillColor(R.color.colormap); - // locationStyle.anchor(1000,2000); tencentMap.setMyLocationStyle(locationStyle); } @@ -288,7 +293,26 @@ public class PictureActivity extends BaseActivity implements View.OnClickListene protected void onDestroy() { super.onDestroy(); camera.destroy(); + if (EventBus.getDefault().isRegistered(this)) { + EventBus.getDefault().unregister(this); + } + } + @Subscribe(threadMode = ThreadMode.MAIN) + public void onEventMessageMainThread(Message msg) { + switch (msg.what) { + case Constant.EVENT_WHAT_LOCATION_CHANGE: // 用户位置更新 + if (tencentMap!=null) { + CameraUpdate cameraSigma = + CameraUpdateFactory.newCameraPosition(new CameraPosition( + new LatLng(Constant.currentLocation.getLatitude(),Constant.currentLocation.getLongitude()), //中心点坐标,地图目标经纬度 + 16, //目标缩放级别 + 0, //目标倾斜角 + 0)); //目标旋转角 0~360° (正北方为0) + tencentMap.animateCamera(cameraSigma); + } + break; + } } } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/outdoor/api/Constant.java b/app/src/main/java/com/navinfo/outdoor/api/Constant.java index dfc8373..1630c68 100644 --- a/app/src/main/java/com/navinfo/outdoor/api/Constant.java +++ b/app/src/main/java/com/navinfo/outdoor/api/Constant.java @@ -7,6 +7,7 @@ import com.tencent.map.geolocation.TencentLocation; import com.tencent.tencentmap.mapsdk.maps.MapView; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; +import com.tencent.tencentmap.mapsdk.maps.model.LatLng; /** * 常量 @@ -45,6 +46,7 @@ public class Constant { //message word 值 public static final int TREASURE_FRAGMENT = 100;//抽屉界面的展示和隐藏 public static final int TREASURE_WORD = 0;//poi 对地图页面marker 的一个展示 + public static final int CAPACITY_EVALUATION_PAGE = 1;//能力测评的页数 public static final int POI_WORD = 2;//地图页面marker 的经纬都回传 public static final int FILTER_LIST = 4;//筛选列表所有数据地图显示 public static final int FILTER_LIST_ITEM = 5;//点击筛选的item @@ -63,13 +65,13 @@ public class Constant { public static final int MAIN_OTHER = 23;//其他的Fragment 对地图页面marker 的一个展示 public static final int OTHER_WORD = 25;//地图页面marker 的经纬都回传 public static final int CHARGING_STATION_PILE = 26;//跳转到充电桩 传给数据 - public static final int CAPACITY_EVALUATION_PAGE = 1;//能力测评的页数 public static final int JOB_SEARCH_WORD = 28;//任务搜索的网络数据 public static final int JOB_SEARCH_POI_WORD = 29;//任务搜索的本地数据 public static final int GATHER_GET_MAP = 30;//地图点击marker 后弹窗点击开始采集 public static final int HOME_MINE = 32;//点击我的实时监听刷新 public static final int HOME_TREASURE = 33;//点击寻宝实时监听刷新 public static final int JOB_WORD_MONITOR=34;//筛选条件的刷新 + public static final int EVENT_WHAT_LOCATION_CHANGE = 35; // 定位位置更新的Event的What值 public static String USER_ATTESTATION_NAME; //实名认证姓名 银行卡 public static int NUMBER = 200; //任务个数 @@ -80,10 +82,7 @@ public class Constant { * 用户当前位置 */ public static TencentLocation currentLocation; - public static TencentLocation markerCurrentLocation; - public static double markerLatitude; - - public static double markerLongitude; + public static LatLng markerLatlng; //marker 图标 public static BitmapDescriptor POI_ICON = BitmapDescriptorFactory.fromResource(R.drawable.poi_icons); diff --git a/app/src/main/java/com/navinfo/outdoor/api/UserApplication.java b/app/src/main/java/com/navinfo/outdoor/api/UserApplication.java index 047b3e9..27d91f6 100644 --- a/app/src/main/java/com/navinfo/outdoor/api/UserApplication.java +++ b/app/src/main/java/com/navinfo/outdoor/api/UserApplication.java @@ -9,9 +9,12 @@ import com.lzy.okgo.cookie.CookieJarImpl; import com.lzy.okgo.cookie.store.DBCookieStore; import com.lzy.okgo.interceptor.HttpLoggingInterceptor; import com.lzy.okgo.model.HttpHeaders; +import com.navinfo.outdoor.util.SdkFolderCreate; +import com.navinfo.outdoor.util.TecentLocationUtils; import com.umeng.commonsdk.UMConfigure; import com.umeng.umcrash.UMCrash; +import java.io.File; import java.util.concurrent.TimeUnit; import java.util.logging.Level; @@ -36,6 +39,13 @@ public class UserApplication extends Application { UMCrash.generateCustomLog(e,"UmengException"); initOkGo(); + + // 初始化应用目录 + File baseFolder = new File(Constant.BASE_FOLDER); // 数据库文件夹路径 + if (!baseFolder.exists()) { + SdkFolderCreate.mkdirs(baseFolder.getAbsolutePath()); + } + TecentLocationUtils.getInstance(this).startLocation(this); } public static UserApplication getUserApplication() { @@ -81,5 +91,4 @@ public class UserApplication extends Application { } - } diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java index 131603f..e0efc5e 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java @@ -288,7 +288,7 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick break; case R.id.tv_pictures: - Intent intent = new Intent(getContext(), PicturesActivity.class); + Intent intent = new Intent(getContext(), PictureActivity.class); startActivity(intent); break; } diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/RoadFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/RoadFragment.java index ce40e01..fdf58e9 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/RoadFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/RoadFragment.java @@ -295,7 +295,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList break; case R.id.tv_pictures: - Intent intent = new Intent(getContext(), PicturesActivity.class); + Intent intent = new Intent(getContext(), PictureActivity.class); startActivity(intent); break; diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java index 588ed60..e4c82f9 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java @@ -52,28 +52,21 @@ import com.navinfo.outdoor.room.PoiDatabase; import com.navinfo.outdoor.room.PoiEntity; import com.navinfo.outdoor.util.Geohash; import com.navinfo.outdoor.util.GeometryTools; +import com.navinfo.outdoor.util.MyTecentLocationSource; import com.navinfo.outdoor.util.NetWorkUtils; import com.navinfo.outdoor.util.ToastUtil; -import com.sothree.slidinguppanel.ScrollableViewHelper; import com.sothree.slidinguppanel.SlidingUpPanelLayout; import com.tencent.map.geolocation.TencentLocation; -import com.tencent.map.geolocation.TencentLocationListener; -import com.tencent.map.geolocation.TencentLocationManager; -import com.tencent.map.geolocation.TencentLocationRequest; import com.tencent.tencentmap.mapsdk.maps.CameraUpdate; import com.tencent.tencentmap.mapsdk.maps.CameraUpdateFactory; -import com.tencent.tencentmap.mapsdk.maps.LocationSource; import com.tencent.tencentmap.mapsdk.maps.MapView; -import com.tencent.tencentmap.mapsdk.maps.Projection; import com.tencent.tencentmap.mapsdk.maps.TencentMap; -import com.tencent.tencentmap.mapsdk.maps.TencentMapContext; import com.tencent.tencentmap.mapsdk.maps.UiSettings; import com.tencent.tencentmap.mapsdk.maps.interfaces.Removable; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; import com.tencent.tencentmap.mapsdk.maps.model.CameraPosition; import com.tencent.tencentmap.mapsdk.maps.model.LatLng; -import com.tencent.tencentmap.mapsdk.maps.model.LatLngBounds; import com.tencent.tencentmap.mapsdk.maps.model.Marker; import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; import com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle; @@ -97,16 +90,13 @@ import okhttp3.OkHttpClient; * 寻宝的Fragment * 2021-5-25 */ -public class TreasureFragment extends BaseFragment implements View.OnClickListener, LocationSource, TencentLocationListener { +public class TreasureFragment extends BaseFragment implements View.OnClickListener { private MapView treasureMap; private TencentMap tencentMap; private CheckBox cbMapType; private ImageView ivZoomAdd; private ImageView ivZoomDel; - private TencentLocationManager locationManager; - private TencentLocationRequest locationRequest; private MyLocationStyle locationStyle; - private OnLocationChangedListener locationChangedListener; private ImageView ivLocation; private ImageView ivSubmit; private ImageView ivRefish; @@ -189,7 +179,6 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen //启用3d视图 tencentMap.setBuilding3dEffectEnable(true); - tencentMap.setOnCameraChangeListener(cameraChangeListener); //获取地图UI 设置对象 UiSettings uiSettings = tencentMap.getUiSettings(); //设置logo的大小 @@ -288,19 +277,6 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen }); } - private TencentMap.OnCameraChangeListener cameraChangeListener = new TencentMap.OnCameraChangeListener() { - @Override - public void onCameraChange(CameraPosition cameraPosition) { // 地图移动中 - - } - - @Override - public void onCameraChangeFinished(CameraPosition cameraPosition) { // 地图移动结束 - - - } - }; - private void initList(TencentLocation tencentLocation) { int task_type=Constant.TASK_TYPE; int limit_type=Constant.LIMIT_TTPE; @@ -779,17 +755,17 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen //移动地图 CameraUpdate cameraSigma = CameraUpdateFactory.newCameraPosition(new CameraPosition( - new LatLng(Constant.markerLatitude, Constant.markerLongitude), //中心点坐标,地图目标经纬度 + Constant.markerLatlng, //中心点坐标,地图目标经纬度 tencentMap.getCameraPosition().zoom, //目标缩放级别 tencentMap.getCameraPosition().tilt, //目标倾斜角[0.0 ~ 45.0] (垂直地图时为0) tencentMap.getCameraPosition().bearing)); //目标旋转角 0~360° (正北方为0) tencentMap.animateCamera(cameraSigma, new TencentMap.CancelableCallback() { @Override public void onFinish() { - screenPosition = tencentMap.getProjection().toScreenLocation(new LatLng(Constant.markerLatitude, Constant.markerLongitude)); + screenPosition = tencentMap.getProjection().toScreenLocation(Constant.markerLatlng); sliding_layout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED); //创建Marker对象之前,设置属性 - LatLng position = new LatLng(Constant.markerLatitude, Constant.markerLongitude); + LatLng position = Constant.markerLatlng; marker = tencentMap.addMarker(new MarkerOptions(position)); marker.setFixingPoint(screenPosition.x, screenPosition.y); } @@ -805,8 +781,7 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen LatLng latLng = tencentMap.getProjection().fromScreenLocation(screenPosition); marker.setPosition(latLng); marker.setFixingPointEnable(false); - Constant.markerLatitude = latLng.latitude; - Constant.markerLongitude = latLng.longitude; + Constant.markerLatlng = latLng; Message obtain = Message.obtain(); obtain.what = aInt; obtain.obj = latLng; @@ -821,7 +796,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen * 设置定位图标样式 */ private void setLocMarkerStyle() { - locationStyle = new MyLocationStyle(); + locationStyle= new MyLocationStyle(); + locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER); //创建图标 BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.location)); locationStyle.icon(bitmapDescriptor); @@ -837,16 +813,10 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen * 定位的一些初始化设置 */ private void initLocation() { -//用于访问腾讯定位服务的类, 周期性向客户端提供位置更新 - locationManager = TencentLocationManager.getInstance(getContext()); - //设置坐标系 - locationManager.setCoordinateType(TencentLocationManager.COORDINATE_TYPE_GCJ02); - //创建定位请求 - locationRequest = TencentLocationRequest.create(); //设置定位周期(位置监听器回调周期)为3s // locationRequest.setInterval(3000); //地图上设置定位数据源 - tencentMap.setLocationSource(this); + tencentMap.setLocationSource(new MyTecentLocationSource(getActivity())); //设置当前位置可见 tencentMap.setMyLocationEnabled(true); //设置定位图标样式 @@ -1082,63 +1052,6 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen } - @Override - public void activate(OnLocationChangedListener onLocationChangedListener) { - locationChangedListener = onLocationChangedListener; - int err = locationManager.requestLocationUpdates(locationRequest, this, Looper.myLooper()); - switch (err) { - case 1: - ToastUtil.showShort(getContext(), Constant.GET_ERR_MESSAGE1); - break; - case 2: - ToastUtil.showShort(getContext(), Constant.GET_ERR_MESSAGE2); - break; - case 3: - ToastUtil.showShort(getContext(), Constant.GET_ERR_MESSAGE3); - break; - default: - break; - } - } - - @Override - public void deactivate() { - locationManager.removeUpdates(this); - locationManager = null; - locationRequest = null; - locationChangedListener = null; - } - - /** - * 实现位置监听 - * - * @param tencentLocation - * @param i - * @param s - */ - @Override - public void onLocationChanged(TencentLocation tencentLocation, int i, String s) { - if (i == TencentLocation.ERROR_OK && locationChangedListener != null) { - Location location = new Location(tencentLocation.getProvider()); - //设置经纬度以及精度 - location.setLatitude(tencentLocation.getLatitude()); - location.setLongitude(tencentLocation.getLongitude()); - location.setAccuracy(tencentLocation.getAccuracy()); - locationChangedListener.onLocationChanged(location); - locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER); - Constant.currentLocation = tencentLocation; - Constant.markerCurrentLocation = tencentLocation; - Constant.markerLatitude = tencentLocation.getLatitude(); - Constant.markerLongitude = tencentLocation.getLongitude(); - } - } - - @Override - public void onStatusUpdate(String s, int i, String s1) { - //GPS, WiFi, Radio 等状态发生变化 - Log.v("State changed", s + "===" + s1); - } - @Override public boolean onBackPressed() { getActivity().finish(); @@ -1151,16 +1064,16 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen * @return */ public LatLng getMapCenterPoint() { - int left = treasureMap.getLeft(); - int top = treasureMap.getTop(); - int right = treasureMap.getRight(); - int bottom = treasureMap.getBottom(); - // 获得屏幕点击的位置 - int x = (int) (treasureMap.getX() + (right - left) / 2); - int y = (int) (treasureMap.getY() + (bottom - top) / 2); - Projection projection = tencentMap.getProjection(); - LatLng pt = projection.fromScreenLocation(new Point(x, y)); - return pt; +// int left = treasureMap.getLeft(); +// int top = treasureMap.getTop(); +// int right = treasureMap.getRight(); +// int bottom = treasureMap.getBottom(); +// // 获得屏幕点击的位置 +// int x = (int) (treasureMap.getX() + (right - left) / 2); +// int y = (int) (treasureMap.getY() + (bottom - top) / 2); +// Projection projection = tencentMap.getProjection(); +// LatLng pt = projection.fromScreenLocation(new Point(x, y)); + return tencentMap.getCameraPosition().target; } } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/outdoor/room/PoiDatabase.java b/app/src/main/java/com/navinfo/outdoor/room/PoiDatabase.java index 54b3393..98aafa0 100644 --- a/app/src/main/java/com/navinfo/outdoor/room/PoiDatabase.java +++ b/app/src/main/java/com/navinfo/outdoor/room/PoiDatabase.java @@ -10,6 +10,9 @@ import androidx.room.migration.Migration; import androidx.sqlite.db.SupportSQLiteDatabase; import com.navinfo.outdoor.api.Constant; +import com.navinfo.outdoor.util.SdkFolderCreate; + +import java.io.File; @Database(entities = {PoiEntity.class,ChargingPileEntity.class}, version = 1, exportSchema = false) public abstract class PoiDatabase extends RoomDatabase { @@ -23,6 +26,10 @@ public abstract class PoiDatabase extends RoomDatabase { return instance; } private static PoiDatabase create(final Context context) { + File dbFolder = new File(Constant.POI_DAO); // 数据库文件夹路径 + if (!dbFolder.exists()) { + SdkFolderCreate.mkdirs(dbFolder.getAbsolutePath()); + } return Room.databaseBuilder(context, PoiDatabase.class, Constant.POI_DAO+DB_NAME) .addMigrations(migration_1_2) .addMigrations(migration_2_3) diff --git a/app/src/main/java/com/navinfo/outdoor/util/MyTecentLocationSource.java b/app/src/main/java/com/navinfo/outdoor/util/MyTecentLocationSource.java new file mode 100644 index 0000000..d7df8cb --- /dev/null +++ b/app/src/main/java/com/navinfo/outdoor/util/MyTecentLocationSource.java @@ -0,0 +1,34 @@ +package com.navinfo.outdoor.util; + +import android.content.Context; +import com.tencent.tencentmap.mapsdk.maps.LocationSource; + + +/** + * 腾讯地图的当前位置数据源 + * */ +public class MyTecentLocationSource implements LocationSource{ + private OnLocationChangedListener locationChangedListener; + private Context mContext; + /** + * 初始化locationSource,务必在MapActivity界面中调用,保证传入的Context在整个应用生命周期中不会被销毁 + * */ + public MyTecentLocationSource(Context mContext) { + this.mContext = mContext; + } + + @Override + public void activate(OnLocationChangedListener onLocationChangedListener) { + locationChangedListener = onLocationChangedListener; + TecentLocationUtils.getInstance(mContext).getLocationChangedListenerList().add(onLocationChangedListener); + } + + @Override + public void deactivate() { + if (locationChangedListener!=null) { + TecentLocationUtils.getInstance(mContext).getLocationChangedListenerList().remove(locationChangedListener); + } + } + + +} diff --git a/app/src/main/java/com/navinfo/outdoor/util/TecentLocationUtils.java b/app/src/main/java/com/navinfo/outdoor/util/TecentLocationUtils.java new file mode 100644 index 0000000..8093fe0 --- /dev/null +++ b/app/src/main/java/com/navinfo/outdoor/util/TecentLocationUtils.java @@ -0,0 +1,121 @@ +package com.navinfo.outdoor.util; + +import android.content.Context; +import android.location.Location; +import android.os.Looper; +import android.os.Message; +import android.util.Log; + +import com.navinfo.outdoor.api.Constant; +import com.tencent.map.geolocation.TencentLocation; +import com.tencent.map.geolocation.TencentLocationListener; +import com.tencent.map.geolocation.TencentLocationManager; +import com.tencent.map.geolocation.TencentLocationRequest; +import com.tencent.tencentmap.mapsdk.maps.LocationSource; + +import org.greenrobot.eventbus.EventBus; + +import java.util.ArrayList; +import java.util.List; + +public class TecentLocationUtils implements TencentLocationListener{ + private TencentLocationManager locationManager; + private TencentLocationRequest locationRequest; + private List locationChangedListenerList; + private boolean isLocationStart; // 标识是否已经启动定位 + + private static TecentLocationUtils instance; + + public static TecentLocationUtils getInstance(Context mContext) { + if (instance == null) { + instance = new TecentLocationUtils(mContext); + } + return instance; + } + + public TecentLocationUtils(Context mContext) { + init(mContext); + } + + private void init(Context mContext) { + locationChangedListenerList = new ArrayList<>(); + //用于访问腾讯定位服务的类, 周期性向客户端提供位置更新 + locationManager = TencentLocationManager.getInstance(mContext); + //设置坐标系 + locationManager.setCoordinateType(TencentLocationManager.COORDINATE_TYPE_GCJ02); + //创建定位请求 + locationRequest = TencentLocationRequest.create(); + locationRequest.setInterval(2000); // 每2秒返回一次地址数据 + } + + public void startLocation(Context mContext) { // 启动定位服务 + if (locationManager == null) { + this.init(mContext); + } + if (!isLocationStart) { + int err = locationManager.requestLocationUpdates(locationRequest, this, Looper.myLooper()); + isLocationStart = true; + switch (err) { + case 1: + ToastUtil.showShort(mContext, Constant.GET_ERR_MESSAGE1); + break; + case 2: + ToastUtil.showShort(mContext, Constant.GET_ERR_MESSAGE2); + break; + case 3: + ToastUtil.showShort(mContext, Constant.GET_ERR_MESSAGE3); + break; + default: + break; + } + } + } + + public void stopLocation() { // 停止定位服务 + if (isLocationStart) { + locationManager.removeUpdates(this); + locationManager = null; + locationRequest = null; + locationChangedListenerList.clear(); + locationChangedListenerList = null; + } + } + + /** + * 实现位置监听 + * + * @param tencentLocation + * @param i + * @param s + */ + @Override + public void onLocationChanged(TencentLocation tencentLocation, int i, String s) { + if (i == TencentLocation.ERROR_OK) { + Location location = new Location(tencentLocation.getProvider()); + //设置经纬度以及精度 + location.setLatitude(tencentLocation.getLatitude()); + location.setLongitude(tencentLocation.getLongitude()); + location.setAccuracy(tencentLocation.getAccuracy()); + if (locationChangedListenerList!=null) { + for (LocationSource.OnLocationChangedListener locationChangedListener:locationChangedListenerList) { + locationChangedListener.onLocationChanged(location); + } + } + Constant.currentLocation = tencentLocation; + Message currentLocationMsg = Message.obtain(); + currentLocationMsg.what = Constant.EVENT_WHAT_LOCATION_CHANGE; + currentLocationMsg.obj = Constant.currentLocation; + EventBus.getDefault().post(currentLocationMsg); + } + } + + @Override + public void onStatusUpdate(String s, int i, String s1) { + //GPS, WiFi, Radio 等状态发生变化 + Log.v("State changed", s + "===" + s1); + } + + public List getLocationChangedListenerList() { + return locationChangedListenerList; + } +} diff --git a/app/src/main/res/layout/activity_picture.xml b/app/src/main/res/layout/activity_picture.xml index 3f6a90c..1b536cc 100644 --- a/app/src/main/res/layout/activity_picture.xml +++ b/app/src/main/res/layout/activity_picture.xml @@ -14,10 +14,14 @@ app:layout_constraintTop_toTopOf="parent" /> - @@ -28,6 +32,7 @@ android:layout_marginTop="20dp" android:layout_marginRight="20dp" android:text="切换" + android:visibility="gone" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" />