Skip to content

Commit

Permalink
适配Android 11 (R) 软件包的可见性
Browse files Browse the repository at this point in the history
  • Loading branch information
jenly1314 committed Jul 26, 2023
1 parent 45a6218 commit 06d3706
Show file tree
Hide file tree
Showing 8 changed files with 93 additions and 72 deletions.
24 changes: 14 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ MapHelper for Android 是一个整合了高德地图、百度地图、腾讯地
- [x] 地图路线规划/导航
- [x] **GCJ-02** / **WGS-84** / **BD09LL** 等相关坐标系互转


## Gif 展示
![Image](GIF.gif)

Expand All @@ -41,7 +40,7 @@ allprojects {

2. 在Module的 **build.gradle** 里面添加引入依赖项
```gradle
implementation 'com.github.jenly1314:maphelper:1.1.0'
implementation 'com.github.jenly1314:maphelper:1.2.0'
```

Expand All @@ -50,27 +49,32 @@ implementation 'com.github.jenly1314:maphelper:1.1.0'
### 代码示例

```kotlin
//调用相关地图线路/导航示例(params表示一些具体参数)
// 调用相关地图线路/导航示例(params表示一些具体参数)

//跳转到地图(高德、百度、腾讯、谷歌地图等)
// 跳转到地图(高德、百度、腾讯、谷歌地图等)
MapHelper.gotoMap(params)
//跳转到高德地图
// 跳转到高德地图
MapHelper.gotoAMap(params)
//跳转到百度地图
// 跳转到百度地图
MapHelper.gotoBaiduMap(params)
//跳转腾讯地图
// 跳转腾讯地图
MapHelper.gotoTencentMap(params)
//跳转到谷歌地图
// 跳转到谷歌地图
MapHelper.gotoGoogleMap(params)
//坐标系转换:WGS-84转GCJ-02(火星坐标系)
MapHelper.wgs84ToGCJ02(lat,lng)
// 坐标系转换:WGS-84转GCJ-02(火星坐标系)
MapHelper.wgs84ToGCJ02(latitude,longitude)
// 坐标系转换:GCJ-02(火星坐标系)转WGS-84
MapHelper.gcj02ToWGS84(latitude,longitude)
//...
```

更多使用详情,请查看[app](app)中的源码使用示例或直接查看[API帮助文档](https://jenly1314.github.io/projects/MapHelper/doc/)

## 版本记录

#### v1.2.0:2023-7-26
* 适配Android 11 (R) 软件包的可见性

#### v1.1.0:2023-3-26
* 迁移发布至 Maven Central

Expand Down
Binary file modified app/release/app-release.apk
Binary file not shown.
4 changes: 4 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.king.map.maphelper.app">

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
Expand Down
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ android.enableJetifier=true
# Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official

VERSION_NAME=1.1.0
VERSION_CODE=2
VERSION_NAME=1.2.0
VERSION_CODE=3
GROUP=com.github.jenly1314

POM_DESCRIPTION=MapHelper for Android
Expand Down
15 changes: 14 additions & 1 deletion maphelper/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,2 +1,15 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.king.map.maphelper" />
package="com.king.map.maphelper">

<queries>
<!-- 高德地图 -->
<package android:name="com.autonavi.minimap" />
<!-- 百度地图 -->
<package android:name="com.baidu.BaiduMap" />
<!-- 腾讯地图 -->
<package android:name="com.tencent.map" />
<!-- 谷歌地图 -->
<package android:name="com.google.android.apps.maps" />
</queries>

</manifest>
8 changes: 4 additions & 4 deletions maphelper/src/main/java/com/king/map/maphelper/LatLng.kt
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package com.king.map.maphelper

import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
import kotlinx.parcelize.Parcelize

/**
* 坐标经纬度
*
* @param lat 纬度
* @param lng 经度
* @param latitude 纬度
* @param longitude 经度
*
* @author <a href="mailto:[email protected]">Jenly</a>
*/
@Parcelize
data class LatLng(val lat: Double, val lng: Double) : Parcelable
data class LatLng(val latitude: Double, val longitude: Double) : Parcelable
106 changes: 53 additions & 53 deletions maphelper/src/main/java/com/king/map/maphelper/MapHelper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -900,16 +900,17 @@ object MapHelper {
marketPackage: String? = null
): Boolean {
try {
Log.d(TAG, "Uri:$uri")
Log.d(TAG, "Uri: $uri")
val intent = Intent(Intent.ACTION_VIEW, uri)
intent.addCategory(Intent.CATEGORY_DEFAULT)
intent.setPackage(packageName)
if (intent.resolveActivity(context.packageManager) != null) {
context.startActivity(intent)
return true
} else {
Log.d(TAG, "An App with Identifier '${packageName}' is not available.")
if (isMarket) {//是否跳转到应用市场
Log.w(TAG, "An App with Identifier '${packageName}' is not available.")
if (isMarket) {
// 是否跳转到应用市场
return gotoMarket(context, packageName, marketPackage)
}
}
Expand Down Expand Up @@ -971,14 +972,14 @@ object MapHelper {
/**
* 百度坐标系 (BD-09ll) 与 火星坐标系 (GCJ-02)的转换
* 即 百度 转 谷歌、高德
* @param lat 纬度
* @param lng 经度
* @param latitude 纬度
* @param longitude 经度
* @return [LatLng]
*/
@JvmStatic
fun bd09llToGCJ02(lat: Double, lng: Double): LatLng {
val x = lng - 0.0065
val y = lat - 0.006
fun bd09llToGCJ02(latitude: Double, longitude: Double): LatLng {
val x = longitude - 0.0065
val y = latitude - 0.006
val z = sqrt(x * x + y * y) - 0.00002 * sin(y * X_PI)
val theta = atan2(y, x) - 0.000003 * cos(x * X_PI)
val ggLat = z * sin(theta)
Expand All @@ -989,107 +990,106 @@ object MapHelper {
/**
* 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09LL) 的转换
* 即谷歌、高德 转 百度
* @param lat 纬度
* @param lng 经度
* @param latitude 纬度
* @param longitude 经度
* @return [LatLng]
*/
@JvmStatic
fun gcj02ToBD09LL(lat: Double, lng: Double): LatLng {
val z = sqrt(lng * lng + lat * lat) + 0.00002 * sin(lat * X_PI)
val theta = atan2(lat, lng) + 0.000003 * cos(lng * X_PI)
fun gcj02ToBD09LL(latitude: Double, longitude: Double): LatLng {
val z = sqrt(longitude * longitude + latitude * latitude) + 0.00002 * sin(latitude * X_PI)
val theta = atan2(latitude, longitude) + 0.000003 * cos(longitude * X_PI)
val bdLat = z * sin(theta) + 0.006
val bdLng = z * cos(theta) + 0.0065
return LatLng(bdLat, bdLng)
}

/**
* WGS-84转 GCJ-02
* @param lat 纬度
* @param lng 经度
* @param latitude 纬度
* @param longitude 经度
* @return [LatLng]
*/
@JvmStatic
fun wgs84ToGCJ02(lat: Double, lng: Double): LatLng {
if (outOfChina(lat, lng)) {
return LatLng(lat, lng)
fun wgs84ToGCJ02(latitude: Double, longitude: Double): LatLng {
if (outOfChina(latitude, longitude)) {
return LatLng(latitude, longitude)
}
var dLat = transformLat(lat - 35.0, lng - 105.0)
var dLng = transformLng(lat - 35.0, lng - 105.0)
val radLat = lat / 180.0 * PI
var dLat = transformLat(latitude - 35.0, longitude - 105.0)
var dLng = transformLng(latitude - 35.0, longitude - 105.0)
val radLat = latitude / 180.0 * PI
var magic = sin(radLat)
magic = 1 - EE * magic * magic
val sqrtMagic = sqrt(magic)
dLat = (dLat * 180.0) / ((A * (1 - EE)) / (magic * sqrtMagic) * PI)
dLng = (dLng * 180.0) / (A / sqrtMagic * cos(radLat) * PI)
val ggLat = lat + dLat
val ggLng = lng + dLng
val ggLat = latitude + dLat
val ggLng = longitude + dLng
return LatLng(ggLat, ggLng)
}

/**
* GCJ-02 转换为 WGS-84
* @param lat 纬度
* @param lng 经度
* @param latitude 纬度
* @param longitude 经度
* @return [LatLng]
*/
@JvmStatic
fun gcj02ToWGS84(lat: Double, lng: Double): LatLng {
if (outOfChina(lat, lng)) {
return LatLng(lat, lng)
fun gcj02ToWGS84(latitude: Double, longitude: Double): LatLng {
if (outOfChina(latitude, longitude)) {
return LatLng(latitude, longitude)
}
var dLat = transformLat(lat - 35.0, lng - 105.0)
var dLng = transformLng(lat - 35.0, lng - 105.0)
val radLat = lat / 180.0 * PI
var dLat = transformLat(latitude - 35.0, longitude - 105.0)
var dLng = transformLng(latitude - 35.0, longitude - 105.0)
val radLat = latitude / 180.0 * PI
var magic = sin(radLat)
magic = 1 - EE * magic * magic
val sqrtMagic = sqrt(magic)
dLat = (dLat * 180.0) / ((A * (1 - EE)) / (magic * sqrtMagic) * PI)
dLng = (dLng * 180.0) / (A / sqrtMagic * cos(radLat) * PI)
val ggLat = lat + dLat
val ggLng = lng + dLng
return LatLng(lat * 2 - ggLat, lng * 2 - ggLng)
val ggLat = latitude + dLat
val ggLng = longitude + dLng
return LatLng(latitude * 2 - ggLat, longitude * 2 - ggLng)
}

/**
* 转换坐标纬度
* @param lat 纬度
* @param lng 经度
* @param latitude 纬度
* @param longitude 经度
*
*/
@JvmStatic
private fun transformLat(lat: Double, lng: Double): Double {
var ret =
-100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * sqrt(abs(lng))
ret += (20.0 * sin(6.0 * lng * PI) + 20.0 * sin(2.0 * lng * PI)) * 2.0 / 3.0
ret += (20.0 * sin(lat * PI) + 40.0 * sin(lat / 3.0 * PI)) * 2.0 / 3.0
ret += (160.0 * sin(lat / 12.0 * PI) + 320 * sin(lat * PI / 30.0)) * 2.0 / 3.0
private fun transformLat(latitude: Double, longitude: Double): Double {
var ret = -100.0 + 2.0 * longitude + 3.0 * latitude + 0.2 * latitude * latitude + 0.1 * longitude * latitude + 0.2 * sqrt(abs(longitude))
ret += (20.0 * sin(6.0 * longitude * PI) + 20.0 * sin(2.0 * longitude * PI)) * 2.0 / 3.0
ret += (20.0 * sin(latitude * PI) + 40.0 * sin(latitude / 3.0 * PI)) * 2.0 / 3.0
ret += (160.0 * sin(latitude / 12.0 * PI) + 320 * sin(latitude * PI / 30.0)) * 2.0 / 3.0
return ret
}

/**
* 转换坐标经度
* @param lat 纬度
* @param lng 经度
* @param latitude 纬度
* @param longitude 经度
*
*/
@JvmStatic
private fun transformLng(lat: Double, lng: Double): Double {
var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * sqrt(abs(lng))
ret += (20.0 * sin(6.0 * lng * PI) + 20.0 * sin(2.0 * lng * PI)) * 2.0 / 3.0
ret += (20.0 * sin(lng * PI) + 40.0 * sin(lng / 3.0 * PI)) * 2.0 / 3.0
ret += (150.0 * sin(lng / 12.0 * PI) + 300.0 * sin(lng / 30.0 * PI)) * 2.0 / 3.0
private fun transformLng(latitude: Double, longitude: Double): Double {
var ret = 300.0 + longitude + 2.0 * latitude + 0.1 * longitude * longitude + 0.1 * longitude * latitude + 0.1 * sqrt(abs(longitude))
ret += (20.0 * sin(6.0 * longitude * PI) + 20.0 * sin(2.0 * longitude * PI)) * 2.0 / 3.0
ret += (20.0 * sin(longitude * PI) + 40.0 * sin(longitude / 3.0 * PI)) * 2.0 / 3.0
ret += (150.0 * sin(longitude / 12.0 * PI) + 300.0 * sin(longitude / 30.0 * PI)) * 2.0 / 3.0
return ret
}

/**
* 判断是否在国内,不在国内则不做偏移
* @param lat 纬度
* @param lng 经度
* @param latitude 纬度
* @param longitude 经度
* @return
*/
@JvmStatic
private fun outOfChina(lat: Double, lng: Double): Boolean {
return (lng < 72.004 || lng > 137.8347) || (lat < 0.8293 || lat > 55.8271)
private fun outOfChina(latitude: Double, longitude: Double): Boolean {
return (longitude < 72.004 || longitude > 137.8347) || (latitude < 0.8293 || latitude > 55.8271)
}

//---------------------------------------------
Expand Down
4 changes: 2 additions & 2 deletions versions.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//App
def app_version = [:]
app_version.versionCode = 2
app_version.versionName = "1.1.0"
app_version.versionCode = 3
app_version.versionName = "1.2.0"
ext.app_version = app_version

//build version
Expand Down

0 comments on commit 06d3706

Please sign in to comment.