How can I make something in my Java constantly check for connectivity of internet I already have something that checks for connectivity of internet but do not know how to make it constant
Current connectivity checker
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
return capabilities != null && (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET));
} else {
NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
return activeNetwork != null && activeNetwork.isConnected();
}
}
return false;
}]
I have done it in Kotlin. If you face problem in converting Kotlin into Java you can ask me for help.
So, I am using Broadcast Receiver and detect whenever the network state changed and when there is no Internet, a dialogBox will show.
MainActivity.kt
class MainActivity : AppCompatActivity() {
private var br: BroadcastReceiver? = null
private var filter: IntentFilter? = null
private var mContext: MainActivity? = null
private var isPaused = false
private var toConfirm = true
private var noInternetBuilder: AlertDialog.Builder? = null
private var noInternetDialog: AlertDialog? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
br = MyBroadCastReceiver()
filter = IntentFilter()
filter?.addAction("android.net.conn.CONNECTIVITY_CHANGE")
mContext = this@MainActivity
mContext?.registerReceiver(br, filter)
}
/**
* Broadcast for Internet Checking
*
*/
inner class MyBroadCastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if (!isNetworkStatusAvailable(this@MainActivity)) {
if (!isPaused) {
toConfirm = true
if (noInternetDialog != null) {
noInternetDialog?.dismiss()
}
showDialogNoInternet(this@MainActivity)
}
toConfirm = false
} else {
toConfirm = true
if (noInternetDialog != null) {
if (noInternetDialog!!.isShowing) {
noInternetDialog?.dismiss()
}
}
}
}
}
fun isNetworkStatusAvailable(context: Context): Boolean {
var result = false
val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val networkCapabilities = connectivityManager.activeNetwork ?: return false
val actNw =
connectivityManager.getNetworkCapabilities(networkCapabilities) ?: return false
result = when {
actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
else -> false
}
} else {
@Suppress("DEPRECATION")
connectivityManager.run {
connectivityManager.activeNetworkInfo?.run {
result = when (type) {
ConnectivityManager.TYPE_WIFI -> true
ConnectivityManager.TYPE_MOBILE -> true
ConnectivityManager.TYPE_ETHERNET -> true
else -> false
}
}
}
}
return result
}
fun showDialogNoInternet(activity: Activity) {
noInternetBuilder = AlertDialog.Builder(activity)
val viewGroup = findViewById<ViewGroup>(android.R.id.content)
val dialogView: View = LayoutInflater.from(viewGroup.context)
.inflate(R.layout.dialog_nointernet, viewGroup, false)
noInternetBuilder!!.setView(dialogView)
noInternetDialog = noInternetBuilder!!.create()
noInternetDialog!!.setCancelable(false)
noInternetDialog!!.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
val btn = dialogView.findViewById<View>(R.id.btnOkInternet) as Button
btn.setOnClickListener {
resultInternetLauncher.launch(Intent(Settings.ACTION_WIFI_SETTINGS))
noInternetDialog?.dismiss()
}
noInternetDialog!!.show()
}
override fun onPause() {
super.onPause()
isPaused = true
}
override fun onResume() {
super.onResume()
isPaused = false
if (!toConfirm) {
if (noInternetDialog != null) {
noInternetDialog?.dismiss()
}
showDialogNoInternet(mContext!!)
}
}
}
Must implement override fun onPause()
and override fun onResume()
along with it because it will control the crashes of dialogBox.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.