我的应用程序需要显示谷歌地图方向从A到B,但我不想把谷歌地图到我的应用程序-相反,我想用一个意图启动它。这可能吗?如果是,怎么做?
当前回答
谷歌方向视图,源位置作为当前位置,目标位置作为给定的字符串
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?f=d&daddr="+destinationCityName));
intent.setComponent(new ComponentName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity"));
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
在上面的destinationCityName是一个字符串变量,可以根据需要进行修改。
其他回答
你可以使用这样的代码:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("http://maps.google.com/maps?saddr=20.344,34.34&daddr=20.5666,45.345"));
startActivity(intent);
若要从当前位置开始导航,请删除saddr参数和值。
您可以使用实际的街道地址,而不是经纬度。然而,这将给用户一个对话框,选择通过浏览器打开它或谷歌地图。
这将在导航模式下直接启动谷歌地图:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("google.navigation:q=an+address+city"));
更新
2017年5月,谷歌推出了通用、跨平台谷歌地图url的新API:
https://developers.google.com/maps/documentation/urls/guide
你也可以在新的API中使用intent。
这对我来说很管用:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://maps.google.co.in/maps?q=" + yourAddress));
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
你可以通过这种方式在Android上启动谷歌地图方向
btn_search_route.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String source = et_source.getText().toString();
String destination = et_destination.getText().toString();
if (TextUtils.isEmpty(source)) {
et_source.setError("Enter Soruce point");
} else if (TextUtils.isEmpty(destination)) {
et_destination.setError("Enter Destination Point");
} else {
String sendstring="http://maps.google.com/maps?saddr=" +
source +
"&daddr=" +
destination;
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse(sendstring));
startActivity(intent);
}
}
});
Uri uri = Uri.parse("google.navigation:q=" + Latitude + "," + longitude + "&mode=d");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.setPackage("com.google.android.apps.maps");
startActivity(intent);
打开华为设备中包含HMS的地图应用程序:
const val GOOGLE_MAPS_APP = "com.google.android.apps.maps"
const val HUAWEI_MAPS_APP = "com.huawei.maps.app"
fun openMap(lat:Double,lon:Double) {
val packName = if (isHmsOnly(context)) {
HUAWEI_MAPS_APP
} else {
GOOGLE_MAPS_APP
}
val uri = Uri.parse("geo:$lat,$lon?q=$lat,$lon")
val intent = Intent(Intent.ACTION_VIEW, uri)
intent.setPackage(packName);
if (intent.resolveActivity(context.packageManager) != null) {
context.startActivity(intent)
} else {
openMapOptions(lat, lon)
}
}
private fun openMapOptions(lat: Double, lon: Double) {
val intent = Intent(
Intent.ACTION_VIEW,
Uri.parse("geo:$lat,$lon?q=$lat,$lon")
)
context.startActivity(intent)
}
HMS检查:
private fun isHmsAvailable(context: Context?): Boolean {
var isAvailable = false
if (null != context) {
val result =
HuaweiApiAvailability.getInstance().isHuaweiMobileServicesAvailable(context)
isAvailable = ConnectionResult.SUCCESS == result
}
return isAvailable}
private fun isGmsAvailable(context: Context?): Boolean {
var isAvailable = false
if (null != context) {
val result: Int = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context)
isAvailable = com.google.android.gms.common.ConnectionResult.SUCCESS == result
}
return isAvailable }
fun isHmsOnly(context: Context?) = isHmsAvailable(context) && !isGmsAvailable(context)
推荐文章
- 警告:API ' variable . getjavacompile()'已过时,已被' variable . getjavacompileprovider()'取代
- 安装APK时出现错误
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 碎片中的onCreateOptionsMenu
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- TextView粗体通过XML文件?
- 如何使线性布局的孩子之间的空间?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?