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