google 地图关闭后开始 activity

Starting an activity after google maps is closed

在我的应用程序中,当单击按钮时,它使用以下代码将用户重定向到移动设备上的 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);

现在我想要的是当用户关闭 Google 地图/ returns 到我的应用程序时,它应该启动一个不同的 activity 而不是它原来的那个. 是否有可能做到这一点?我使用延迟启动辅助 activity 但它没有给出我需要的结果,因为有时它会在 Google 地图应用程序上运行。 我对 Android 工作室还很陌生。

编辑 - onSaveInstanceState 是解决此问题的可能方法吗?

可能有几种方法可以解决该问题。例如通过使用 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();
    }
}

另外,最后的检查是为了确保用户是否没有从地图 return 而是最小化两个应用程序,或者杀死它们,您希望在 [=25= 之前将值设置回 false ] 叫做。喜欢:

 @Override
protected void onDestroy() {

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

    super.onDestroy();
}

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

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

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)