可以使用NetworkChangeReceiver
public class NetworkChangeReceiver extends BroadcastReceiver {
private static final String LOG_TAG = "NetworkChangeReceiver";
private boolean isConnected = false;
Context mContext;
@Override
public void onReceive(Context context, Intent intent) {
Log.v(LOG_TAG, "Receieved notification about network status");
isNetworkAvailable(context);
mContext=context;
}
public boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
if (!isConnected) {
Log.v(LOG_TAG, "Now you are connected to Internet!");
Toast.makeText(context, R.string.internet_available, Toast.LENGTH_SHORT).show();
isConnected = true;
}
return true;
}
}
}
}
Log.v(LOG_TAG, "You are not connected to Internet!");
Toast.makeText(context, R.string.internet_not_available, Toast.LENGTH_SHORT).show();
isConnected = false;
return false;
}
您是否嘗試過創建一個'JobInfo'用'setRequiredNetworkType(JobInfo.NETWORK_TYPE_NONE)',另一個'setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)'? –
您可能需要謹慎行事 - 對蜂窩設備收音機的更改確實頻繁發生 - 不要期望它會停止,否則可能會使用戶手機非常忙碌。 – apelsoczi
@JaredRummler NETWORK_TYPE_NONE不會做你認爲它做的事。這基本上意味着運行這個工作,不管你有什麼樣的網絡連接而不是這個意義:只有在沒有網絡時才做這個工作 –