在当前活动中显示SnackBar

时间:2016-09-07 15:25:53

标签: android broadcastreceiver android-snackbar

我有很多活动,并且我在manifest中注册了broadCastReceiver以检查连接。 当我丢失互联网连接时,我想在当前活动中显示Snackbar 我在清单中注册了我的接收器:

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

在BroadCast课程中:

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

       }

   }
}

1 个答案:

答案 0 :(得分:1)

如果您只在某个活动处于活动状态时响应广播,则应在活动中注册和取消注册广播接收器,并且注册/取消注册呼叫应出现在活动的匹配生命周期事件中onCreate() / onDestroy()onStart() / onStop()

为具有多个活动的应用程序执行此操作的简单方法是让每个活动扩展管理接收器的基类,例如:此大纲:

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

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

您还应该使您的连接接收器成为此活动的内部类,并从清单文件中删除接收器声明,因为您现在正在动态注册它。