Cómo manejar onActivityResult () con Mortero

Estoy buscando integrar una aplicación con Google Play Services y Mortero para recuperar la ubicación actual del usuario.

Https://developer.android.com/training/location/retrieve-current.html#CheckServices

Esto requiere el manejo de OnActivityResult () en el caso de que Google Play Services no esté disponible.

Mi primer instinto sobre cómo hacer esto es hacer getFirstScreen() en Main.java devolver una pantalla de carga en blanco. Https://github.com/square/mortar/blob/master/mortar-sample/src/main/java/com/example/mortar/core/Main.java

Después de la inyección, durante onCreate() realice la comprobación para ver si Google Play Services está disponible. Si lo es, entonces llama a flow.goTo(<location using screen>) , si no, no hace nada y espera que onActivityResult() sea ​​llamado. Entonces, cuando onActivityResult() dispara, simplemente llame a flow.goTo(<location using screen>) .

Lo anterior parece un poco hacky para mí. (Déjeme saber si necesita aclaración). Así que estoy pensando que la otra solución podría ser hacer algo similar a este Mortero + Flujo con bibliotecas de terceros enganchado al ciclo de vida de la actividad y conectar onActivityResult() al presentador. El problema con esto es que no tendré acceso a la Activity de un presentador que hace imposible llamar a GooglePlayServicesUtil.getErrorDialog(...) porque requiere Activity .

Creo que onActivityResult() es muy importante. Tal vez debería ser una parte de la biblioteca de mortero?

Aquí es cómo generalmente tratamos con startActivityForResult en Square Register.

 public SomePresenter extends Presenter<SomePresenter.Activity> { public interface Activity { void startActivityForResult(android.content.Intent intent, int requestCode); } public final void onActivityResult(int requestCode, int resultCode, Intent data) { // Make sure it's the expected requestCode and resultCode and do your thing. // If it isn't, no-op, someone else will handle it. } } 

Y la actividad se parece a:

 public MyActivity extends Activity implements SomePresenter.Activity { @Override protected void onCreate(Bundle bundle) { // Do the usual mortar init stuff somePresenter.takeView(this); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); somePresenter.onActivityResult(requestCode, resultCode, data); } @Override protected void onDestroy() { somePresenter.dropView(this); super.onDestroy(); } } 

Eso no le ayuda con el diálogo de error, pero eso suena como una preocupación por separado para mí de todos modos. Parece que puedes usar un par Popup / PopupPresenter allí. (No estoy emocionado con Popup, pero se hace el trabajo hasta que tengamos una idea mejor.) ¿O tal vez la actividad debería seguir adelante y tratar con ella misma? No estoy muy familiarizado con los servicios de juego, no han tratado con ellos todavía.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.