728x90
*broadcast 방송하다, 널리 알리다.
스마트폰 단말기에서 이루어지는 수많은 역할들을 대신해서 방송하면서 알려줌.
(batterty status 체크, Wi-Fi 연결 상태 체크) 4대 component 중 하나. (스레드, 서비스 비슷한 개념 백그라운드에서 계속 돈다 register, unregister 잘 해줘야 함.)
*4대 컴포넌트
[안드로이드] 4대 컴포넌트
컴포넌트 (Component) ? 컴포넌트는 구성 요소라는 뜻을 지니고 있다. 다시 말해서, 안드로이드 4대 컴포넌트는 안드로이드 앱을 구성하는데 필요한 4개의 요소를 의미한다. 안드로이드 4대 컴포넌
wookkingkim.tistory.com
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hessepark"
android:textSize="30sp"
android:textColor="#536DFE"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
설정 후
manifest로 가서
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
추가하면 권한 세 개 허용
네트워크 상태 값을 받아오는 Receiver 클래스 만듦
NetworkReceiver.java
package com.example.broadcastreceiverexample;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class NetworkReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
BroadcastReciver 지원하는 오버라이드 메서드 Alt + Enter로 불러와야 함.
Intent는 명시적. (너로 이동하겠다)
IntentFilter은 암시적. (내가 이 기능 만들었으니까 네가 와서 써) 이런 느낌.
NetworkReceiver.java 작성 완료 코드
package com.example.broadcastreceiverexample;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
public class NetworkReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 네트워크 상태 값 받아오기 (3g,4g같은)
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) { //addAction 한 거 넘어옴
NetworkInfo info = (NetworkInfo) intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
NetworkInfo.DetailedState state = info.getDetailedState();
if (state == NetworkInfo.DetailedState.CONNECTED) { // 네트워크 연결 상태이면..
MainActivity.tv_state.setText("네트워크 연결 완료");
} else if (state == NetworkInfo.DetailedState.DISCONNECTED) { // 네트워크 연결 해제이면..
MainActivity.tv_state.setText("네트워크 연결 해제");
}
}
}
}
MainActivity.java
package com.example.broadcastreceiverexample;
import androidx.appcompat.app.AppCompatActivity;
import android.content.IntentFilter;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
public static TextView tv_state; // private이 아닌 public static으로 해줘서 다른 클래스에서도 부를 수 있다.(NetworkReceiver)에서 사용
private NetworkReceiver receiver; //클래스 불러오기
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_state = findViewById(R.id.tv_state);
// 브로드 캐스트 리시버 등록 !
IntentFilter filter = new IntentFilter(); //화면 전환이나 여러가지 액션이 Intent인데 Intent는 명시적, 암시적 IntentFilter가 있다.
receiver = new NetworkReceiver();
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); //네트워크 상태 변화값을 인텐트 필터에 추가를 해라 // BroadcastReceiver 여러 기능 많은데 filter로 걸러서 구현하는 것임(15:45)
registerReceiver(receiver, filter); //등록 됐고 NetworkReceiver에 onReceive작동 시작.
}
@Override
protected void onDestroy() {
super.onDestroy();
// 브로드 캐스트 리시버 해제 !
unregisterReceiver(receiver); //메인 액티비티에서 다른 액티비티로 넘어갔을 때 초기화 (메인 액티비티에서만 네트워크 연결 상태 체크)
}
}
네트워크 연결 상태이면
"네트워크 연결 완료"가 메인 화면에 뜨고
네트워크 연결 해제 상태이면
"네트워크 연결 해제" 문구가 뜬다.
728x90
'[Android Studio] (Java)' 카테고리의 다른 글
| [Android Studio] Radio Button (옵션 선택 버튼) (0) | 2023.09.02 |
|---|---|
| [Android Studio] ConstraintLayout (0) | 2023.09.01 |
| [Android Studio] RelativeLayout (0) | 2023.09.01 |
| [Android Studio] LinearLayout(리니어 레이아웃) (0) | 2023.09.01 |
| [Android Studio] Selector (1) | 2023.09.01 |