这是我的 MainActivity,我已经在 onstart 中注册了我的网络调用。在此代码中,无论设备是否打开互联网 wifi,都不会调用onUnavailable() 。我想在单击一个按钮后检查互联网,如果连接了互联网,它将继续进行下一个活动,否则没有
public class MainActivity extends AppCompatActivity {
private TextView textView;
ConnectivityManager.NetworkCallback networkCallback;
ConnectivityManager manager;
public static final String TAG = "bantai";
private NetworkRequest networkRequest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.internetTextview);
networkRequest = new NetworkRequest.Builder().build();
manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
networkCallback = new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(@NonNull Network network) {
super.onAvailable(network);
Log.d(TAG, "onAvailable: ");
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d(TAG, "onAvailable: "+ Thread.currentThread().getName());
textView.setText("onAvailable");
}
});
}
@Override
public void onLosing(@NonNull Network network, int maxMsToLive) {
super.onLosing(network, maxMsToLive);
Log.d(TAG, "onLosing: ");
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d(TAG, "onAvailable: "+ Thread.currentThread().getName());
textView.setText("loosing");
}
});
}
@Override
public void onLost(@NonNull Network network) {
super.onLost(network);
Log.d(TAG, "onLost: ");
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d(TAG, "onAvailable: "+ Thread.currentThread().getName());
textView.setText("lost");
}
}); }
@Override
public void onUnavailable() {
super.onUnavailable();
Log.d(TAG, "onUnavailable: ");
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d(TAG, "onAvailable: "+ Thread.currentThread().getName());
textView.setText("unavailable");
}
}); }
@Override
public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) {
super.onCapabilitiesChanged(network, networkCapabilities);
Log.d(TAG, "onCapabilitiesChanged: ");
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d(TAG, "onAvailable: "+ Thread.currentThread().getName());
textView.setText("capability");
}
}); }
@Override
public void onLinkPropertiesChanged(@NonNull Network network, @NonNull LinkProperties linkProperties) {
super.onLinkPropertiesChanged(network, linkProperties);
Log.d(TAG, "onLinkPropertiesChanged: ");
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d(TAG, "onAvailable: "+ Thread.currentThread().getName());
textView.setText("link");
}
}); }
@Override
public void onBlockedStatusChanged(@NonNull Network network, boolean blocked) {
super.onBlockedStatusChanged(network, blocked);
Log.d(TAG, "onBlockedStatusChanged: ");
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d(TAG, "onAvailable: "+ Thread.currentThread().getName());
textView.setText("blocked");
}
}); }
};
}
@Override
protected void onStart() {
super.onStart();
manager.requestNetwork(networkRequest,networkCallback);
}
@Override
protected void onStop() {
super.onStop();
manager.unregisterNetworkCallback(networkCallback);
}
此命令还ConnectivityManager.requestNetwork(networkRequest, networkCallback, 3000)
需要 Api 级别 21 +,超时时间为 3 秒。