メインのアクティビティのonStop、onPause、onResumeコールバックを別のクラス/オブジェクト内で受信できるかどうか誰か知っていますか?
別のクラス(WebView)内にあるブロードキャストレシーバーがあります。私は受信機を使用してネットワークがダウンしたことを検出し、いくつかの有用なコンテンツを含む私のページのローカルコピーに切り替えます。onStop / onPauseが呼び出されたときにブロードキャストレシーバーの登録を解除し、onResume中に再登録する必要があります。
これは手動で行うことができます(WebViewを拡張するクラスにいくつかのパブリックメソッドを追加して、それを実行します)が、Androidに呼び出してもらうと便利です。
編集:確かに、これがクラスです。startInternetMonitoring()/ stopInternetMonitoring()を呼び出さなくても、メインアクティビティのonStopが呼び出されたときに、Androidからコールバックを受け取ることができるようにしたいと思います。
package com.glimmersoft.spent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.util.AttributeSet;
import android.util.Log;
import android.webkit.WebSettings;
import android.webkit.WebView;
/**
* @author Jer
*
*/
public class OfflineWebView extends WebView {
private BroadcastReceiver receiver;
private IntentFilter filter;
private Context myContext;
public OfflineWebView(Context context,AttributeSet attrs) {
super(context, attrs);
WebSettings webSettings = this.getSettings();
webSettings.setJavaScriptEnabled(true);
myContext = context;
}//END CLASS CONSTRUCTTOR
/**
* @param internetOn The URL to display in this OfflineWebView when there is an active Internet connection.
* @param internetOff The URL to display in this OfflineWebView if there is no active Internet connection.
*/
public void setPages(final String internetOn, final String internetOff){
final OfflineWebView finalThisRef = this;
filter = new IntentFilter();
filter.addAction(SpendConstants.ANDROID_CONNECTIVITY_CHANGED);
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm=(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if(cm.getActiveNetworkInfo()!=null&&cm.getActiveNetworkInfo().isConnected()){// TODO: THIS FAILES IF
finalThisRef.loadUrl(internetOn);
}else{
finalThisRef.loadUrl(internetOff);
}
}//END IF/ELSE
};
myContext.registerReceiver(receiver, filter);
}//END FUNCTION SETPAGES
public void startInternetMonitoring(){
myContext.registerReceiver(receiver, filter);
}//END METHOD STARTINTERNETMONITORING
public void stopInternetMonitoring(){
myContext.unregisterReceiver(receiver);
}//END METHOD STOPINTERNETMONITORING
}//END CLASS OfflineWebView
皆さんありがとう!