添加地图定位功能

This commit is contained in:
ZhanGSKen
2025-02-24 15:20:51 +08:00
parent bb089a4eb1
commit ca16a8677a
17 changed files with 1237 additions and 456 deletions

View File

@@ -6,7 +6,7 @@
# http://www.gradle.org/docs/current/userguide/build_environment.html # http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process. # Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings. # The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m org.gradle.jvmargs=-Xmx4096m
# When configured, Gradle will run in incubating parallel mode. # When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit # This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
@@ -18,7 +18,7 @@ android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX # Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true android.enableJetifier=true
#org.gradle.caching=true org.gradle.caching=true
android.disableAutomaticComponentCreation=true android.disableAutomaticComponentCreation=true

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl = https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip distributionUrl = https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@@ -4,6 +4,7 @@
位置应用,与卫星定位有关的应用。可以根据设定的位置与时间条件判断,来发送通知的应用。 位置应用,与卫星定位有关的应用。可以根据设定的位置与时间条件判断,来发送通知的应用。
#### 软件架构 #### 软件架构
以腾讯位置服务SDK源码为基础。源码地址https://lbs.qq.com/mobile/androidMapSDK/developerGuide/configuration
适配安卓应用 [AIDE Pro] 的 Gradle 编译结构。 适配安卓应用 [AIDE Pro] 的 Gradle 编译结构。
也适配安卓应用 [AndroidIDE] 的 Gradle 编译结构。 也适配安卓应用 [AndroidIDE] 的 Gradle 编译结构。

View File

@@ -56,6 +56,9 @@ android {
} }
dependencies { dependencies {
// 定位服务
implementation 'com.google.android.gms:play-services-location:20.0.0'
implementation fileTree(include: ['*.jar'], dir: 'libs') implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.appcompat:appcompat:1.1.0'

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Mon Feb 24 00:05:11 GMT 2025 #Mon Feb 24 07:18:15 GMT 2025
stageCount=0 stageCount=0
libraryProject= libraryProject=
baseVersion=1.0 baseVersion=1.0
publishVersion=1.0.0 publishVersion=1.0.0
buildCount=93 buildCount=147
baseBetaVersion=1.0.1 baseBetaVersion=1.0.1

View File

@@ -1,23 +1,38 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version='1.0' encoding='utf-8'?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
package="cc.winboll.studio.positions"> package="cc.winboll.studio.positions">
<!-- 访问网络. 某些位置信息需要从网络服务器获取 -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- 访问WiFi状态. 需要WiFi信息用于网络定位 --> <!-- 拥有完全的网络访问权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 修改WiFi状态. 发起WiFi扫描, 需要WiFi信息用于网络定位 --> <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 访问网络状态, 检测网络的可用性. 需要网络运营商相关信息用于网络定位 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 访问网络的变化, 需要某些信息用于网络定位 --> <!-- 查看网络连接 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 访问手机当前状态, 需要device id用于网络定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 查看WLAN连接 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 修改或删除您共享存储空间中的内容 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!-- 读取您共享存储空间中的内容 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 读取手机状态和身份 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- 只能在前台获取精确的位置信息 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- 只能在前台获取大概位置(基于网络) -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!-- 连接WLAN网络和断开连接 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!-- 更改网络连接性 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<application <application
android:name=".App" android:name=".App"
@@ -28,510 +43,699 @@
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/MyAppTheme" android:theme="@style/MyAppTheme"
android:usesCleartextTraffic="true" android:usesCleartextTraffic="true"
android:requestLegacyExternalStorage="true"
tools:ignore="AllowBackup,GoogleAppIndexingWarning" tools:ignore="AllowBackup,GoogleAppIndexingWarning"
tools:targetApi="p"> tools:targetApi="q">
<activity android:name=".MainActivity">
<intent-filter> <activity android:name=".MainActivity">
<action android:name="android.intent.action.MAIN" />
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name=".MainActivity2">
</activity>
<activity android:name="com.tencent.map.vector.demo.DemoMainActivity"> <activity android:name="com.tencent.map.vector.demo.DemoMainActivity">
</activity> </activity>
<activity <activity
android:name="com.tencent.map.vector.demo.basic.MapViewActivity" android:name="com.tencent.map.vector.demo.basic.MapViewActivity"
android:description="@string/demo_description_show_map" android:description="@string/demo_description_show_map"
android:label="@string/demo_label_show_map"> android:label="@string/demo_label_show_map">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_basic" /> android:value="@string/demo_type_basic"/>
</activity> </activity>
<activity <activity
android:name=".basic.SetMapTypeActivity" android:name=".basic.SetMapTypeActivity"
android:description="@string/demo_description_map_type" android:description="@string/demo_description_map_type"
android:label="@string/demo_label_map_type"> android:label="@string/demo_label_map_type">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_basic" /> android:value="@string/demo_type_basic"/>
</activity> </activity>
<activity <activity
android:name=".basic.MapRenderLayerActivity" android:name=".basic.MapRenderLayerActivity"
android:description="@string/demo_description_show_mapRenderLayer" android:description="@string/demo_description_show_mapRenderLayer"
android:label="@string/demo_label_show_mapRenderLayer"> android:label="@string/demo_label_show_mapRenderLayer">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_basic" /> android:value="@string/demo_type_basic"/>
</activity> </activity>
<activity <activity
android:name=".location.LocationLayerActivity" android:name=".location.LocationLayerActivity"
android:description="@string/demo_description_show_location" android:description="@string/demo_description_show_location"
android:label="@string/demo_label_show_location"> android:label="@string/demo_label_show_location">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_location" /> android:value="@string/demo_type_location"/>
</activity> </activity>
<activity <activity
android:name=".location.LocationPointActivity" android:name=".location.LocationPointActivity"
android:description="@string/demo_description_change_location_style" android:description="@string/demo_description_change_location_style"
android:label="@string/demo_label_change_location_style"> android:label="@string/demo_label_change_location_style">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_location" /> android:value="@string/demo_type_location"/>
</activity> </activity>
<activity <activity
android:name=".basic.IndoorMapActivity" android:name=".basic.IndoorMapActivity"
android:description="@string/demo_description_indoor_map" android:description="@string/demo_description_indoor_map"
android:label="@string/demo_label_indoor_map"> android:label="@string/demo_label_indoor_map">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_basic" /> android:value="@string/demo_type_basic"/>
</activity> </activity>
<activity <activity
android:name=".basic.OverseaMapActivity" android:name=".basic.OverseaMapActivity"
android:description="@string/demo_description_oversea" android:description="@string/demo_description_oversea"
android:label="@string/demo_label_oversea"> android:label="@string/demo_label_oversea">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_basic" /> android:value="@string/demo_type_basic"/>
</activity> </activity>
<activity <activity
android:name=".basic.MapStyleDemoActivity" android:name=".basic.MapStyleDemoActivity"
android:description="@string/demo_description_style" android:description="@string/demo_description_style"
android:label="@string/demo_label_style"> android:label="@string/demo_label_style">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_basic" /> android:value="@string/demo_type_basic"/>
</activity> </activity>
<activity <activity
android:name=".basic.UiSettingsActivity" android:name=".basic.UiSettingsActivity"
android:description="@string/demo_description_ui" android:description="@string/demo_description_ui"
android:label="@string/demo_label_ui"> android:label="@string/demo_label_ui">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_interactive" /> android:value="@string/demo_type_interactive"/>
</activity> </activity>
<activity <activity
android:name=".gesture.GestureSettingsActivity" android:name=".gesture.GestureSettingsActivity"
android:description="@string/demo_description_gesture" android:description="@string/demo_description_gesture"
android:label="@string/demo_label_gesture"> android:label="@string/demo_label_gesture">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_interactive" /> android:value="@string/demo_type_interactive"/>
</activity> </activity>
<activity <activity
android:name=".transaction.ZoomMapActivity" android:name=".transaction.ZoomMapActivity"
android:description="@string/demo_description_modify_zoom" android:description="@string/demo_description_modify_zoom"
android:label="@string/demo_label_modify_zoom"> android:label="@string/demo_label_modify_zoom">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_interactive" /> android:value="@string/demo_type_interactive"/>
</activity> </activity>
<activity <activity
android:name=".camera.MapCameraCenterActivity" android:name=".camera.MapCameraCenterActivity"
android:description="@string/demo_description_modify_map_center" android:description="@string/demo_description_modify_map_center"
android:label="@string/demo_label_modify_map_center"> android:label="@string/demo_label_modify_map_center">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_interactive" /> android:value="@string/demo_type_interactive"/>
</activity> </activity>
<activity <activity
android:name=".camera.MapBoundActivity" android:name=".camera.MapBoundActivity"
android:description="@string/demo_description_map_bound" android:description="@string/demo_description_map_bound"
android:label="@string/demo_label_map_bound"> android:label="@string/demo_label_map_bound">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_interactive" /> android:value="@string/demo_type_interactive"/>
</activity> </activity>
<activity <activity
android:name=".poi.PoiClickActivity" android:name=".poi.PoiClickActivity"
android:description="@string/demo_description_click_poi" android:description="@string/demo_description_click_poi"
android:label="@string/demo_label_click_poi"> android:label="@string/demo_label_click_poi">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_interactive" /> android:value="@string/demo_type_interactive"/>
</activity> </activity>
<activity <activity
android:name=".transaction.AnimateCameraActivity" android:name=".transaction.AnimateCameraActivity"
android:description="@string/demo_description_animate_camera" android:description="@string/demo_description_animate_camera"
android:label="@string/demo_label_animate_camera"> android:label="@string/demo_label_animate_camera">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_interactive" /> android:value="@string/demo_type_interactive"/>
</activity> </activity>
<activity <activity
android:name=".camera.MapAnchorZoomActivity" android:name=".camera.MapAnchorZoomActivity"
android:description="@string/demo_description_map_camera_anchor" android:description="@string/demo_description_map_camera_anchor"
android:label="@string/demo_label_map_camera_anchor"> android:label="@string/demo_label_map_camera_anchor">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_interactive" /> android:value="@string/demo_type_interactive"/>
</activity> </activity>
<activity <activity
android:name=".transaction.ScollMapActivity" android:name=".transaction.ScollMapActivity"
android:description="@string/demo_description_camera_translation" android:description="@string/demo_description_camera_translation"
android:label="@string/demo_label_camera_translation"> android:label="@string/demo_label_camera_translation">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_transformation" /> android:value="@string/demo_type_transformation"/>
</activity> </activity>
<activity <activity
android:name=".transaction.RotateMapActivity" android:name=".transaction.RotateMapActivity"
android:description="@string/demo_description_camera_rotation" android:description="@string/demo_description_camera_rotation"
android:label="@string/demo_label_camera_rotation"> android:label="@string/demo_label_camera_rotation">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_transformation" /> android:value="@string/demo_type_transformation"/>
</activity> </activity>
<activity <activity
android:name=".transaction.ZoomCalulateActivity" android:name=".transaction.ZoomCalulateActivity"
android:description="@string/demo_description_camera_include_points" android:description="@string/demo_description_camera_include_points"
android:label="@string/demo_label_camera_include_points"> android:label="@string/demo_label_camera_include_points">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_transformation" /> android:value="@string/demo_type_transformation"/>
</activity> </activity>
<activity <activity
android:name=".transaction.MoveCameraActivity" android:name=".transaction.MoveCameraActivity"
android:description="@string/demo_description_camera_change_listener" android:description="@string/demo_description_camera_change_listener"
android:label="@string/demo_label_camera_change_listener"> android:label="@string/demo_label_camera_change_listener">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_transformation" /> android:value="@string/demo_type_transformation"/>
</activity> </activity>
<activity <activity
android:name=".gesture.MapListenActivity" android:name=".gesture.MapListenActivity"
android:description="@string/demo_description_map_click_listener" android:description="@string/demo_description_map_click_listener"
android:label="@string/demo_label_map_click_listener"> android:label="@string/demo_label_map_click_listener">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_transformation" /> android:value="@string/demo_type_transformation"/>
</activity> </activity>
<activity <activity
android:name=".gesture.MapLongClickActivity" android:name=".gesture.MapLongClickActivity"
android:description="@string/demo_description_map_long_click_listener" android:description="@string/demo_description_map_long_click_listener"
android:label="@string/demo_label_map_long_click_listener"> android:label="@string/demo_label_map_long_click_listener">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_transformation" /> android:value="@string/demo_type_transformation"/>
</activity> <!-- 标注 -->
</activity>
<activity <activity
android:name=".marker.SimpleMarkerActivity" android:name=".marker.SimpleMarkerActivity"
android:description="@string/demo_description_simple_marker" android:description="@string/demo_description_simple_marker"
android:label="@string/demo_label_simple_marker"> android:label="@string/demo_label_simple_marker">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_marker" /> android:value="@string/demo_type_marker"/>
</activity> </activity>
<activity <activity
android:name=".marker.MarkerCollisions" android:name=".marker.MarkerCollisions"
android:description="@string/demo_description_collisions_marker" android:description="@string/demo_description_collisions_marker"
android:label="@string/demo_label_collisions_marker"> android:label="@string/demo_label_collisions_marker">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_marker" /> android:value="@string/demo_type_marker"/>
</activity> </activity>
<activity <activity
android:name=".marker.MarkerOptionsActivity" android:name=".marker.MarkerOptionsActivity"
android:description="@string/demo_description_marker_options" android:description="@string/demo_description_marker_options"
android:label="@string/demo_label_marker_options"> android:label="@string/demo_label_marker_options">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_marker" /> android:value="@string/demo_type_marker"/>
</activity> </activity>
<activity <activity
android:name=".marker.MarkerClickActivity" android:name=".marker.MarkerClickActivity"
android:description="@string/demo_description_marker_click_listener" android:description="@string/demo_description_marker_click_listener"
android:label="@string/demo_label_marker_click_listener"> android:label="@string/demo_label_marker_click_listener">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_marker" /> android:value="@string/demo_type_marker"/>
</activity> </activity>
<activity <activity
android:name=".marker.MarkerDragActivity" android:name=".marker.MarkerDragActivity"
android:description="@string/demo_description_marker_drag_listener" android:description="@string/demo_description_marker_drag_listener"
android:label="@string/demo_label_marker_drag_listener"> android:label="@string/demo_label_marker_drag_listener">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_marker" /> android:value="@string/demo_type_marker"/>
</activity> </activity>
<activity <activity
android:name=".marker.MarkerInfoWindowActivity" android:name=".marker.MarkerInfoWindowActivity"
android:description="@string/demo_description_infowindow_click_listener" android:description="@string/demo_description_infowindow_click_listener"
android:label="@string/demo_label_infowindow_click_listener"> android:label="@string/demo_label_infowindow_click_listener">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_marker" /> android:value="@string/demo_type_marker"/>
</activity> </activity>
<activity <activity
android:name=".marker.MarkerClusterActivity" android:name=".marker.MarkerClusterActivity"
android:description="@string/demo_description_marker_cluster" android:description="@string/demo_description_marker_cluster"
android:label="@string/demo_label_marker_cluster"> android:label="@string/demo_label_marker_cluster">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_marker" /> android:value="@string/demo_type_marker"/>
</activity> </activity>
<activity <activity
android:name=".marker.MarkerAnimation" android:name=".marker.MarkerAnimation"
android:description="@string/demo_description_marker_animation" android:description="@string/demo_description_marker_animation"
android:label="@string/demo_label_marker_animation"> android:label="@string/demo_label_marker_animation">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_marker" /> android:value="@string/demo_type_marker"/>
</activity> </activity>
<activity <activity
android:name=".heatoverlay.DrawHeatOverlayActivity" android:name=".heatoverlay.DrawHeatOverlayActivity"
android:description="@string/demo_description_heat_map" android:description="@string/demo_description_heat_map"
android:label="@string/demo_label_heat_map"> android:label="@string/demo_label_heat_map">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> </activity>
<activity <activity
android:name=".polygon.TileOverlayActivity" android:name=".polygon.TileOverlayActivity"
android:description="@string/demo_description_tileOverlay_map" android:description="@string/demo_description_tileOverlay_map"
android:label="@string/demo_label_tileOverlay_map"> android:label="@string/demo_label_tileOverlay_map">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> </activity>
<activity <activity
android:name=".polyline.DrawLineActivity" android:name=".polyline.DrawLineActivity"
android:description="@string/demo_description_polyline" android:description="@string/demo_description_polyline"
android:label="@string/demo_label_polyline"> android:label="@string/demo_label_polyline">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> </activity>
<activity <activity
android:name=".polyline.MutablePolylineActivity" android:name=".polyline.MutablePolylineActivity"
android:description="@string/demo_description_mutable_polyline" android:description="@string/demo_description_mutable_polyline"
android:label="@string/demo_label_mutable_polyline"> android:label="@string/demo_label_mutable_polyline">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> </activity>
<activity <activity
android:name=".polygon.DrawPolygonActivity" android:name=".polygon.DrawPolygonActivity"
android:description="@string/demo_description_polygon" android:description="@string/demo_description_polygon"
android:label="@string/demo_label_polygon"> android:label="@string/demo_label_polygon">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> </activity>
<activity <activity
android:name=".circle.DrawCircleActivity" android:name=".circle.DrawCircleActivity"
android:description="@string/demo_description_circle" android:description="@string/demo_description_circle"
android:label="@string/demo_label_circle"> android:label="@string/demo_label_circle">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> </activity>
<activity <activity
android:name=".circle.ArcActivity" android:name=".circle.ArcActivity"
android:description="@string/demo_description_arc" android:description="@string/demo_description_arc"
android:label="@string/demo_label_arc"> android:label="@string/demo_label_arc">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> </activity>
<activity <activity
android:name=".search.WalkingRouteActivity" android:name=".search.WalkingRouteActivity"
android:description="@string/demo_description_walking_plan" android:description="@string/demo_description_walking_plan"
android:label="@string/demo_label_walking_plan"> android:label="@string/demo_label_walking_plan">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_route_plan" /> android:value="@string/demo_type_route_plan"/>
</activity> </activity>
<activity <activity
android:name=".search.DrivingRouteActivity" android:name=".search.DrivingRouteActivity"
android:description="@string/demo_description_driving_plan" android:description="@string/demo_description_driving_plan"
android:label="@string/demo_label_driving_plan"> android:label="@string/demo_label_driving_plan">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_route_plan" /> android:value="@string/demo_type_route_plan"/>
</activity> </activity>
<activity <activity
android:name=".search.TransitRouteActivity" android:name=".search.TransitRouteActivity"
android:description="@string/demo_description_transit_plan" android:description="@string/demo_description_transit_plan"
android:label="@string/demo_label_transit_plan"> android:label="@string/demo_label_transit_plan">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_route_plan" /> android:value="@string/demo_type_route_plan"/>
</activity> </activity>
<activity <activity
android:name=".search.TruckingRouteActivity" android:name=".search.TruckingRouteActivity"
android:description="@string/demo_description_truking_plan" android:description="@string/demo_description_truking_plan"
android:label="@string/demo_label_truking_plan"> android:label="@string/demo_label_truking_plan">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_route_plan" /> android:value="@string/demo_type_route_plan"/>
</activity> </activity>
<activity <activity
android:name=".search.SearchBasicActivity" android:name=".search.SearchBasicActivity"
android:description="@string/demo_description_basic_search" android:description="@string/demo_description_basic_search"
android:label="@string/demo_label_basic_search"> android:label="@string/demo_label_basic_search">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_search" /> android:value="@string/demo_type_search"/>
</activity> </activity>
<activity <activity
android:name=".search.GeoCoderActivity" android:name=".search.GeoCoderActivity"
android:description="@string/demo_description_geocoder" android:description="@string/demo_description_geocoder"
android:label="@string/demo_label_geocoder"> android:label="@string/demo_label_geocoder">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_search" /> android:value="@string/demo_type_search"/>
</activity> </activity>
<activity <activity
android:name=".search.DistrictActivity" android:name=".search.DistrictActivity"
android:description="@string/demo_description_district" android:description="@string/demo_description_district"
android:label="@string/demo_label_district"> android:label="@string/demo_label_district">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_search" /> android:value="@string/demo_type_search"/>
</activity> </activity>
<activity <activity
android:name=".polyline.LineTextActivity" android:name=".polyline.LineTextActivity"
android:description="@string/demo_description_line_text" android:description="@string/demo_description_line_text"
android:label="@string/demo_label_line_text"> android:label="@string/demo_label_line_text">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_special" /> android:value="@string/demo_type_special"/>
</activity> </activity>
<activity <activity
android:name=".utils.BitMapActivity" android:name=".utils.BitMapActivity"
android:description="@string/demo_description_bitmap" android:description="@string/demo_description_bitmap"
android:enabled="false" android:enabled="false"
android:label="@string/demo_label_bitmap"> android:label="@string/demo_label_bitmap">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_tools" /> android:value="@string/demo_type_tools"/>
</activity> </activity>
<activity <activity
android:name=".utils.SnapshotActivity" android:name=".utils.SnapshotActivity"
android:description="@string/demo_description_map_snapshot" android:description="@string/demo_description_map_snapshot"
android:label="@string/demo_label_map_snapshot"> android:label="@string/demo_label_map_snapshot">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_tools" /> android:value="@string/demo_type_tools"/>
</activity> </activity>
<activity <activity
android:name=".utils.CoordinateActivity" android:name=".utils.CoordinateActivity"
android:description="@string/demo_description_projection" android:description="@string/demo_description_projection"
android:label="@string/demo_label_projection"> android:label="@string/demo_label_projection">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_tools" /> android:value="@string/demo_type_tools"/>
</activity> </activity>
<activity android:name=".basic.SupportMapFragmentActivity" />
<activity android:name=".basic.SupportMapFragmentActivity"/>
<activity <activity
android:name=".marker.CustomRenderActivity" android:name=".marker.CustomRenderActivity"
android:description="@string/demo_description_opengl" android:description="@string/demo_description_opengl"
android:label="@string/demo_label_opengl"> android:label="@string/demo_label_opengl">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> </activity>
<activity <activity
android:name=".marker.GroundOverlayActivity" android:name=".marker.GroundOverlayActivity"
android:description="@string/demo_description_overlay" android:description="@string/demo_description_overlay"
android:label="@string/demo_label_ground_overlay"> android:label="@string/demo_label_ground_overlay">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> </activity>
<activity <activity
android:name=".marker.AoiLayerActivity" android:name=".marker.AoiLayerActivity"
android:description="@string/demo_description_aoi" android:description="@string/demo_description_aoi"
android:label="@string/demo_label_aoi"> android:label="@string/demo_label_aoi">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> </activity>
<activity <activity
android:name=".heatoverlay.VectorHeatMapActivity" android:name=".heatoverlay.VectorHeatMapActivity"
android:description="@string/demo_description_vectorheatmap" android:description="@string/demo_description_vectorheatmap"
android:label="@string/demo_label_vectorheatmap"> android:label="@string/demo_label_vectorheatmap">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> </activity>
<activity <activity
android:name=".heatoverlay.ArcLineLayerActivity" android:name=".heatoverlay.ArcLineLayerActivity"
android:description="@string/demo_description_arcline" android:description="@string/demo_description_arcline"
android:label="@string/demo_label_arcline_map"> android:label="@string/demo_label_arcline_map">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> </activity>
<activity <activity
android:name=".heatoverlay.HeatMapVectorOverlayActivity" android:name=".heatoverlay.HeatMapVectorOverlayActivity"
android:description="@string/demo_description_3dheatmap" android:description="@string/demo_description_3dheatmap"
android:label="@string/demo_label_3d_heat_map"> android:label="@string/demo_label_3d_heat_map">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> </activity>
<activity <activity
android:name=".heatoverlay.AggregationOverlayActivity" android:name=".heatoverlay.AggregationOverlayActivity"
android:description="@string/demo_description_AggregationOverlay" android:description="@string/demo_description_AggregationOverlay"
android:label="@string/demo_label_3d_aggregationOverlay_map"> android:label="@string/demo_label_3d_aggregationOverlay_map">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> </activity>
<activity <activity
android:name=".heatoverlay.ScatterPlotOverlayActivity" android:name=".heatoverlay.ScatterPlotOverlayActivity"
android:description="@string/demo_description_ScatterPlotOverlay" android:description="@string/demo_description_ScatterPlotOverlay"
android:label="@string/demo_label_3d_scatterplotoverlay_map"> android:label="@string/demo_label_3d_scatterplotoverlay_map">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> </activity>
<activity <activity
android:name=".heatoverlay.TrailOverlayActivity" android:name=".heatoverlay.TrailOverlayActivity"
android:description="@string/demo_description_TrailOverlay" android:description="@string/demo_description_TrailOverlay"
android:label="@string/demo_label_3d_railoverltay_map"> android:label="@string/demo_label_3d_railoverltay_map">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> </activity>
<activity <activity
android:name=".heatoverlay.GLModelActivity" android:name=".heatoverlay.GLModelActivity"
android:description="@string/demo_description_glModel" android:description="@string/demo_description_glModel"
android:label="@string/demo_label_glModel"> android:label="@string/demo_label_glModel">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> </activity>
<!-- <activity-->
<!-- android:name=".basic.OfflineMapActivity"-->
<!-- android:description="@string/demo_description_offline_map"-->
<!-- android:label="@string/demo_label_offline_map">-->
<!-- <meta-data-->
<!-- android:name="@string/demo_type"-->
<!-- android:value="@string/demo_type_basic" />-->
<!-- </activity>-->
<activity <activity
android:name=".basic.RecyclerListActivity" android:name=".basic.RecyclerListActivity"
android:description="@string/demo_description_recycler_map" android:description="@string/demo_description_recycler_map"
android:label="@string/demo_label_recycler_map"> android:label="@string/demo_label_recycler_map">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_basic" /> android:value="@string/demo_type_basic"/>
</activity> </activity>
<activity <activity
android:name=".smooth.SmoothMoveActivity" android:name=".smooth.SmoothMoveActivity"
android:description="@string/demo_description_smooth_move" android:description="@string/demo_description_smooth_move"
android:label="@string/demo_label_smooth_move"> android:label="@string/demo_label_smooth_move">
<meta-data <meta-data
android:name="@string/demo_type" android:name="@string/demo_type"
android:value="@string/demo_type_draw" /> android:value="@string/demo_type_draw"/>
</activity> <!-- 如果您key确认无误却依然授权没有通过请检查您的key的白名单配置 -->
</activity>
<meta-data <meta-data
android:name="TencentMapSDK" android:name="TencentMapSDK"
android:value="SCYBZ-EC5Y4-XMHUI-FX2PU-ZYMMS-IBB7P" /> android:value="SCYBZ-EC5Y4-XMHUI-FX2PU-ZYMMS-IBB7P"/>
<activity android:name="cc.winboll.studio.positions.activities.TestMapViewActivity"/>
</application> </application>
</manifest> </manifest>

View File

@@ -0,0 +1,394 @@
package cc.winboll.studio.positions;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.telecom.TelecomManager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.viewpager.widget.ViewPager;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.LogView;
import cc.winboll.studio.libapputils.app.IWinBollActivity;
import cc.winboll.studio.libapputils.app.WinBollActivityManager;
import cc.winboll.studio.libapputils.bean.APPInfo;
import cc.winboll.studio.libapputils.view.YesNoAlertDialog;
import cc.winboll.studio.positions.R;
import com.tencent.map.vector.demo.DemoMainActivity;
import cc.winboll.studio.positions.activities.SettingsActivity;
import cc.winboll.studio.positions.adapters.MyPagerAdapter;
import cc.winboll.studio.positions.beans.MainServiceBean;
import cc.winboll.studio.positions.services.MainService;
import com.google.android.material.tabs.TabLayout;
import java.util.ArrayList;
import java.util.List;
import com.tencent.map.vector.demo.AbsListActivity;
import com.tencent.map.vector.demo.AbsActivity;
final public class Main2Activity extends AbsActivity implements IWinBollActivity, ViewPager.OnPageChangeListener, View.OnClickListener {
public static final String TAG = "MainActivity";
public static final int REQUEST_HOME_ACTIVITY = 0;
public static final int REQUEST_ABOUT_ACTIVITY = 1;
public static final String ACTION_SOS = "cc.winboll.studio.libappbase.WinBoll.ACTION_SOS";
LogView mLogView;
Toolbar mToolbar;
CheckBox cbMainService;
MainServiceBean mMainServiceBean;
ViewPager viewPager;
private List<View> views; //用来存放放进ViewPager里面的布局
//实例化存储imageView导航原点的集合
ImageView[] imageViews;
//MyPagerAdapter adapter;//适配器
MyPagerAdapter pagerAdapter;
LinearLayout linearLayout;//下标所在在LinearLayout布局里
int currentPoint = 0;//当前被选中中页面的下标
private static final int DIALER_REQUEST_CODE = 1;
@Override
public AppCompatActivity getActivity() {
return this;
}
@Override
public APPInfo getAppInfo() {
// String szBranchName = "contacts";
//
// APPInfo appInfo = AboutActivityFactory.buildDefaultAPPInfo();
// appInfo.setAppName("Contacts");
// appInfo.setAppIcon(cc.winboll.studio.libapputils.R.drawable.ic_winboll);
// appInfo.setAppDescription("Contacts Description");
// appInfo.setAppGitName("APP");
// appInfo.setAppGitOwner("Studio");
// appInfo.setAppGitAPPBranch(szBranchName);
// appInfo.setAppGitAPPSubProjectFolder(szBranchName);
// appInfo.setAppHomePage("https://www.winboll.cc/studio/details.php?app=Contacts");
// appInfo.setAppAPKName("Contacts");
// appInfo.setAppAPKFolderName("Contacts");
// return appInfo;
return null;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// 接收并处理 Intent 数据,函数 Intent 处理接收就直接返回
//if (prosessIntents(getIntent())) return;
// 以下正常创建主窗口
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化工具栏
mToolbar = findViewById(R.id.activitymainToolbar1);
setSupportActionBar(mToolbar);
if (isEnableDisplayHomeAsUp()) {
// 显示后退按钮
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
getSupportActionBar().setSubtitle(getTag());
initData();
initView();
//initPoint();//调用初始化导航原点的方法
viewPager.addOnPageChangeListener(this);//滑动事件
ViewPager viewPager = findViewById(R.id.activitymainViewPager1);
MyPagerAdapter pagerAdapter = new MyPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(pagerAdapter);
TabLayout tabLayout = findViewById(R.id.activitymainTabLayout1);
tabLayout.setupWithViewPager(viewPager);
// mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class);
// if (mMainServiceBean == null) {
// mMainServiceBean = new MainServiceBean();
// }
// cbMainService = findViewById(R.id.activitymainCheckBox1);
// cbMainService.setChecked(mMainServiceBean.isEnable());
// cbMainService.setOnClickListener(new View.OnClickListener(){
// @Override
// public void onClick(View view) {
// if (cbMainService.isChecked()) {
// MainService.startMainService(MainActivity.this);
// } else {
// MainService.stopMainService(MainActivity.this);
// }
// }
// });
MainService.startMainService(Main2Activity.this);
}
//初始化view即显示的图片
void initView() {
viewPager = findViewById(R.id.activitymainViewPager1);
pagerAdapter = new MyPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(pagerAdapter);
//adapter = new MyPagerAdapter(views);
//viewPager = findViewById(R.id.activitymainViewPager1);
//viewPager.setAdapter(adapter);
//linearLayout = findViewById(R.id.activitymainLinearLayout1);
//initPoint();//初始化页面下方的点
viewPager.setOnPageChangeListener(this);
}
//初始化所要显示的布局
void initData() {
ViewPager viewPager = findViewById(R.id.activitymainViewPager1);
LayoutInflater inflater = LayoutInflater.from(getActivity());
View view1 = inflater.inflate(R.layout.fragment_gms, viewPager, false);
View view2 = inflater.inflate(R.layout.fragment_contacts, viewPager, false);
View view3 = inflater.inflate(R.layout.fragment_log, viewPager, false);
views = new ArrayList<>();
views.add(view1);
views.add(view2);
views.add(view3);
}
// void initPoint() {
// imageViews = new ImageView[5];//实例化5个图片
// for (int i = 0; i < linearLayout.getChildCount(); i++) {
// imageViews[i] = (ImageView) linearLayout.getChildAt(i);
// imageViews[i].setImageResource(R.drawable.ic_launcher);
// imageViews[i].setOnClickListener(this);//点击导航点,即可跳转
// imageViews[i].setTag(i);//重复利用实例化的对象
// }
// currentPoint = 0;//默认第一个坐标
// imageViews[currentPoint].setImageResource(R.drawable.ic_launcher);
// }
//OnPageChangeListener接口要实现的三个方法
/* onPageScrollStateChanged(int state)
此方法是在状态改变的时候调用其中state这个参数有三种状态
SCROLL_STATE_DRAGGING1表示用户手指“按在屏幕上并且开始拖动”的状态
手指按下但是还没有拖动的时候还不是这个状态只有按下并且手指开始拖动后log才打出。
SCROLL_STATE_IDLE0滑动动画做完的状态。
SCROLL_STATE_SETTLING2在“手指离开屏幕”的状态。*/
@Override
public void onPageScrollStateChanged(int state) {
}
/* onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到调用。其中三个参数的含义分别为:
position :当前页面即你点击滑动的页面从A滑B则是A页面的position。
positionOffset:当前页面偏移的百分比
positionOffsetPixels:当前页面偏移的像素位置*/
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
/* onPageSelected(int position)
此方法是页面滑动完后得到调用position是你当前选中的页面的Position位置编号
(从A滑动到B就是B的position)*/
public void onPageSelected(int position) {
// ImageView preView = imageViews[currentPoint];
// preView.setImageResource(R.drawable.ic_launcher);
// ImageView currView = imageViews[position];
// currView.setImageResource(R.drawable.ic_launcher);
// currentPoint = position;
}
//小圆点点击事件
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//通过getTag(),可以判断是哪个控件
// int i = (Integer) v.getTag();
// viewPager.setCurrentItem(i);//直接跳转到某一个页面的情况
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
//setSubTitle("");
}
@Override
protected void onDestroy() {
super.onDestroy();
LogUtils.d(TAG, "onDestroy() SOS");
}
//
// 处理传入的 Intent 数据
//
// boolean prosessIntents(Intent intent) {
// if (intent == null
// || intent.getAction() == null
// || intent.getAction().equals(""))
// return false;
//
// if (intent.getAction().equals(StringToQrCodeView.ACTION_UNITTEST_QRCODE)) {
// try {
// WinBollActivity clazzActivity = UnitTestActivity.class.newInstance();
// String tag = clazzActivity.getTag();
// LogUtils.d(TAG, "String tag = clazzActivity.getTag(); tag " + tag);
// Intent subIntent = new Intent(this, UnitTestActivity.class);
// subIntent.setAction(intent.getAction());
// File file = new File(getCacheDir(), UUID.randomUUID().toString());
// //取出文件uri
// Uri uri = intent.getData();
// if (uri == null) {
// uri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
// }
// //获取文件真实地址
// String szSrcPath = UriUtils.getFileFromUri(getApplication(), uri);
// if (TextUtils.isEmpty(szSrcPath)) {
// return false;
// }
//
// Files.copy(Paths.get(szSrcPath), Paths.get(file.getPath()));
// //startWinBollActivity(subIntent, tag);
// WinBollActivityManager.getInstance(this).startWinBollActivity(this, subIntent, UnitTestActivity.class);
// } catch (IllegalAccessException | InstantiationException | IOException e) {
// LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
// // 函数处理异常返回失败
// return false;
// }
// } else {
// LogUtils.d(TAG, "prosessIntents|" + intent.getAction() + "|yet");
// return false;
// }
// return true;
// }
@Override
public String getTag() {
return TAG;
}
@Override
public Toolbar initToolBar() {
return findViewById(R.id.activitymainToolbar1);
}
@Override
public boolean isAddWinBollToolBar() {
return true;
}
@Override
public boolean isEnableDisplayHomeAsUp() {
return false;
}
@Override
public void onBackPressed() {
exit();
}
void exit() {
YesNoAlertDialog.OnDialogResultListener listener = new YesNoAlertDialog.OnDialogResultListener(){
@Override
public void onYes() {
WinBollActivityManager.getInstance(getApplicationContext()).finishAll();
}
@Override
public void onNo() {
}
};
YesNoAlertDialog.show(this, "[ " + getString(R.string.app_name) + " ]", "Exit(Yes/No).\nIs close all activity?", listener);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar_main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.item_settings) {
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
//WinBollActivityManager.getInstance(this).startWinBollActivity(this, CallActivity.class);
} else if (item.getItemId() == R.id.item_demomain) {
Intent intent = new Intent(this, com.tencent.map.vector.demo.DemoMainActivity.class);
startActivity(intent);
//WinBollActivityManager.getInstance(this).startWinBollActivity(this, CallActivity.class);
}
// } else
// if (item.getItemId() == R.id.item_exit) {
// exit();
// return true;
// }
return super.onOptionsItemSelected(item);
}
@Override
protected void onResume() {
super.onResume();
}
/**
* Android M 及以上检查是否是系统默认电话应用
*/
public boolean isDefaultPhoneCallApp() {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
TelecomManager manger = (TelecomManager) getSystemService(TELECOM_SERVICE);
if (manger != null && manger.getDefaultDialerPackage() != null) {
return manger.getDefaultDialerPackage().equals(getPackageName());
}
}
return false;
}
public boolean isServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
if (manager == null) return false;
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(
Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// switch (resultCode) {
// case REQUEST_HOME_ACTIVITY : {
// LogUtils.d(TAG, "REQUEST_HOME_ACTIVITY");
// break;
// }
// case REQUEST_ABOUT_ACTIVITY : {
// LogUtils.d(TAG, "REQUEST_ABOUT_ACTIVITY");
// break;
// }
// default : {
// super.onActivityResult(requestCode, resultCode, data);
// }
// }
if (requestCode == DIALER_REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
Toast.makeText(Main2Activity.this, getString(R.string.app_name) + " 已成为默认电话应用",
Toast.LENGTH_SHORT).show();
}
}
}
}

View File

@@ -1,311 +1,131 @@
package cc.winboll.studio.positions; package cc.winboll.studio.positions;
import android.app.Activity; /**
import android.app.ActivityManager; * @Author ZhanGSKen@AliYun.Com
import android.content.Context; * @Date 2025/02/24 11:05:49
*/
import cc.winboll.studio.positions.R;
import android.content.Intent; import android.content.Intent;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.telecom.TelecomManager;
import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import androidx.viewpager.widget.ViewPager;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.LogView;
import cc.winboll.studio.libapputils.app.IWinBollActivity;
import cc.winboll.studio.libapputils.app.WinBollActivityManager;
import cc.winboll.studio.libapputils.bean.APPInfo;
import cc.winboll.studio.libapputils.view.YesNoAlertDialog;
import cc.winboll.studio.positions.R;
import com.tencent.map.vector.demo.DemoMainActivity;
import cc.winboll.studio.positions.activities.SettingsActivity; import cc.winboll.studio.positions.activities.SettingsActivity;
import cc.winboll.studio.positions.adapters.MyPagerAdapter; import cc.winboll.studio.positions.activities.TestMapViewActivity;
import cc.winboll.studio.positions.beans.MainServiceBean; import com.tencent.map.geolocation.TencentLocationManager;
import cc.winboll.studio.positions.services.MainService; import com.tencent.map.vector.demo.AbsActivity;
import com.google.android.material.tabs.TabLayout; import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import java.util.ArrayList; import com.tencent.tencentmap.mapsdk.maps.TencentMapInitializer;
import com.tencent.tencentmap.mapsdk.maps.TextureMapView;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import android.view.View;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.gms.location.LocationCallback;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationResult;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.tasks.OnSuccessListener;
import cc.winboll.studio.libappbase.LogUtils;
import androidx.core.content.ContextCompat;
import android.Manifest;
import androidx.core.app.ActivityCompat;
import androidx.annotation.NonNull;
import android.content.pm.PackageManager;
import android.widget.Toast;
import android.location.Location;
import android.os.Looper;
import com.hjq.toast.ToastUtils;
import android.widget.TextView;
import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity;
import android.Manifest;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.location.Location;
import android.os.Bundle;
import android.os.Looper;
import androidx.annotation.NonNull;
import android.util.Log;
import android.widget.Toast;
import cc.winboll.studio.positions.R;
import com.tencent.map.vector.demo.basic.SupportMapFragmentActivity;
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.model.BitmapDescriptor;
import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
import com.tencent.tencentmap.mapsdk.maps.model.MyLocationStyle;
import java.util.List; import java.util.List;
final public class MainActivity extends AppCompatActivity implements IWinBollActivity, ViewPager.OnPageChangeListener, View.OnClickListener { import pub.devrel.easypermissions.EasyPermissions;
import androidx.appcompat.app.AppCompatActivity;
public static final String TAG = "MainActivity"; public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks,LocationSource, TencentLocationListener {
public static final int REQUEST_HOME_ACTIVITY = 0; public static final String TAG ="MainActivity";
public static final int REQUEST_ABOUT_ACTIVITY = 1;
public static final String ACTION_SOS = "cc.winboll.studio.libappbase.WinBoll.ACTION_SOS"; private static final int PERMISSION_REQUEST_CODE = 1;
LogView mLogView;
Toolbar mToolbar; Toolbar mToolbar;
CheckBox cbMainService; private TextureMapView mapView;
MainServiceBean mMainServiceBean; protected TencentMap tencentMap;
ViewPager viewPager; TextView mtvInfo;
private List<View> views; //用来存放放进ViewPager里面的布局 private LocationSource.OnLocationChangedListener locationChangedListener;
//实例化存储imageView导航原点的集合
ImageView[] imageViews;
//MyPagerAdapter adapter;//适配器
MyPagerAdapter pagerAdapter;
LinearLayout linearLayout;//下标所在在LinearLayout布局里
int currentPoint = 0;//当前被选中中页面的下标
private static final int DIALER_REQUEST_CODE = 1; private TencentLocationManager locationManager;
private TencentLocationRequest locationRequest;
@Override private MyLocationStyle locationStyle;
public AppCompatActivity getActivity() {
return this;
}
@Override
public APPInfo getAppInfo() {
// String szBranchName = "contacts";
//
// APPInfo appInfo = AboutActivityFactory.buildDefaultAPPInfo();
// appInfo.setAppName("Contacts");
// appInfo.setAppIcon(cc.winboll.studio.libapputils.R.drawable.ic_winboll);
// appInfo.setAppDescription("Contacts Description");
// appInfo.setAppGitName("APP");
// appInfo.setAppGitOwner("Studio");
// appInfo.setAppGitAPPBranch(szBranchName);
// appInfo.setAppGitAPPSubProjectFolder(szBranchName);
// appInfo.setAppHomePage("https://www.winboll.cc/studio/details.php?app=Contacts");
// appInfo.setAppAPKName("Contacts");
// appInfo.setAppAPKFolderName("Contacts");
// return appInfo;
return null;
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
// 接收并处理 Intent 数据,函数 Intent 处理接收就直接返回
//if (prosessIntents(getIntent())) return;
// 以下正常创建主窗口
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); setContentView(R.layout.activity_main);
// 初始化工具栏 // 初始化工具栏
mToolbar = findViewById(R.id.activitymainToolbar1); mToolbar = findViewById(R.id.activitymainToolbar1);
setSupportActionBar(mToolbar); setSupportActionBar(mToolbar);
if (isEnableDisplayHomeAsUp()) { getSupportActionBar().setSubtitle(TAG);
// 显示后退按钮
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
getSupportActionBar().setSubtitle(getTag());
initData(); TencentMapInitializer.setAgreePrivacy(this, true);
initView(); TencentMapInitializer.start(this);
//initPoint();//调用初始化导航原点的方法 TencentLocationManager.setUserAgreePrivacy(true);
viewPager.addOnPageChangeListener(this);//滑动事件
ViewPager viewPager = findViewById(R.id.activitymainViewPager1);
MyPagerAdapter pagerAdapter = new MyPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(pagerAdapter);
TabLayout tabLayout = findViewById(R.id.activitymainTabLayout1);
tabLayout.setupWithViewPager(viewPager);
// mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class); mapView = findViewById(R.id.mapview);
// if (mMainServiceBean == null) { mapView.setOpaque(false);
// mMainServiceBean = new MainServiceBean(); //创建tencentMap地图对象可以完成对地图的几乎所有操作
// } tencentMap = mapView.getMap();
// cbMainService = findViewById(R.id.activitymainCheckBox1);
// cbMainService.setChecked(mMainServiceBean.isEnable());
// cbMainService.setOnClickListener(new View.OnClickListener(){
// @Override
// public void onClick(View view) {
// if (cbMainService.isChecked()) {
// MainService.startMainService(MainActivity.this);
// } else {
// MainService.stopMainService(MainActivity.this);
// }
// }
// });
MainService.startMainService(MainActivity.this);
}
//初始化view即显示的图片 FloatingActionButton fab = findViewById(R.id.fab);
void initView() { fab.setOnClickListener(new View.OnClickListener() {
viewPager = findViewById(R.id.activitymainViewPager1);
pagerAdapter = new MyPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(pagerAdapter);
//adapter = new MyPagerAdapter(views);
//viewPager = findViewById(R.id.activitymainViewPager1);
//viewPager.setAdapter(adapter);
//linearLayout = findViewById(R.id.activitymainLinearLayout1);
//initPoint();//初始化页面下方的点
viewPager.setOnPageChangeListener(this);
}
//初始化所要显示的布局
void initData() {
ViewPager viewPager = findViewById(R.id.activitymainViewPager1);
LayoutInflater inflater = LayoutInflater.from(getActivity());
View view1 = inflater.inflate(R.layout.fragment_gms, viewPager, false);
View view2 = inflater.inflate(R.layout.fragment_contacts, viewPager, false);
View view3 = inflater.inflate(R.layout.fragment_log, viewPager, false);
views = new ArrayList<>();
views.add(view1);
views.add(view2);
views.add(view3);
}
// void initPoint() {
// imageViews = new ImageView[5];//实例化5个图片
// for (int i = 0; i < linearLayout.getChildCount(); i++) {
// imageViews[i] = (ImageView) linearLayout.getChildAt(i);
// imageViews[i].setImageResource(R.drawable.ic_launcher);
// imageViews[i].setOnClickListener(this);//点击导航点,即可跳转
// imageViews[i].setTag(i);//重复利用实例化的对象
// }
// currentPoint = 0;//默认第一个坐标
// imageViews[currentPoint].setImageResource(R.drawable.ic_launcher);
// }
//OnPageChangeListener接口要实现的三个方法
/* onPageScrollStateChanged(int state)
此方法是在状态改变的时候调用其中state这个参数有三种状态
SCROLL_STATE_DRAGGING1表示用户手指“按在屏幕上并且开始拖动”的状态
手指按下但是还没有拖动的时候还不是这个状态只有按下并且手指开始拖动后log才打出。
SCROLL_STATE_IDLE0滑动动画做完的状态。
SCROLL_STATE_SETTLING2在“手指离开屏幕”的状态。*/
@Override @Override
public void onPageScrollStateChanged(int state) { public void onClick(View view) {
Snackbar.make(view, "点击了悬浮按钮", Snackbar.LENGTH_LONG).show();
} }
/* onPageScrolled(int position, float positionOffset, int positionOffsetPixels) });
当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到调用。其中三个参数的含义分别为:
position :当前页面即你点击滑动的页面从A滑B则是A页面的position。 mtvInfo = findViewById(R.id.tv_info);
positionOffset:当前页面偏移的百分比
positionOffsetPixels:当前页面偏移的像素位置*/
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
} checkLocationPermission();
/* onPageSelected(int position)
此方法是页面滑动完后得到调用position是你当前选中的页面的Position位置编号
(从A滑动到B就是B的position)*/
public void onPageSelected(int position) {
// ImageView preView = imageViews[currentPoint]; //设置显示定位的图标
// preView.setImageResource(R.drawable.ic_launcher); TencentLocationManager.setUserAgreePrivacy(true);
// ImageView currView = imageViews[position]; //建立定位
// currView.setImageResource(R.drawable.ic_launcher); initLocation();
// currentPoint = position;
}
//小圆点点击事件
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//通过getTag(),可以判断是哪个控件
// int i = (Integer) v.getTag();
// viewPager.setCurrentItem(i);//直接跳转到某一个页面的情况
} }
@Override @Override
protected void onPostCreate(Bundle savedInstanceState) { protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState); super.onPostCreate(savedInstanceState);
//setSubTitle(""); // LatLng center = new LatLng(39.904556, 116.427242);
} // tencentMap.moveCamera(
// CameraUpdateFactory.newLatLngZoom(center, 13f) // 注意 13 → 13f
@Override // );
protected void onDestroy() {
super.onDestroy();
LogUtils.d(TAG, "onDestroy() SOS");
}
//
// 处理传入的 Intent 数据
//
// boolean prosessIntents(Intent intent) {
// if (intent == null
// || intent.getAction() == null
// || intent.getAction().equals(""))
// return false;
//
// if (intent.getAction().equals(StringToQrCodeView.ACTION_UNITTEST_QRCODE)) {
// try {
// WinBollActivity clazzActivity = UnitTestActivity.class.newInstance();
// String tag = clazzActivity.getTag();
// LogUtils.d(TAG, "String tag = clazzActivity.getTag(); tag " + tag);
// Intent subIntent = new Intent(this, UnitTestActivity.class);
// subIntent.setAction(intent.getAction());
// File file = new File(getCacheDir(), UUID.randomUUID().toString());
// //取出文件uri
// Uri uri = intent.getData();
// if (uri == null) {
// uri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
// }
// //获取文件真实地址
// String szSrcPath = UriUtils.getFileFromUri(getApplication(), uri);
// if (TextUtils.isEmpty(szSrcPath)) {
// return false;
// }
//
// Files.copy(Paths.get(szSrcPath), Paths.get(file.getPath()));
// //startWinBollActivity(subIntent, tag);
// WinBollActivityManager.getInstance(this).startWinBollActivity(this, subIntent, UnitTestActivity.class);
// } catch (IllegalAccessException | InstantiationException | IOException e) {
// LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
// // 函数处理异常返回失败
// return false;
// }
// } else {
// LogUtils.d(TAG, "prosessIntents|" + intent.getAction() + "|yet");
// return false;
// }
// return true;
// }
@Override
public String getTag() {
return TAG;
}
@Override
public Toolbar initToolBar() {
return findViewById(R.id.activitymainToolbar1);
}
@Override
public boolean isAddWinBollToolBar() {
return true;
}
@Override
public boolean isEnableDisplayHomeAsUp() {
return false;
}
@Override
public void onBackPressed() {
exit();
}
void exit() {
YesNoAlertDialog.OnDialogResultListener listener = new YesNoAlertDialog.OnDialogResultListener(){
@Override
public void onYes() {
WinBollActivityManager.getInstance(getApplicationContext()).finishAll();
}
@Override
public void onNo() {
}
};
YesNoAlertDialog.show(this, "[ " + getString(R.string.app_name) + " ]", "Exit(Yes/No).\nIs close all activity?", listener);
} }
@Override @Override
@@ -314,7 +134,6 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct
return super.onCreateOptionsMenu(menu); return super.onCreateOptionsMenu(menu);
} }
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.item_settings) { if (item.getItemId() == R.id.item_settings) {
@@ -325,6 +144,10 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct
Intent intent = new Intent(this, com.tencent.map.vector.demo.DemoMainActivity.class); Intent intent = new Intent(this, com.tencent.map.vector.demo.DemoMainActivity.class);
startActivity(intent); startActivity(intent);
//WinBollActivityManager.getInstance(this).startWinBollActivity(this, CallActivity.class); //WinBollActivityManager.getInstance(this).startWinBollActivity(this, CallActivity.class);
} else if (item.getItemId() == R.id.item_testmapview) {
Intent intent = new Intent(this, TestMapViewActivity.class);
startActivity(intent);
//WinBollActivityManager.getInstance(this).startWinBollActivity(this, CallActivity.class);
} }
// } else // } else
// if (item.getItemId() == R.id.item_exit) { // if (item.getItemId() == R.id.item_exit) {
@@ -334,59 +157,201 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
/**
* mapview的生命周期管理
*/
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
} mapView.onResume();
/**
* Android M 及以上检查是否是系统默认电话应用
*/
public boolean isDefaultPhoneCallApp() {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
TelecomManager manger = (TelecomManager) getSystemService(TELECOM_SERVICE);
if (manger != null && manger.getDefaultDialerPackage() != null) {
return manger.getDefaultDialerPackage().equals(getPackageName());
}
}
return false;
}
public boolean isServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
if (manager == null) return false;
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(
Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
} }
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onPause() {
// switch (resultCode) { super.onPause();
// case REQUEST_HOME_ACTIVITY : { mapView.onPause();
// LogUtils.d(TAG, "REQUEST_HOME_ACTIVITY"); }
// break;
// } @Override
// case REQUEST_ABOUT_ACTIVITY : { protected void onStop() {
// LogUtils.d(TAG, "REQUEST_ABOUT_ACTIVITY"); super.onStop();
// break; mapView.onStop();
// } }
// default : {
// super.onActivityResult(requestCode, resultCode, data); @Override
// } protected void onDestroy() {
// } super.onDestroy();
if (requestCode == DIALER_REQUEST_CODE) { mapView.onDestroy();
if (resultCode == Activity.RESULT_OK) { }
Toast.makeText(MainActivity.this, getString(R.string.app_name) + " 已成为默认电话应用",
Toast.LENGTH_SHORT).show(); @Override
protected void onRestart() {
super.onRestart();
mapView.onRestart();
}
/**
* 设置定位图标样式
*/
private void setLocMarkerStyle(){
locationStyle = new MyLocationStyle();
//创建图标
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.marker));
locationStyle.icon(bitmapDescriptor);
//设置定位圆形区域的边框宽度
locationStyle.strokeWidth(3);
//设置圆区域的颜色
locationStyle.fillColor(R.color.style);
tencentMap.setMyLocationStyle(locationStyle);
}
private Bitmap getBitMap(int resourceId){
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int newWidth = 55;
int newHeight = 55;
float widthScale = ((float)newWidth)/width;
float heightScale = ((float)newHeight)/height;
Matrix matrix = new Matrix();
matrix.postScale(widthScale, heightScale);
bitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
return bitmap;
}
/**
* 定位的一些初始化设置
*/
private void initLocation(){
//用于访问腾讯定位服务的类, 周期性向客户端提供位置更新
locationManager = TencentLocationManager.getInstance(this);
//设置坐标系
locationManager.setCoordinateType(TencentLocationManager.COORDINATE_TYPE_GCJ02);
//创建定位请求
locationRequest = TencentLocationRequest.create();
//设置定位周期位置监听器回调周期为3s
locationRequest.setInterval(3000);
//地图上设置定位数据源
tencentMap.setLocationSource(this);
//设置当前位置可见
tencentMap.setMyLocationEnabled(true);
//设置定位图标样式
setLocMarkerStyle();
// locationStyle = locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);
tencentMap.setMyLocationStyle(locationStyle);
}
/**
* 实现位置监听
* @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);
//显示回调的实时位置信息
runOnUiThread(new Runnable() {
@Override
public void run() {
//打印tencentLocation的json字符串
// Toast.makeText(getApplicationContext(), new Gson().toJson(location), Toast.LENGTH_LONG).show();
}
});
}
}
@Override
public void onStatusUpdate(String s, int i, String s1) {
//GPS, WiFi, Radio 等状态发生变化
Log.v("State changed", s +"===" + s1);
}
@Override
public void activate(OnLocationChangedListener onLocationChangedListener) {
locationChangedListener = onLocationChangedListener;
int err = locationManager.requestLocationUpdates(locationRequest, this, Looper.myLooper());
switch (err) {
case 1:
Toast.makeText(this,"设备缺少使用腾讯定位服务需要的基本条件",Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this,"manifest 中配置的 key 不正确",Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this,"自动加载libtencentloc.so失败",Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
@Override
public void deactivate() {
locationManager.removeUpdates(this);
locationManager = null;
locationRequest = null;
locationChangedListener=null;
}
@Override
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
Log.e("location quest: ","success");
}
@Override
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
Log.e("location quest: ","failed");
}
private void checkLocationPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},
PERMISSION_REQUEST_CODE);
} else {
// 权限已授予,可进行定位操作
//startLocationUpdates();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//startLocationUpdates();
} else {
// 用户拒绝了权限请求
Toast.makeText(this, "请授予定位权限", Toast.LENGTH_SHORT).show();
} }
} }
} }
} }

View File

@@ -0,0 +1,85 @@
package cc.winboll.studio.positions.activities;
/**
* @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/24 12:14:04
*/
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import cc.winboll.studio.positions.R;
import com.tencent.map.vector.demo.heatoverlay.ScatterPlotOverlayActivity;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.TencentMapOptions;
import com.tencent.tencentmap.mapsdk.maps.TextureMapView;
import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
public class TestMapViewActivity extends AppCompatActivity {
public static final String TAG = "TestMapViewActivity";
/**
* 由于SDK并没有提供用于MapView管理地图生命周期的Activity
* 因此需要用户继承Activity后管理地图的生命周期防止内存泄露
*/
private TextureMapView mapView;
protected TencentMap tencentMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_testmapview);
mapView = findViewById(R.id.mapview);
mapView.setOpaque(false);
//创建tencentMap地图对象可以完成对地图的几乎所有操作
tencentMap = mapView.getMap();
}
/**
* mapview的生命周期管理
*/
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
protected void onRestart() {
super.onRestart();
mapView.onRestart();
}
}

View File

@@ -17,6 +17,9 @@ import androidx.annotation.NonNull;
import android.graphics.Color; import android.graphics.Color;
import android.widget.TextView; import android.widget.TextView;
import cc.winboll.studio.positions.views.GridMapView; import cc.winboll.studio.positions.views.GridMapView;
import com.tencent.tencentmap.mapsdk.maps.MapView;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.TextureMapView;
public class GmsFragment extends Fragment { public class GmsFragment extends Fragment {
@@ -24,6 +27,8 @@ public class GmsFragment extends Fragment {
private static final String ARG_PAGE = "ARG_PAGE"; private static final String ARG_PAGE = "ARG_PAGE";
private int mPage; private int mPage;
private TextureMapView mapView;
protected TencentMap tencentMap;
public static GmsFragment newInstance(int page) { public static GmsFragment newInstance(int page) {
Bundle args = new Bundle(); Bundle args = new Bundle();
@@ -47,19 +52,60 @@ public class GmsFragment extends Fragment {
@Nullable Bundle savedInstanceState) { @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_gms, container, false); View view = inflater.inflate(R.layout.fragment_gms, container, false);
// 初始化视图 // // 初始化视图
GridMapView mapView = (GridMapView) view.findViewById(R.id.map_view); // GridMapView mapView = (GridMapView) view.findViewById(R.id.map_view);
//
// // 设置网格参数
// mapView.setGridParameters(10000f, 10000f, 10f);
//
// // 初始化显示区域中心点400,300显示范围2000x200
// mapView.initViewport(5000f, 5000f, 1000f, 1000f);
//
// // 绘制图形
// mapView.drawPoint(5000f, 5000f, Color.RED, 8f);
// mapView.drawCircle(5000f, 5000f, 50f, Color.BLUE, 8f);
// mapView.drawLine(4975f, 4975f, 5025f, 5025f, Color.GREEN, 2f);
// 设置网格参数 // 初始化地图视图
mapView.setGridParameters(10000f, 10000f, 10f); mapView = view.findViewById(R.id.mapView);
mapView.setOpaque(false);
//创建tencentMap地图对象可以完成对地图的几乎所有操作
tencentMap = mapView.getMap();
// 初始化显示区域中心点400,300显示范围2000x200
mapView.initViewport(5000f, 5000f, 1000f, 1000f);
// 绘制图形
mapView.drawPoint(5000f, 5000f, Color.RED, 8f);
mapView.drawCircle(5000f, 5000f, 50f, Color.BLUE, 8f);
mapView.drawLine(4975f, 4975f, 5025f, 5025f, Color.GREEN, 2f);
return view; return view;
} }
/**
* mapview的生命周期管理
*/
@Override
public void onStart() {
super.onStart();
mapView.onStart();
}
@Override
public void onResume() {
super.onResume();
mapView.onResume();
}
@Override
public void onPause() {
super.onPause();
mapView.onPause();
}
@Override
public void onStop() {
super.onStop();
mapView.onStop();
}
@Override
public void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
} }

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24"
android:viewportWidth="24">
<path
android:fillColor="#ff000000"
android:pathData="M3.05,13H1V11H3.05C3.5,6.83 6.83,3.5 11,3.05V1H13V3.05C17.17,3.5 20.5,6.83 20.95,11H23V13H20.95C20.5,17.17 17.17,20.5 13,20.95V23H11V20.95C6.83,20.5 3.5,17.17 3.05,13M12,5A7,7 0,0 0,5 12A7,7 0,0 0,12 19A7,7 0,0 0,19 12A7,7 0,0 0,12 5Z"/>
</vector>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24"
android:viewportWidth="24">
<path
android:fillColor="#ff000000"
android:pathData="M12,8A4,4 0,0 1,16 12A4,4 0,0 1,12 16A4,4 0,0 1,8 12A4,4 0,0 1,12 8M3.05,13H1V11H3.05C3.5,6.83 6.83,3.5 11,3.05V1H13V3.05C17.17,3.5 20.5,6.83 20.95,11H23V13H20.95C20.5,17.17 17.17,20.5 13,20.95V23H11V20.95C6.83,20.5 3.5,17.17 3.05,13M12,5A7,7 0,0 0,5 12A7,7 0,0 0,12 19A7,7 0,0 0,19 12A7,7 0,0 0,12 5Z"/>
</vector>

View File

@@ -5,23 +5,48 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical" android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.appcompat.widget.Toolbar <androidx.appcompat.widget.Toolbar
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@+id/activitymainToolbar1"/> android:id="@+id/activitymainToolbar1"/>
<androidx.viewpager.widget.ViewPager <RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="1.0" android:layout_weight="1.0">
android:id="@+id/activitymainViewPager1"/>
<com.google.android.material.tabs.TabLayout <com.tencent.tencentmap.mapsdk.maps.TextureMapView
android:id="@+id/mapview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="60dp" android:layout_height="match_parent"/>
android:id="@+id/activitymainTabLayout1"/>
<TextView
android:id="@+id/tv_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/colorPrimary"
android:textStyle="bold"
android:textSize="14sp"
android:background="#CAFFFFFF"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true">
</TextView>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_margin="16dp"
android:src="@drawable/ic_location_searching"
app:backgroundTint="@color/colorPrimary"/>
</RelativeLayout>
</LinearLayout> </LinearLayout>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/activitymainToolbar1"/>
<androidx.viewpager.widget.ViewPager
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.0"
android:id="@+id/activitymainViewPager1"/>
<com.google.android.material.tabs.TabLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:id="@+id/activitymainTabLayout1"/>
</LinearLayout>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".basic.MapViewActivity">
<com.tencent.tencentmap.mapsdk.maps.TextureMapView
android:id="@+id/mapview"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

View File

@@ -6,15 +6,10 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<FrameLayout android:layout_width="match_parent" <com.tencent.tencentmap.mapsdk.maps.TextureMapView
android:layout_height="match_parent"> android:id="@+id/mapView"
<cc.winboll.studio.positions.views.GridMapView
android:id="@+id/map_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"/> android:layout_height="match_parent" />
</FrameLayout>
</LinearLayout> </LinearLayout>

View File

@@ -2,8 +2,8 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<item <item
android:id="@+id/item_mapview" android:id="@+id/item_testmapview"
android:title="MapViewActivity"/> android:title="TestMapViewActivity"/>
<item <item
android:id="@+id/item_demomain" android:id="@+id/item_demomain"
android:title="DemoMainActivity"/> android:title="DemoMainActivity"/>