내 안드로이드 응용 프로그램의 런타임을 통해 인터넷 연결을 확인하고 싶습니다. 서비스를 사용해 보았지만 최선의 선택이 아닌 것처럼 보입니다. 서비스에 브로드 캐스트 리시버를 구현할 수있는 방법이 있습니까? 아니면 서비스를 포기하고 방송 수신기 만 사용해야합니까? 제안을 환영합니다서비스 내에서 방송 수신기 구현
감사
내 안드로이드 응용 프로그램의 런타임을 통해 인터넷 연결을 확인하고 싶습니다. 서비스를 사용해 보았지만 최선의 선택이 아닌 것처럼 보입니다. 서비스에 브로드 캐스트 리시버를 구현할 수있는 방법이 있습니까? 아니면 서비스를 포기하고 방송 수신기 만 사용해야합니까? 제안을 환영합니다서비스 내에서 방송 수신기 구현
감사
지금 서비스에서 SMS 수신기를 만드는 방법을 보여
public class MyService extends Service {
@Override
public void onCreate() {
BwlLog.begin(TAG);
super.onCreate();
SMSreceiver mSmsReceiver = new SMSreceiver();
IntentFilter filter = new IntentFilter();
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
filter.addAction(SMS_RECEIVE_ACTION); // SMS
filter.addAction(WAP_PUSH_RECEIVED_ACTION); // MMS
this.registerReceiver(mSmsReceiver, filter);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
return START_STICKY;
}
/**
* This class used to monitor SMS
*/
class SMSreceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (TextUtils.equals(intent.getAction(), SMS_RECEIVE_ACTION)) {
//handle sms receive
}
}
}
이 구조체를 사용해 보겠습니다. 감사합니다. – Amila
정말 도움이되었습니다. 감사합니다. –
또한 Manifest 파일에서 수신자를 선언해야합니까? – AlexSanchez
당신은이 목적을 위해 Service
또는 BroadCastReceiver
를 사용하지 않도록해야합니다. 서버에 ping 할 때마다 연결 상태를 확인하십시오.
이 것을 확인하고 연결 상태에 따라 boolean
(true/false)을 반환하는 메서드를 작성할 수 있습니다. 아래의 방법도 같습니다.
public static boolean isNetworkAvailable(Context mContext) {
try {
final ConnectivityManager conn_manager = (ConnectivityManager) mContext
.getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo network_info = conn_manager
.getActiveNetworkInfo();
if (network_info != null && network_info.isConnected()) {
if (network_info.getType() == ConnectivityManager.TYPE_WIFI)
return true;
else if (network_info.getType() == ConnectivityManager.TYPE_MOBILE)
return true;
}
} catch (Exception e) {
// TODO: handle exception
}
return false;
}
@AndroidEnthusiast 주석 주셔서 감사합니다; 내 코드에서 나는 항상 인터넷 연결을 사용해야한다. 실제로는 온라인 스트리밍이므로 연결을 매시간 점검해야한다. – Amila
매초마다 연결을 확인하는 것은 바람직하지 않습니다. 또는 작업 (ConnectivityManager.CONNECTIVITY_ACTION)을 청취하고 활성 네트워크에 연결되어 있는지 여부를 확인할 수 있습니다.
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
는 또한 현재 활성화되어있는 네트워크 유형 (Type_WIFI, Type_MOBILE)
이 방법을 확인할 수 있습니다, 당신은 매 초마다 연결을 점검 유지하는 서비스가 필요하지 않습니다.
왜 서비스에서 연결을 확인 하시겠습니까? 왜 각 http/https 요청에? –
@ Pankaj Kumar에 감사드립니다. 실제로 그것은 온라인 스트리밍이므로 연결을 매시간 점검해야합니다 – Amila