티스토리 뷰
단말의 인터넷 연결 상태를 확인하고, 연결이 되어 있지 않다면 어떤 에러 메시지나 엑티비티를 띄우기 위해서는 ConectivityService를 활용하면 된다.
딱히 어려운 건 아니니 바로 확인해보자.
◎MainActivity.java
package com.example.samplesensor;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkConnectivity();
}
});
}
public void checkConnectivity() {
ConnectivityManager connectivityManager =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
Network nw = connectivityManager.getActiveNetwork();
if(nw != null) {
NetworkCapabilities actNw = connectivityManager.getNetworkCapabilities(nw);
if(actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) println("WIFI");
else if(actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) println("MOBILE");
else if(actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) println("ETHERNET");
} else {
println("데이터 통신 불가");
}
}
public void println(String data) {
textView.append(data + "\n");
}
}
위와 같이 버튼을 눌러 인터넷 연결 상태를 확인하는 방법은 사용할 일이 거의 없는 코드이다.
보통은 브로드캐스트 수신자를 이용해서 연결 상태가 바뀌는 시점에 인터넷 연결 상태를 바로 확인하여 인터넷 연결을 다시 시도하게끔 코드를 작성한다.
다음은 무선랜이 끊어졌는지 아닌지에 대한 정보를 브로드캐스트 수신자를 받아 현재 인터넷 연결 상태를 출력하는 예제이다.
◎AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.samplesensor">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.SampleSensor">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
◎MainActivity.java
package com.example.samplesensor;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
TextView textView;
WiFiReceiver wiFiReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView.findViewById(R.id.textView2);
wiFiReceiver = new WiFiReceiver();
}
@Override
protected void onPause() {
super.onPause();
// 브로드캐스트 수신자 등록 해제
unregisterReceiver(wiFiReceiver);
}
@Override
protected void onResume() {
super.onResume();
// 수신자가 받을 메시지를 지정하기 위한 IntentFilter
IntentFilter filter = new IntentFilter();
// 무선랜의 상태와 네트워크 상태를 전달
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
// 브로드캐스트 수신자 등록
registerReceiver(wiFiReceiver, filter);
}
class WiFiReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
// WIFI 상태 체크
if(action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1);
if(state == WifiManager.WIFI_STATE_ENABLED) {
println("WiFi enabled");
} else if(state == WifiManager.WIFI_STATE_DISABLED) {
println("WiFi disabled");
}
} else if(action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
WifiManager manager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
String ssid = manager.getConnectionInfo().getSSID();
if (info.getState() == NetworkInfo.State.CONNECTED) {
println("Connected : " + ssid);
} else if (info.getState() == NetworkInfo.State.DISCONNECTED) {
println("Disconnected : " + ssid);
}
}
}
}
public void println(String data) {
textView.append(data + "\n");
}
}
반응형
'Mobile > Android' 카테고리의 다른 글
[Android] Build / APK 추출 (0) | 2022.05.03 |
---|---|
[Android] Multi Window (0) | 2022.05.01 |
[Android] 시스템 서비스 활용 (0) | 2022.04.30 |
[Android] 센서 이해하기 (0) | 2022.04.30 |
[Android] 알림 3: 푸시 서비스 사용하기 (0) | 2022.04.27 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- redux-thunk
- 정보보안기사 #실기 #정리
- Async
- Promise
- react-native
- 이탈리안 레스토랑
- javascript
- 파니노구스토
- AsyncStorage
- react
- await
- 인천 구월동 맛집
- redux
- 맛집
- 인천 구월동 이탈리안 맛집
- Total
- Today
- Yesterday