2016-07-20 10 views
0

私は、ネットワークの変更を検出し、ネットワーク接続がない場合、ユーザーに警告するために、このチュートリアルに従っ:閉じるトップ・アクティビティ

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

を、それが活動を開くように私は、コードを修正ユーザーがネットワークから切断すると、NoInternetConnectionと呼ばれます。

ユーザーがネットワークに再接続すると、NoInternetConnectionアクティビティを終了します。私は放送受信機でこれを理解することができませんでした。これを行う方法に関するヒント?ここで

は私の放送受信機である:私のNoInternetActivityで

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

答えて

0

、私は活動を閉鎖するブロードキャストレシーバを作成しました:

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

} 

は、その後、私はこのように私の放送受信機でそれを呼び出す:

 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

このために 'LocalBroadcastManager'を使用することをお勧めします。標準のブロードキャストと同じパターン、つまりBroadcastReceiverです。つまり、ちょっとだけドロップする必要がありますが、ブロードキャストはアプリ内にとどまり、一般的には、はるかに高速です。 –

関連する問題