在Nougat下面的API上,您可以在清单中声明一个订阅CONNECTIVITY_CHANGES的接收器。这使我能够监听网络连接的变化,无论连接是打开还是关闭,并允许我执行任务,即使我的应用程序没有运行。
在Nougat上,这似乎不可能。我知道如果有网络连接,Nougat上的JobScheduler可以用于在后台执行某些任务,但似乎并不是一个监听网络连接丢失的选项。
换句话说,我希望能够在手机丢失所有连接(Wi-Fi,LTE等)时听到声音,并在发生这种情况时在后台执行某些操作。这可能在牛轧糖吗?
答案 0 :(得分: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;
}