나는 같은 문제가 있었는데, 나는 그렇게했다. 그것은 나를 위해 일했고, 나는 그것이 도움이되기를 바랍니다.
public class NewActivity extends AppCompatActivity {
final static String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
IntentFilter intentFilter;
MyReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new);
intentFilter = new IntentFilter();
intentFilter.addAction(CONNECTIVITY_ACTION);
receiver = new MyReceiver();
if(checkForInternet()){
loadData();
}else{
updateUI();
}
}
@Override
protected void onResume() {
super.onResume();
registerReceiver(receiver, intentFilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(receiver);
}
// Self explanatory method
public boolean checkForInternet() {
ConnectivityManager cm =
(ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
}
void loadData(){
// do sth
}
void updateUI(){
// No internet connection, update the ui and warn the user
}
private class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String actionOfIntent = intent.getAction();
boolean isConnected = checkForInternet();
if(actionOfIntent.equals(CONNECTIVITY_ACTION)){
if(isConnected){
loadData();
}else{
updateUI();
}
}
}
}
}
리시버를 매니페스트에 추가하면이 액티비티에만 저장됩니다.
감사합니다. 'final static String CONNECTIVITY_ACTION'은 이미'android.net.ConnectivityManager' 클래스에 존재합니다. 'onCreate()'에서'if (checkForInternet()) {loadData(); ... ', 그것은 BroadcastReceiver에서 즉시 호출되기 때문입니다. – CoolMind
기여해 주셔서 감사합니다. –
앱이 강제 종료 될 때이 기능이 작동합니까? – Priya