4

在 Nougat 下的 API 上,您只需在订阅 CONNECTIVITY_CHANGES 的清单中声明一个接收器。这让我可以监听网络连接的变化,无论连接是打开还是关闭,即使我的应用程序没有运行,我也可以执行任务。

在牛轧糖上,这似乎是不可能的。我知道如果有网络连接,Nougat 上的 JobScheduler 可用于在后台执行某些任务,但似乎没有监听网络连接丢失的选项。

换句话说,我希望能够听到我的手机何时失去所有连接(Wi-Fi、LTE 等)并在发生这种情况时在后台执行某些操作。这可能在牛轧糖上吗?

4

1 回答 1

0

您可以使用 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;
}
于 2016-11-15T04:04:09.233 回答