在我的应用程序中,如果没有Internet连接,我不需要允许用户使用该应用程序。我知道有很多好的教程可以做到这一点,但非实际上已经满足了我需要的要求。Android:适用于应用程序的Internet BroadcastReceiver
互联网连接应该一直在应用程序中检查。这就是为什么,并且基于this文档的一部分,我在Application
类中注册了我的接收器。然而,问题是在哪里注销接收器,因为类中没有onDestort(), onStop()
方法。
我尝试的另一种选择是(UN)的延伸AppCompatActivity
,并在应用中的所有其他活动扩展了BaseActivity
我BaseActivity
类注册的接收器,但我不断收到java.lang.IllegalArgumentException: Receiver not registered
很多问题通过得到解决如果在onStart()
中注册了onStop()
,或者在onDestroy()
中取消了注册,那么在onStop()
中注销接收方,如果它在onCreate()
中注册,但这对我也不适用。
public class ConnectivityReceiver extends BroadcastReceiver {
public interface ConnectivityChangedListener {
void onConnectivityChanged(boolean isConnected);
}
public static ConnectivityChangedListener listener;
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
if (listener != null) {
Log.i("Connectivity", "" + isConnected);
listener.onConnectivityChanged(isConnected);
}
}
}
我BaseActivity.java(其他活动延长此一)
public class BaseActivity extends AppCompatActivity implements ConnectivityReceiver.ConnectivityChangedListener {
private static BroadcastReceiver br;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
br = new ConnectivityReceiver();
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
ConnectivityReceiver.listener = this;
registerReceiver(br, filter);
}
@Override
public void onConnectivityChanged(boolean isConnected) {
Log.i("Connectivity", "Activity " + isConnected);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(br);
}
}
检查此HTTPS然后注销。com/questions/34244581/receiver-not-registered-error –
@SunilP Will,解决了这个问题。谢谢。 另一个问题是,我使用的性能好的方法是什么?我的意思是(注册接收器在BaseActivity –
是啊,它应该允许你 –