Skip to content

Commit 63e30e8

Browse files
committed
add check Network Status (RealTime)
1 parent 72e6e47 commit 63e30e8

File tree

2 files changed

+83
-1
lines changed

2 files changed

+83
-1
lines changed
Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.stevechulsdev.network
22

3+
import android.os.Build
34
import androidx.appcompat.app.AppCompatActivity
45
import android.os.Bundle
6+
import android.util.Log
57
import android.widget.Toast
68

79
class MainActivity : AppCompatActivity() {
@@ -10,6 +12,25 @@ class MainActivity : AppCompatActivity() {
1012
super.onCreate(savedInstanceState)
1113
setContentView(R.layout.activity_main)
1214

13-
Toast.makeText(this, ScNetwork.isConnectNetwork(this).toString(), Toast.LENGTH_SHORT).show()
15+
// Toast.makeText(this, ScNetwork.isConnectNetwork(this).toString(), Toast.LENGTH_SHORT).show()
16+
17+
if(Build.VERSION.SDK_INT >= 21) {
18+
ScNetwork.checkNetworkRealTime(this, object : ScNetwork.NetworkInterface {
19+
override fun onNetworkAvailable() {
20+
Toast.makeText(this@MainActivity, "onNetworkAvailable", Toast.LENGTH_SHORT).show()
21+
Log.e("steve", "onNetworkAvailable")
22+
}
23+
24+
override fun onNetworkLost() {
25+
Toast.makeText(this@MainActivity, "onNetworkLost", Toast.LENGTH_SHORT).show()
26+
Log.e("steve", "onNetworkLost")
27+
}
28+
})
29+
}
30+
}
31+
32+
override fun onDestroy() {
33+
if(Build.VERSION.SDK_INT >= 21) ScNetwork.removeCheckNetworkRealTime()
34+
super.onDestroy()
1435
}
1536
}

scnetwork/src/main/java/com/stevechulsdev/network/ScNetwork.kt

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,18 @@ package com.stevechulsdev.network
22

33
import android.content.Context
44
import android.net.ConnectivityManager
5+
import android.net.Network
56
import android.net.NetworkCapabilities
7+
import android.net.NetworkRequest
68
import android.os.Build
9+
import android.util.Log
10+
import androidx.annotation.RequiresApi
711

812
object ScNetwork {
13+
private val TAG: String = javaClass.simpleName
14+
15+
private var mConnectivityManager: ConnectivityManager? = null
16+
private var mNetworkCallback: ConnectivityManager.NetworkCallback? = null
917

1018
/**
1119
* 1회성 네트워크 연결 유무 확인
@@ -34,4 +42,57 @@ object ScNetwork {
3442
}
3543
return false
3644
}
45+
46+
/**
47+
* 앱 실행 중에 인터넷 연결 여부를 지속적으로 확인 할 수 있습니다.
48+
* @param context Context
49+
* @param networkInterface 연결 유무에 따른 Interface
50+
*/
51+
@RequiresApi(21)
52+
fun checkNetworkRealTime(context: Context, networkInterface: NetworkInterface) {
53+
mConnectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
54+
val builder = NetworkRequest.Builder()
55+
56+
mNetworkCallback = object : ConnectivityManager.NetworkCallback() {
57+
override fun onAvailable(network: Network) {
58+
super.onAvailable(network)
59+
Log.i(TAG, "Network onAvailable")
60+
networkInterface.onNetworkAvailable()
61+
}
62+
63+
override fun onLost(network: Network) {
64+
super.onLost(network)
65+
Log.i(TAG, "Network onLost")
66+
networkInterface.onNetworkLost()
67+
}
68+
}
69+
70+
mConnectivityManager?.let { connectivityManager ->
71+
mNetworkCallback?.let { networkCallback ->
72+
connectivityManager.registerNetworkCallback(builder.build(), networkCallback)
73+
} ?: run {
74+
Log.e(TAG, "ConnectivityManager.NetworkCallback is null")
75+
}
76+
} ?: run {
77+
Log.e(TAG, "ConnectivityManager is null")
78+
}
79+
}
80+
81+
@RequiresApi(21)
82+
fun removeCheckNetworkRealTime() {
83+
mConnectivityManager?.let { connectivityManager ->
84+
mNetworkCallback?.let { networkCallback ->
85+
connectivityManager.unregisterNetworkCallback(networkCallback)
86+
} ?: run {
87+
Log.e(TAG, "ConnectivityManager.NetworkCallback is null")
88+
}
89+
} ?: run {
90+
Log.e(TAG, "ConnectivityManager is null")
91+
}
92+
}
93+
94+
interface NetworkInterface {
95+
fun onNetworkAvailable()
96+
fun onNetworkLost()
97+
}
3798
}

0 commit comments

Comments
 (0)