2016-09-07 76 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