以编程方式停止Google地图导航

时间:2011-08-12 09:32:55

标签: android

我目前使用以下内容从我的应用程序启动Google导航:

Intent navigationIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("google.navigation:q=" + latLong.getLatitude() + "," + latLong.getLongitude()));

有谁知道我如何停止从我自己的应用程序导航?

我试过杀了它,但似乎我没有得到许可,还有其他办法吗?

3 个答案:

答案 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)