我目前使用以下内容从我的应用程序启动Google导航:
Intent navigationIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("google.navigation:q=" + latLong.getLatitude() + "," + latLong.getLongitude()));
有谁知道我如何停止从我自己的应用程序导航?
我试过杀了它,但似乎我没有得到许可,还有其他办法吗?
答案 0 :(得分:4)
有谁知道我如何停止从我自己的应用程序导航?
你做不到。如果用户愿意,请允许用户退出导航。
答案 1 :(得分:1)
我发现只有一件作品, 使用当前位置重新开始导航,因此导航将自动完成。
public static void startNavigationIntent(Context activity, String destination)
{
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("google.navigation:q=" + destination));
activity.startActivity(intent);
}
然后将您的应用程序带到前台。
Intent bringToForegroundIntent = new Intent(BackgroundLocationService.this, DashboardActivity.class);
bringToForegroundIntent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(bringToForegroundIntent);
答案 2 :(得分:0)
我已经晚了十年才回答这个问题,但以防万一有人像我一样仍在寻找答案,我想出了一个与上面 Osama Ashraf 建议的略有不同的解决方案。
我尝试通过传递当前位置来重新启动导航,并且它在大多数情况下都有效,但该解决方案不是超级可靠,因为您的应用程序提供的当前位置可能与显示的位置略有不同在 Google 地图中,当发生这种情况时,它不会检测到导航已自动完成。
为了始终停止导航,我发现您可以通过位于无法计算路线的地方的目的地,例如在海洋中间。例如,使用“0.0,0.0”作为坐标即可。
val uriString = "google.navigation:q=0.0,0.0&mode=d"
val intent = Intent(ACTION_VIEW, Uri.parse(uriString)).apply {
addFlags(FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_CLEAR_TOP)
}
activity.startActivity(intent)
这将再次打开 Google Maps 应用程序,因此如果您想返回到您的应用程序,您需要启动另一个 Intent 来执行此操作,可能会延迟几秒钟,因此它有时间处理 Google Maps Intent第一的。这是我用来这样做的代码:
Handler(Looper.getMainLooper()).postDelayed({
val intent = Intent(this, MainActivity::class.java)
intent.flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_REORDER_TO_FRONT
startActivity(intent)
}, 2000)