2011-03-25 22 views
8

Tengo una aplicación webView simple que carga una página de nuestro sitio con las ubicaciones y los números de teléfono que nuestros tíos de campo deben visitar cada día. Proporciona un gancho para iniciar la navegación o marcar el teléfono. Al regresar de la actividad externa, la aplicación se está bloqueando. Tocar el botón de inicio del teléfono, luego marcar el teléfono y volver a la aplicación funciona bien.guardar/restaurar el estado de la vista web de android

aquí está el código ...

Actualización 2 - Ya no estrellarse, vistas web está en blanco al regresar

public class VSIMobile_WebView extends Activity { 
private static String PROVIDER="gps"; 
private WebView browser; 
private LocationManager myLocationManager=null; 
private TelephonyManager myTeleManager = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    browser=(WebView)findViewById(R.id.webview); 
    myLocationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    myTeleManager=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
    browser.getSettings().setJavaScriptEnabled(true); 
    browser.addJavascriptInterface(new Locater(), "locater"); 
    browser.addJavascriptInterface(new JavaScriptInterface(this), "Android"); 
    if (savedInstanceState!=null){ 
     browser.restoreState(savedInstanceState); 
    }else{ 
     browser.loadUrl("http://zzz.com"); 
     browser.setWebViewClient(new HelloWebViewClient()); 
    } 
} 

public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    } 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    //Toast.makeText(getBaseContext(), browser.getUrl(), Toast.LENGTH_LONG).show(); 
    browser.saveState(outState); 
} 

@Override 
protected void onRestoreInstanceState(Bundle state) { 
    browser.restoreState(state); 
    super.onRestoreInstanceState(state); 
    //Toast.makeText(getBaseContext(), browser.getUrl(), Toast.LENGTH_LONG).show(); 
} 


/* Did not work 
public void onResume(Bundle inState){ 
    browser.restoreState(inState); 
    super.onResume(); 
} 
public void onPause(Bundle outState) { 
    browser.saveState(outState); 
    super.onPause(); 
} 
*/ 


@Override 
public void onResume(){ 
    super.onResume(); 
} 


@Override 
public void onPause() { 
    super.onPause(); 
} 
+0

¿podría publicar su salida de logcat? –

+0

http://stackoverflow.com/questions/1002085/android-webview-handling-orientation-changes –

Respuesta

0

No deberías estar Establecer las variables de myLocationManager y otras instancias, incluso si savedInstanceState != null?

Restaurar el estado WebView no va a hacer esto por usted, y su aplicación probablemente se cuelgue cuando intente quitarle la entrada a uno de ellos, dándole un NullPointerException.

+0

Capaz de volver a la aplicación ahora sin fallar, pero acaba de obtener un webbview en blanco con el título de la aplicación. Además, no se puede reproducir en el emulador. – RNeumann

+0

tal vez podrías actualizar la pregunta con tu código actual? –

+0

Además de todo lo demás, de alguna manera logré atornillar el eclipse en mi máquina y ahora no puedo abrir el emulador. Pasando por una reinstalación esta mañana. – RNeumann

0

Al reanudar su aplicación, aplique locationManager.getLastKnownLocation para obtener la última ubicación almacenada e inyéctela dentro de javascript de su sitio web. Debería hacer esto solo si el locationManager es null. Y locationManager drena la batería, sería aconsejable no usarla cuando el usuario no esté usando activamente la aplicación.

0

Activación de las propiedades, además del código anterior funciona como un encanto :)

android:launchMode="singleInstance" 
android:alwaysRetainTaskState="true" 

para cada actividad que contiene la vista Web en AndroidManifest.xml trabajó para mí. Aunque es una respuesta generalizada, resolvería su y muchas otras personas con este problema.

Cuestiones relacionadas