сохранить / восстановить состояние веб-просмотра Android - PullRequest
8 голосов
/ 25 марта 2011

У меня есть простое приложение webView, которое загружает страницу с нашего сайта с указанием местоположений и телефонных номеров, которые наши полевые сотрудники должны посещать каждый день.Он обеспечивает ловушку для запуска навигации или набора номера телефона.При возвращении из-за пределов активности приложение вылетает.Нажав на кнопку «Домой» телефона, затем набрав номер телефона, затем вернувшись к приложению, можно работать.

вот код ...

Обновление 2 - больше не вылетает, веб-представление остается пустым после возврата

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();
}

Ответы [ 3 ]

0 голосов
/ 29 декабря 2014

После возобновления работы приложения примените locationManager.getLastKnownLocation, чтобы получить последнее сохраненное местоположение и вставить его в JavaScript веб-просмотра.Это следует делать только в том случае, если locationManager равно nulllocationManager разряжает батарею, было бы разумно не использовать ее, когда пользователь не активно использует приложение.

0 голосов
/ 30 декабря 2015

Включение следующих свойств, в дополнение к приведенному выше коду, работает как шарм:)

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

для каждого действия, содержащего WebView в AndroidManifest.xml, работало для меня.Хотя это обобщенный ответ, он решит вашу и многих других людей, которые застряли с этой проблемой.

0 голосов
/ 25 марта 2011

Разве вы не должны устанавливать myLocationManager и другие переменные экземпляра, даже если savedInstanceState != null?

Восстановление состояния WebView не сделает этого за вас, и ваше приложение, вероятно, аварийно завершает работу, когда оно пытается отменить защиту одного из них, давая вам NullPointerException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...