2016-07-20 9 views
0

folgte ich dieses Tutorial, um Änderungen im Netzwerk zu erkennen und den Benutzer zu warnen, wenn keine Netzwerkverbindung ist:Schließen Top Aktivität von Broadcast-Receiver

http://viralpatel.net/blogs/android-internet-connection-status-network-change/

ich den Code so modifiziert, dass sie eine Aktivität eröffnet NoInternetConnection wird aufgerufen, wenn der Benutzer die Verbindung zu einem Netzwerk trennt.

Wenn der Benutzer die Verbindung mit dem Netzwerk wieder herstellt, möchte ich die NoInternetConnection-Aktivität schließen. Ich konnte das mit dem Broadcast Receiver nicht herausfinden. Irgendwelche Tipps, wie man das macht?

Hier mein Broadcast-Receiver ist:

public class NetworkChangeReceiver extends BroadcastReceiver { 

    private static final String TAG = NetworkChangeReceiver.class.getSimpleName(); 

    @Override 
    public void onReceive(final Context context, final Intent intent) { 

     String status = NetworkUtil.getConnectivityStatusString(context); 
     Log.d(TAG, "status: " + status); 

     ActivityManager am = (ActivityManager) context. 
       getSystemService(Activity.ACTIVITY_SERVICE); 
     String className = am.getRunningTasks(1).get(0).topActivity.getClassName(); 

     if(status == "connected"){ 
      if(className.toLowerCase().contains("nointernetactivity")){ 
       // check if the No Internet Activity context is visible 
       Log.d(TAG, "Close noInternetActivity"); 

      } 

     }else { 
      if(!className.toLowerCase().contains("nointernetactivity")){ 
       Log.d(TAG, "opening NoInternetActivity"); 
       Intent i = new Intent(context, NoInternetActivity.class); 
       i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       context.startActivity(i); 
      } 
     } 
//  Toast.makeText(context, status, Toast.LENGTH_LONG).show(); 
    } 
} 

Antwort

0

In meinem NoInternetActivity, habe ich eine Broadcast-Receiver, die Aktivität zu schließen:

public class NoInternetActivity extends AppCompatActivity { 

    private static Context context; 
    private BroadcastReceiver _closeActivityReceiver = new CloseActivityReceiver(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_no_internet); 
     context = this; 

     IntentFilter filter = new IntentFilter("closeNoInternetActivity"); 
     this.registerReceiver(_closeActivityReceiver, filter); 

    } 

    private class CloseActivityReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      // close this damn activity! 
      finish(); 
     } 
    } 

    @Override 
    public void onDestroy(){ 
     super.onDestroy(); 
     this.unregisterReceiver(this._closeActivityReceiver); 
    } 

} 

Dann nenne ich es in meinem Broadcast-Receiver wie folgt aus:

 if(className.toLowerCase().contains("nointernetactivity")){ 
      // check if the No Internet Activity context is visible 
      Log.d(TAG, "Close noInternetActivity"); 
      Intent in = new Intent("closeNoInternetActivity"); 
      context.sendBroadcast(in); 

     } 
+0

Sie könnten 'LocalBroadcastManager' dafür verwenden. Das gleiche Muster wie bei Standard-Broadcasts und 'BroadcastReceivers' - d. H., Sie müssten es nur einlegen -, aber die Broadcasts bleiben in Ihrer App und sind im Allgemeinen schneller, merklich. –