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

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

  • ¿Hay una alternativa a getUserMedia para Phonegap Android (local)?
  • Cordova CLI Phone Gap Aplicación navigator.app.exit Función no funciona
  • Uncaught TypeError: Object # <Object> no tiene ningún método 'exec' en el archivo: ///android_asset/www/index.html
  • Error al reproducir el video subido a través de PhoneGap FileTransfer
  • Cómo redirigir hacia la ventana de configuración de GPS en android o ios utilizando phonegap para activar o desactivar un GPS
  • Phonegap Plugin: Cómo convertir Base64 String a una imagen PNG en Android
  • Phonegap Build CLI-5.2.0 Descargar y cerrar desde dentro de la aplicación Web
  • Phonegap ChildBrowser plugin: Desactivar / Ocultar URL en la barra de ubicación, pero NO botones de atrás / adelante / salida
  • Incorporación Cordova WebView, Receptor no está registrado
  • PhoneGap 3 plugin: exec () llamada a plugin desconocido "..."
  • Cómo utilizar Phonegap Android Plugin de notificación local
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.