【问题标题】:Starting an activity after google maps is closed谷歌地图关闭后开始活动
【发布时间】:2020-03-10 10:58:43
【问题描述】:

在我的应用程序中,当单击按钮时,它会使用以下代码将用户重定向到移动设备上的 Google 地图应用程序

 Uri gmmIntentUri = Uri.parse("google.navigation:q=" + a + "," + b);
                                    Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
                                    mapIntent.setPackage("com.google.android.apps.maps");
                                    startActivity(mapIntent);

现在我想要的是当用户关闭谷歌地图/返回我的应用程序时,它应该启动一个不同的活动,而不是它离开的那个。 是否有可能做到这一点?我已经使用延迟来启动辅助活动,但它没有给出我需要的结果,因为有时它会在谷歌地图应用程序上运行。 我对 Android 工作室完全陌生。

Edit-onSaveInstanceState 是解决此问题的一种可能方法吗?

【问题讨论】:

    标签: android android-studio android-intent android-activity onsaveinstancestate


    【解决方案1】:

    Google documentation中有一个方法:startActivities(Intent[] intents, Bundle options)

    我个人以前从未使用过它,但似乎是您想要的。 这是代码。我试过了,它奏效了。它在 Kotlin 中,但您可以用 Java 重新编写它。注意:确保将地图活动作为数组中的第二个开始。

    val gmmIntentUri = Uri.parse("google.navigation:q=$a,$b")
            val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
            mapIntent.setPackage("com.google.android.apps.maps")
            val i = Intent(this, SecondActivity::class.java)
            val intents = arrayOf(i, mapIntent)
            startActivities(intents, null)
    

    【讨论】:

      【解决方案2】:

      可能有几种方法可以解决该问题。例如通过使用static Map<K,O> 和监控Activity 生命周期。但是因为static成员应该被妥善处理以避免泄漏为什么不使用SharedPreferences

      例如,在您启动Google Maps 的上述代码部分中,您可以将状态保存在SharedPreferences 中,只需调用:

      PreferenceManager.getDefaultSharedPreferences(context)
                  .edit()
                  .putBoolean("maps", true)
                  .apply();
      

      Google Maps 启动时,您的应用程序将进入onPause 状态,因此在用户关闭Google Maps 后,您的应用程序将是resumed,因此将在那里调用onResume 方法,您可以检查状态:

      @Override
      protected void onResume() {
          super.onResume();
          boolean isComingFromMaps = PreferenceManager.getDefaultSharedPreferences(context)
                  .getBoolean("maps", false);
      if(isComingFromMaps) {
        //Launch your activity here
      
        //also don't forget to save value back to false to avoid bug when next time Activity is started 
      PreferenceManager.getDefaultSharedPreferences(context)
                  .edit()
                  .putBoolean("maps", false)
                  .apply();
          }
      }
      

      最后的检查是确保用户没有从地图返回,而是最小化这两个应用程序,或者在调用 super.onDestroy() 之前将它们设置回 false。喜欢:

       @Override
      protected void onDestroy() {
      
      PreferenceManager.getDefaultSharedPreferences(context)
                  .edit()
                  .putBoolean("maps", false)
                  .apply();
      
          super.onDestroy();
      }
      

      【讨论】:

        猜你喜欢
        • 2018-03-18
        • 2012-03-04
        • 2011-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-10
        相关资源
        最近更新 更多