Salir de la intención de google maps en android

Estoy implementando la navegación personalizada paso a paso en mi aplicación Android. Para lograr esto, he iniciado la actividad de MainActivity con una intención que utiliza Intent.ACTION_VIEW como acción y "google.navigation: q" como uri string. La página de navegación de google maps se carga con éxito en mi aplicación.

Pero, no sé salir con gracia de esta página. Si utilizo la pulsación del botón de retroceso, se necesitan 4 clics del botón de retroceso para mostrar mi pantalla de actividad principal. ¿Hay alguna posibilidad de colocar el botón "salir" en esta página.

He intentado "onActivityForResult" y "onBackPressed" para destruir las pantallas de google maps. Nada de esto funciona. Proporcione algunas sugerencias para ir más lejos.

Sé que estoy muy tarde para contestar esto, pero tal vez pueda ayudar a alguien.

No puedes regresar de google map a tu actividad / app en solo back press para esto necesitas crear una vista flotante / widget como ola / uber que hará esto para ti después de la implementación correcta. Esta es mi implementación.

Primero el usuario irá a la aplicación de mapas desde YourActivity. En esta actividad pediremos permiso para SYSTEM_ALERT_WINDOW (DRAW OVER, para SDK> MarshMallow) al hacer clic en alguna vista. A continuación, lanzaremos google map, así como un servicio creado por nosotros para crear un icono flotante.

 class YourActivity extends AppCompatActivity{ private GetFloatingIconClick mGetServiceClick; public static boolean isFloatingIconServiceAlive = false; onCreate(){ mGetServiceClick = new GetFloatingIconClick(); somebtn.onclick(){ askDrawOverPermission(); } } private class GetFloatingIconClick extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent selfIntent = new Intent(YourActivity.this, YourActivity.class); selfIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(selfIntent); } } private void askDrawOverPermission() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { // if OS is pre-marshmallow then create the floating icon, no permission is needed createFloatingBackButton(); } else { if (!Settings.canDrawOverlays(this)) { // asking for DRAW_OVER permission in settings Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getApplicationContext().getPackageName())); startActivityForResult(intent, REQ_CODE_DRAW_OVER); } else { createFloatingBackButton(); } } } // starting service for creating a floating icon over map private void createFloatingBackButton() { Intent iconServiceIntent = new Intent(YourActivity.this, FloatingOverMapIconService.class); iconServiceIntent.putExtra("RIDE_ID", str_rideId); Intent navigation = new Intent(Intent.ACTION_VIEW, Uri .parse("google.navigation:q=" + lat_DEST + "," + lng_DEST + "&mode=d")); navigation.setPackage("com.google.android.apps.maps"); startActivityForResult(navigation, 1234); startService(iconServiceIntent); } @TargetApi(Build.VERSION_CODES.M) @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQ_CODE_DRAW_OVER) { // as permissions from Settings don't provide any callbacks, hence checking again for the permission // so that we can draw our floating without asking user to click on the previously clicked view // again if (Settings.canDrawOverlays(this)) { createFloatingBackButton(); } else { //permission is not provided by user, do your task //GlobalVariables.alert(mContext, "This permission is necessary for this application's functioning"); } } else if (requestCode == 1234) { // no result is returned by google map, as google don't provide any apis or documentation // for it. } else { super.onActivityResult(requestCode, resultCode, data); } } } 

Clase de servicio: –

 public class FloatingOverMapIconService extends Service { private WindowManager windowManager; private FrameLayout frameLayout; private String str_ride_id; public static final String BROADCAST_ACTION = "com.yourpackage.YourActivity"; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); createFloatingBackButton(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // to receive any data from activity str_ride_id = intent.getStringExtra("RIDE_ID"); return START_STICKY; } @Override public void onDestroy() { super.onDestroy(); windowManager.removeView(frameLayout); } private void createFloatingBackButton() { CurrentJobDetail.isFloatingIconServiceAlive = true; WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); params.gravity = Gravity.LEFT | Gravity.CENTER_VERTICAL; windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); frameLayout = new FrameLayout(this); LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); // Here is the place where you can inject whatever layout you want in the frame layout layoutInflater.inflate(R.layout.custom_start_ride_back_button_over_map, frameLayout); ImageView backOnMap = (ImageView) frameLayout.findViewById(R.id.custom_drawover_back_button); backOnMap.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(BROADCAST_ACTION); intent.putExtra("RIDE_ID", str_ride_id); sendBroadcast(intent); //stopping the service FloatingOverMapIconService.this.stopSelf(); CurrentJobDetail.isFloatingIconServiceAlive = false; } }); windowManager.addView(frameLayout, params); } } 

Icono flotante Xml: –

 <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <ImageView android:id="@+id/custom_drawover_back_button" android:layout_width="70dp" android:layout_height="100dp" android:src="@drawable/common_full_open_on_phone" android:scaleType="center" android:background="@color/colorAccent"/> </LinearLayout> 

Archivo de manifiesto: –

 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <activity android:name=".Activities.YourActivity" android:launchMode="singleTop" /> <service android:name=".Utils.FloatingOverMapIconService" android:exported="false" /> 
  • ¿Cómo obtener la duración de la navegación con el tráfico de google maps api?
  • GooglePlayServicesUtil.getErrorDialog es nulo
  • ¿Cómo ajustar el nivel de zoom para ajustar el límite y, a continuación, el mapa del centro en marcador de desplazamiento?
  • Google Maps v2 Error de autorización. Diferentes SHA1
  • ¿Existe una funcionalidad como el método onFirstFix en el Android Maps Api V2?
  • Google Map falla con recursos $ NotFoundException cuando se reemplaza en FrameLayout
  • Cómo agregar animaciones personalizadas en Google Map V3 Marker cuando suelto cada marcador uno por uno?
  • Android Google Map InfoWindow punto de anclaje después de la rotación del marcador
  • ¿Cómo pueden las aplicaciones usar Google Offline Maps de Android 4+?
  • Extraño error "java.io.IOException: EOF" en Android
  • Android Place API: PlaceDetectionApi.getCurrentPlace () siempre devuelve ningún resultado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.