Android BroadcastReceiver 네트워크 상태 실시 간 감청 실현
5091 단어 AndroidBroadcastReceive네트워크 감청
BroadcastReceiver 의 등록 방식:
(1)동적 등록:즉,코드 에서 registerReceiver()방법 으로 등록 하고 동적 등록 은 onPause 나 onDestory 방법 에서 반 등록 해 야 합 니 다.그렇지 않 으 면 유출 이 발생 할 수 있 습 니 다.
(2)정적 등록:목록 파일 의 application 노드 에서
효과 그림:
1.네트워크 상태 감청 인터페이스 및 방법 정의
/**
*
*/
public interface NetStatusMonitor {
void onNetChange(boolean netStatus);
}
/**
*
*/
public void setStatusMonitor(NetStatusMonitor netStatusMonitor) {
this.netStatusMonitor = netStatusMonitor;
}
2.네트워크 상태 도구 클래스
/**
* Created by ruancw on 2018/5/27.
*
*/
public class NetUtil {
//
private static final boolean NETWORK_NONE = false;
//
private static final boolean NETWORK_AVAILABLE = true;
/**
*
* @param context
* @return boolean
*/
public static boolean getNetStatus(Context context) {
//
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
//
NetworkInfo activeNetworkInfo = connectivityManager != null ? connectivityManager
.getActiveNetworkInfo() : null;
// NetworkInfo
if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
//
return NETWORK_AVAILABLE;
} else {
return NETWORK_NONE;// ( )
}
}
}
3.NetBroadcastReceiver 정의NetBroadcastReceiver 는 BroadcastReceiver 에서 계승 하고 onReceive 방법 을 다시 씁 니 다.
/**
* Created by ruancw on 2018/5/27.
* app
*/
public class NetBroadcastReceiver extends BroadcastReceiver {
//
private NetStatusMonitor netStatusMonitor;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
//
boolean netStatus = NetUtil.getNetStatus(context);
if (netStatusMonitor != null)
//
netStatusMonitor.onNetChange(netStatus);
}
}
/**
*
*/
public interface NetStatusMonitor {
void onNetChange(boolean netStatus);
}
/**
*
*/
public void setStatusMonitor(NetStatusMonitor netStatusMonitor) {
this.netStatusMonitor = netStatusMonitor;
}
}
4.BaseActivity 에 등록(1)BaseActivity 네트워크 상태 감청 인터페이스 구현
(2)onResume 에 등 록 된 방송
@Override
protected void onResume() {
super.onResume();
//
registerBroadcastReceiver();
}
/**
*
*/
private void registerBroadcastReceiver() {
//
if (netBroadcastReceiver == null) {
netBroadcastReceiver = new NetBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(netBroadcastReceiver, filter);
//
netBroadcastReceiver.setStatusMonitor(this);
}
}
(3)onPause 또는 onDestory 에서 등록 취소
@Override
protected void onDestroy() {
super.onDestroy();
if (netBroadcastReceiver != null) {
//
unregisterReceiver(netBroadcastReceiver);
}
}
(4)네트워크 감청 인터페이스 재 작성 방법
@Override
public void onNetChange(boolean netStatus) {
this.netStatus = netStatus;
isNetConnect();
}
/**
*
*/
private void isNetConnect() {
Message message=new Message();
if (netStatus){
message.what=99;
handler.sendMessage(message);
}else {
UIUtil.toast(" ");
message.what=100;
handler.sendMessage(message);
}
}
(5)메 인 스 레 드 수정 UI
@SuppressLint("HandlerLeak")
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what==100){
tvNet.setVisibility(View.VISIBLE);
}else {
tvNet.setVisibility(View.GONE);
}
}
};
이렇게 하면 전체 네트워크 상태 감청 을 실현 하고 메 인 스 레 드 에서 UI 인터페이스 를 수정 합 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.