2013-05-06 2 views
4

내 안드로이드 응용 프로그램의 런타임을 통해 인터넷 연결을 확인하고 싶습니다. 서비스를 사용해 보았지만 최선의 선택이 아닌 것처럼 보입니다. 서비스에 브로드 캐스트 리시버를 구현할 수있는 방법이 있습니까? 아니면 서비스를 포기하고 방송 수신기 만 사용해야합니까? 제안을 환영합니다서비스 내에서 방송 수신기 구현

감사

+0

왜 서비스에서 연결을 확인 하시겠습니까? 왜 각 http/https 요청에? –

+0

@ Pankaj Kumar에 감사드립니다. 실제로 그것은 온라인 스트리밍이므로 연결을 매시간 점검해야합니다 – Amila

답변

6

지금 서비스에서 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 
     } 
    } 
} 
+0

이 구조체를 사용해 보겠습니다. 감사합니다. – Amila

+0

정말 도움이되었습니다. 감사합니다. –

+2

또한 Manifest 파일에서 수신자를 선언해야합니까? – AlexSanchez

1

당신은이 목적을 위해 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; 

    } 
+0

@AndroidEnthusiast 주석 주셔서 감사합니다; 내 코드에서 나는 항상 인터넷 연결을 사용해야한다. 실제로는 온라인 스트리밍이므로 연결을 매시간 점검해야한다. – Amila

2

매초마다 연결을 확인하는 것은 바람직하지 않습니다. 또는 작업 (ConnectivityManager.CONNECTIVITY_ACTION)을 청취하고 활성 네트워크에 연결되어 있는지 여부를 확인할 수 있습니다.

IntentFilter filter = new IntentFilter(); 
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); 

는 또한 현재 활성화되어있는 네트워크 유형 (Type_WIFI, Type_MOBILE)

이 방법을 확인할 수 있습니다, 당신은 매 초마다 연결을 점검 유지하는 서비스가 필요하지 않습니다.

+0

이것이 도움이된다고 생각해 보라. 몇 가지 예제 코드를 참조하면 도움이 될 것입니다. 고마워요 – Amila

+0

이걸 참조 해 주셔서 고마워요. – Amila

2

link이 도움이되기를 바랍니다. 그냥 통과하십시오.

+1

고마워. – Amila

관련 문제