2016-09-07 80 views
0

我有很多活動,並且我在manifest中註冊了broadCastReceiver以檢查Connectivity。 我想秀Snackbar在當前活動當我失去互聯網連接 我註冊了我的接收機清單:在當前活動中顯示SnackBar

<receiver android:name="com.itmind.spac.spacapp.services.ConnectivityChangeReceiver"> 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 
     </intent-filter> 
    </receiver> 

並運行在廣播類:

public class ConnectivityChangeReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(final Context context, final Intent intent) { 
     ConnectivityManager cm =(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (cm.getActiveNetworkInfo()!=null){ 
     Toast.makeText(context, "Connected to Internet", Toast.LENGTH_LONG).show(); 
     } 
     else{ 
     /** I WOULD CREATE A SNACKBAR FOR ALL ACTIVITIES, OR FOR MY CURRENT ACTIVITY */ 
     Toast.makeText(context, "No Connected to Internet", Toast.LENGTH_LONG).show(); 

     } 

    } 
} 
+0

看看:http://stackoverflow.com/questions/2513832/how-to-send-data-from-broadcastreceiver-to-an-activity-in-android –

回答

1

如果你要到廣播響應只有當您的一項活動處於活動狀態時,您應該在活動中註冊和取消註冊廣播接收方,並且註冊/取消註冊呼叫應該出現在活動的匹配生命週期事件中,如onCreate()/onDestroy()onStart()/onStop()

一個簡單的方法來做到這一點與多個活動的應用程序是通過讓每一個活動延伸管理的接收器,例如這個綱要基類:

public class MyActivity extends AppCompatActivity { 
    void onCreate(...) { 
    // register the receiver here... 
    } 

    void onDestroy() { 
    // unregister the receiver here... 
    } 
} 

你也應該讓你連接接收器此活動的內部類,並從清單文件中刪除接收者聲明,因爲您現在正在動態註冊它。

+0

是啊!謝謝!我在onCreate和OnDestroy中註冊了generalActivity的擴展,並在BroadCast中創建一個接口,似乎很有用! 謝謝! – LorenzoBerti