Cómo abrir la configuración de la ubicación de Android mediante el separador de teléfono

Estoy utilizando la geolocalización del usuario a través de phonegap.The exapmle se muestra a continuación. (ANDROIDE)

// onSuccess Callback // This method accepts a Position object, which contains the // current GPS coordinates // var onSuccess = function(position) { var element = document.getElementById('geolocation'); element.innerHTML = 'Latitude: '+ position.coords.latitude +'<br/>' + 'Longitude: ' + position.coords.longitude +<br/>' + 'Altitude: ' + position.coords.altitude +'<br/>' + 'Accuracy: ' + position.coords.accuracy +<br/>' + 'Altitude Accuracy: ' + position.coords.altitudeAccuracy +'<br/>' + 'Heading: ' + position.coords.heading +<br/>' + 'timestamp: ' + position.timestamp +<br/>'; }; // onError Callback receives a PositionError object // function onError(error) { alert('code: ' + error.code + '\n' + 'message: ' + error.message + '\n'); } navigator.geolocation.getCurrentPosition(onSuccess, onError); 

¿Es posible (usando el teléfono) la función de error para abrir el diálogo que nos llevará a la configuración de la ubicación (donde el usuario será capaz de darme acceso a su ubicación) en lugar de alerta, como se hace en google maps android application (screenshot below) ? Me gusta esto

2 Solutions collect form web for “Cómo abrir la configuración de la ubicación de Android mediante el separador de teléfono”

Yo haría lo que usted está diciendo, crear el diálogo, y enviarlos a la configuración; Estoy asumiendo que usted ha manejado conseguir el onError fcn llamado en el tiempo apropos, entonces entonces

 AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle(getString(R.string.loc_man)); builder.setMessage(getString(R.string.ask_for_gps)); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(i); } }); builder.setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(getBaseContext(), getString(R.string.gps_no), Toast.LENGTH_SHORT).show(); finish(); } }); builder.create().show(); 

Lo que también necesitas hacer es llamar a esta función de tu javascript … Oh, esto es divertido, b / c vas a usar un montón de conceptos java bastante cool de una vez y sólo he trabajado con Cordova, pero Esto debería funcionar igual =] Tenga en cuenta que si ve alguna variable indefinida en mi código, probablemente debería asumir que es un feild.

Así que digamos que está seguro de que este código golpea en error, vamos a inventar un nombre de interfaz; 'Android' es bastante lógico

 function onError(error) { alert('code: ' + error.code + '\n' + 'message: ' + error.message + '\n'); Android.TurnOnTuneIn(); } 

Ahora en su Java, grep alrededor de su aplicación phonegap para encontrar dondequiera que tiene 'WebView'; Si es algo como mis implementaciones cordova, tendrá webview.loadUrl () en él en algún lugar. Abra el archivo que define esta clase; Este es el de editar / colocar todos los java que estamos trabajando en esta pregunta. Después de algo así como 'la clase pública PhoneGapActivity extiende Actividad', inserta 'implementa CordovaInterface' (creo que no PhoneGapInterface); Si su IDE le da un error con la opción de implementar métodos abstractos, libra eso.

Asegúrese de que WebView es un elemento de la clase, no una variable de un método,

  //CordovaWebView should work, but maybe it needs to be PhoneGapWebView, you're smart, you'll figure it out =] webView = (CordovaWebView) findViewById(R.id.data_window); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setBuiltInZoomControls(false); getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); //this always seemed like a good idea to me webView.addJavascriptInterface(new JSInterface(this), "Android"); //see the interface name? =] //this line should already be in this class, just re-use it webView.loadUrl("file:///"+getContext().getFilesDir().toString()+"/index.html"); 

Ahora hacen que la interfaz:

 public class JSInterface { // these fcns are exposed to the WebView private Context context; public JSInterface(Context context) { context = context; } @JavascriptInterface public void doEchoTest(String echo) { //A useful test; I usually use it in a webViewClient that runs the function that calls this in my javascript with this: //webView.loadUrl("javascript:echo('"echo!!!"');"); //this exact formatting //but webViewClient is outside the scope of your question and would just confuse the //issue; however, you may need to implement //webViewClient with an delaying asynctask to seperatly run the js you loaded with the webpage, //again, I used to do this ground-up, and phoneGap Might Just Work. Toast.makeText(context, echo, Toast.LENGTH_SHORT).show(); } @JavascriptInterface public void TurnOnTuneIn { aMethodThatHasThatFirstBitOfCodeIPublished(); } } 

Me encantan las interfaces =]

El resto es bastante caluroso para sus propósitos (pero divertido de jugar con, sin embargo!) Y es posible que no necesite mucho si alguno de ellos. Si usted nota el método que puse encima de la tapa no está volviendo la manera que usted la quiere a, usted puede utilizar el método de startActivityForResult para hacer iguales y apostaré que trabajará agradable; Tenga en cuenta el "super". Llamada que el Override hace; Solo necesitas el Propósito (como te mostré arriba) y algún número de referencia para recibir el resultado … otra vez, fuera del alcance de la pregunta. También, he incluido soporte para el ResultCallback b / ca chico con el que estaba trabajando, pero no lo uso yo mismo.

 @Override public Activity getActivity(){ return this; } @Override public void setActivityResultCallback(CordovaPlugin plugin) { this.activityResultCallback = plugin; } public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode) { this.activityResultCallback = command; this.activityResultKeepRunning = this.keepRunning; // If multitasking turned on, then disable it for activities that return results if (command != null) { this.keepRunning = false; } // Start activity super.startActivityForResult(intent, requestCode); } @Override public void cancelLoadUrl(){ // no op } @Override public Object onMessage(String id, Object data) { LOG.d("is", "onMessage(" + id + "," + data + ")"); if ("exit".equals(id)) { super.finish(); } return null; } @Override public void onPause() { Method pause = null; // Pauses the webview. try { pause = WebView.class.getMethod("onPause"); } catch (SecurityException e) { } catch (NoSuchMethodException e) { } if (pause != null) { try { pause.invoke(webView); } catch (InvocationTargetException e) { } catch (IllegalAccessException e) { } } else { // No such method. Stores the current URL. suspendUrl = webView.getUrl(); // And loads a URL without any processing. webView.loadUrl("file:///android_asset/nothing.html"); } super.onPause(); } @Override public void onResume() { super.onResume(); Method resume = null; // Resumes the webview. try { resume = WebView.class.getMethod("onResume"); } catch (SecurityException e) { } catch (NoSuchMethodException e) { } if (resume != null) { try { resume.invoke(webView); } catch (InvocationTargetException e) { } catch (IllegalAccessException e) { } } else if (webView != null) { // No such method. Restores the suspended URL. if (suspendUrl == null) { //this should be wherever you have your page; you can probably copy it from what is there now. webView.loadUrl("file:///"+getContext().getFilesDir().toString()+"/index.html"); } else { webView.loadUrl(suspendUrl); } } } 

Esperanza que le consigue más adelante adelante; Si no lo usa ya, recuerde usar el control de versiones, ¡para que pueda ser imprudente con sus ediciones!

Gl hf

Yo comparto con ustedes, este plugin de teléfono, que le permite hacer eso. He añadido esa funcionalidad a ese complemento como contribuyente. https://github.com/BastienL/GPSDetector

  • Los complementos no siempre se agregan después de cordova añadir plataforma android and iOs
  • Establecer permisos de aplicación en Android 6.x (Marschmallow) en la aplicación phonegap / cordova
  • Concatenar y minify los archivos del plugin cordova / phonegap
  • cómo probar la notificación push en android phonegap?
  • API de la cámara PhoneGap para Android - Excepción no captada
  • Pasar y devolver los valores de javascript y android y utilizarlos como plugin de brecha de teléfono
  • ¿Hay una alternativa a getUserMedia para Phonegap Android (local)?
  • La jarra de Córdoba falta en la brecha telefónica 3.5.0
  • Cómo establecer la posición de spinner con cordova
  • Phonegap Conexión de red - No se puede leer la propiedad 'tipo' de undefined
  • Mensajes de QTAGUID del spam de proyecto Android phonegap
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.