diff --git a/o2android/app/src/main/java/net/zoneland/x/bpm/mobile/v1/zoneXBPM/app/im/O2LocationActivity.kt b/o2android/app/src/main/java/net/zoneland/x/bpm/mobile/v1/zoneXBPM/app/im/O2LocationActivity.kt index b52fbc712a705604ae968bdd15adaaf6a51d06b4..79e10040c4eecbfdbdbf2b11a21fdc970841c748 100644 --- a/o2android/app/src/main/java/net/zoneland/x/bpm/mobile/v1/zoneXBPM/app/im/O2LocationActivity.kt +++ b/o2android/app/src/main/java/net/zoneland/x/bpm/mobile/v1/zoneXBPM/app/im/O2LocationActivity.kt @@ -1,13 +1,14 @@ package net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.im -import android.support.v7.app.AppCompatActivity +import android.content.Intent +import android.net.Uri import android.os.Bundle import android.os.Parcel import android.os.Parcelable -import android.support.v7.widget.Toolbar +import android.support.v4.content.ContextCompat +import android.support.v7.app.AppCompatActivity import android.view.Menu import android.view.MenuItem -import android.widget.TextView import com.baidu.location.BDLocation import com.baidu.location.BDLocationListener import com.baidu.location.LocationClient @@ -21,7 +22,13 @@ import net.zoneland.x.bpm.mobile.v1.zoneXBPM.R import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.XLog import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.XToast import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.extension.visible +import net.zoneland.x.bpm.mobile.v1.zoneXBPM.widgets.BottomSheetMenu import org.jetbrains.anko.doAsync +import kotlin.math.atan2 +import kotlin.math.cos +import kotlin.math.sin +import kotlin.math.sqrt + class O2LocationActivity : AppCompatActivity(), BDLocationListener { @@ -123,6 +130,8 @@ class O2LocationActivity : AppCompatActivity(), BDLocationListener { override fun onCreateOptionsMenu(menu: Menu?): Boolean { if (mode == 0) { menuInflater.inflate(R.menu.menu_location_send, menu) + }else { + menuInflater.inflate(R.menu.menu_location_open, menu) } return super.onCreateOptionsMenu(menu) } @@ -139,6 +148,17 @@ class O2LocationActivity : AppCompatActivity(), BDLocationListener { } return true } + R.id.location_open -> { + BottomSheetMenu(this@O2LocationActivity).setItems( + arrayListOf("百度地图", "高德地图", "腾讯地图"), + ContextCompat.getColor(this@O2LocationActivity, R.color.blue)){ index -> + when(index) { + 0 -> goToBaiduMap() + 1 -> goToGaodeMap() + 2 -> goToTencentMap() + } + }.show() + } } return super.onOptionsItemSelected(item) } @@ -253,6 +273,77 @@ class O2LocationActivity : AppCompatActivity(), BDLocationListener { mLocationClient.locOption = option } + /** + * 跳转百度地图 + */ + private fun goToBaiduMap() { + try { + val uri = Uri.parse(("baidumap://map/direction?destination=latlng:" + + locationData?.latitude.toString()) + "," + + locationData?.longitude.toString() + "|name:" + locationData?.address + // 终点 + "&mode=driving" + // 导航路线方式 + "&src=" + packageName) + val intent = Intent("android.intent.action.VIEW", uri) + startActivity(intent) + } catch (e: Exception) { + XToast.toastShort(this, "未安装百度地图,无法打开") + } + } + + /** + * 跳转高德地图 + */ + private fun goToGaodeMap() { + try { + val lat = LatLng(locationData?.latitude!!, locationData?.longitude!!) + val endPoint = BD2GCJ(lat) //坐标转换 +// val stringBuffer = StringBuffer("androidamap://navi?sourceApplication=").append("O2OA") +// stringBuffer.append("&lat=").append(endPoint!!.latitude) +// .append("&lon=").append(endPoint.longitude).append("&keywords=${locationData?.address}") +// .append("&dev=").append(0) +// .append("&style=").append(2) + val stringBuffer = StringBuffer("androidamap://route/plan/?sourceApplication=O2OA&dlat=") + stringBuffer.append(endPoint!!.latitude) + .append("&dlon=").append(endPoint.longitude) + .append("&dname=${locationData?.address}") + .append("&dev=0&t=0") + val intent = Intent("android.intent.action.VIEW", Uri.parse(stringBuffer.toString())) + startActivity(intent) + } catch (e: Exception) { + XToast.toastShort(this, "未安装高德地图,无法打开") + } + } + + /** + * 跳转腾讯地图 + */ + private fun goToTencentMap() { + try { + val lat = LatLng(locationData?.latitude!!, locationData?.longitude!!) + val endPoint = BD2GCJ(lat) //坐标转换 + val stringBuffer = StringBuffer("qqmap://map/routeplan?type=drive") + .append("&tocoord=").append(endPoint!!.latitude).append(",").append(endPoint.longitude).append("&to=${locationData?.address}") + val intent = Intent("android.intent.action.VIEW", Uri.parse(stringBuffer.toString())) + startActivity(intent) + } catch (e: Exception) { + XToast.toastShort(this, "未安装腾讯地图,无法打开") + } + } + + + /** + * BD-09 坐标转换成 GCJ-02 坐标 + */ + private fun BD2GCJ(bd: LatLng): LatLng? { + val x = bd.longitude - 0.0065 + val y = bd.latitude - 0.006 + val z = sqrt(x * x + y * y) - 0.00002 * sin(y * Math.PI) + val theta = atan2(y, x) - 0.000003 * cos(x * Math.PI) + val lng = z * cos(theta) //lng + val lat = z * sin(theta) //lat + return LatLng(lat, lng) + } + /** * 地址数据对象 diff --git a/o2android/app/src/main/java/net/zoneland/x/bpm/mobile/v1/zoneXBPM/app/o2/login/LoginActivity.kt b/o2android/app/src/main/java/net/zoneland/x/bpm/mobile/v1/zoneXBPM/app/o2/login/LoginActivity.kt index b02f367b03bfa7d0870222c1fd560f47c01e084e..b07b88c5f019140e5c09e27e6489a0a49059b1b4 100644 --- a/o2android/app/src/main/java/net/zoneland/x/bpm/mobile/v1/zoneXBPM/app/o2/login/LoginActivity.kt +++ b/o2android/app/src/main/java/net/zoneland/x/bpm/mobile/v1/zoneXBPM/app/o2/login/LoginActivity.kt @@ -32,7 +32,6 @@ import net.zoneland.x.bpm.mobile.v1.zoneXBPM.widgets.BottomSheetMenu import net.zoneland.x.bpm.mobile.v1.zoneXBPM.widgets.CountDownButtonHelper import net.zoneland.x.bpm.mobile.v1.zoneXBPM.widgets.dialog.O2DialogSupport import java.io.IOException -import kotlin.math.log /** diff --git a/o2android/app/src/main/java/net/zoneland/x/bpm/mobile/v1/zoneXBPM/app/o2/webview/JSInterfaceO2mUtil.kt b/o2android/app/src/main/java/net/zoneland/x/bpm/mobile/v1/zoneXBPM/app/o2/webview/JSInterfaceO2mUtil.kt index b3304bd34edc1e1431578aa496ea68256f4f0edc..50986e2c906a98898a2c8d8b7080203f91530194 100644 --- a/o2android/app/src/main/java/net/zoneland/x/bpm/mobile/v1/zoneXBPM/app/o2/webview/JSInterfaceO2mUtil.kt +++ b/o2android/app/src/main/java/net/zoneland/x/bpm/mobile/v1/zoneXBPM/app/o2/webview/JSInterfaceO2mUtil.kt @@ -15,9 +15,9 @@ import com.baidu.location.LocationClientOption import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.wugang.activityresult.library.ActivityResult -import net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.base.BaseMVPActivity import net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.bbs.view.BBSWebViewSubjectActivity import net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.cms.view.CMSWebViewActivity +import net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.im.O2LocationActivity import net.zoneland.x.bpm.mobile.v1.zoneXBPM.model.vo.* import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.AndroidUtils @@ -70,6 +70,7 @@ class JSInterfaceO2mUtil private constructor(val activity: FragmentActivity?) { "device.getPhoneInfo" -> deviceGetPhoneInfo(message!!) "device.scan" -> deviceScan(message!!) "device.location" -> deviceGetLocation(message!!) + "device.openMap" -> deviceOpenMap(message!!) "navigation.setTitle" -> navigationSetTitle(message!!) "navigation.close" -> navigationClose(message!!) "navigation.goBack" -> navigationGoBack(message!!) @@ -462,6 +463,26 @@ class JSInterfaceO2mUtil private constructor(val activity: FragmentActivity?) { + private fun deviceOpenMap(message: String) { + val type = object : TypeToken>() {}.type + val value: O2JsPostMessage = gson.fromJson(message, type) + val callback = value.callback + val data = value.data + if (activity != null && data != null) { + val bundle = O2LocationActivity.showLocation(data) + activity.go(bundle) + if (!TextUtils.isEmpty(callback)) { + callbackJs("$callback('{}')") + } + } else { + XLog.error("activity不存在 deviceOpenMap 失败!!") + } + } + + + + + } \ No newline at end of file diff --git a/o2android/app/src/main/res/menu/menu_location_open.xml b/o2android/app/src/main/res/menu/menu_location_open.xml new file mode 100644 index 0000000000000000000000000000000000000000..45928da067928435c1fe20a633e1df2393ee35b1 --- /dev/null +++ b/o2android/app/src/main/res/menu/menu_location_open.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/o2android/app/src/main/res/mipmap-xhdpi/share.png b/o2android/app/src/main/res/mipmap-xhdpi/share.png new file mode 100644 index 0000000000000000000000000000000000000000..9aea89b83168339e9e93cfa8fbaaea89ffb49a29 Binary files /dev/null and b/o2android/app/src/main/res/mipmap-xhdpi/share.png differ diff --git a/o2android/app/src/main/res/values/strings.xml b/o2android/app/src/main/res/values/strings.xml index 749ce5c2a64326ff5952fd42d1003988d06855e8..06fcd4966b495787f149392c667e37987939e9ba 100644 --- a/o2android/app/src/main/res/values/strings.xml +++ b/o2android/app/src/main/res/values/strings.xml @@ -218,6 +218,7 @@ 按住说话 上滑取消发送 发送 + 打开 修改群名 修改成员