한 번 prob가 발생하면 정말 도움이되었습니다. 그래서 여기에 나는 또 다른 문제에 빠졌습니다 .../getBoolean (EXTRA_NO_CONNECTIVITY)는 항상 false를 반환합니다.
BroadcastReceiver를 확장하는 사용자 지정 NetworkReceiver를 실행하고 있습니다. 전화가 인터넷에 연결되어있을 때이를 감지하여 필요할 때마다 서비스를 시작할 수 있습니다. 나는 주제의 많은 나를 위해 작동하지 않는 모든 주제에 더 많거나 적은 프롬프트에 다음 코드를 읽고 :
public class NetworkReceiver extends BroadcastReceiver {
private static final String tag = NetworkReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
Log.i(tag,"****** NetworkReceiver // onReceive()");
boolean noConnection = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
Log.i(tag,"****** NetworkReceiver // Network Down?: " + intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false));
}
// TODO Bug: Never stops the service. Stays always connected!
if(noConnection) {
Log.i(tag,"****** NetworkReceiver // Stopping Service...");
context.stopService(new Intent(context, FetchService.class));
} else {
Log.i(tag,"****** NetworkReceiver // Starting Service!");
context.startService(new Intent(context, FetchService.class));
}
}
의 I는이 문제를 로그 캣은 항상 NetworkDown?: false
반환하고 서비스가 결코 중지 없다는 것입니다을 (그 항상 재시작). 나는 에뮬레이터에서 F8 키를 눌러 시험해 보았고 라우터를 끄면 내 dev-phone (SIM이없고 인터넷 액세스가 wifi 라우터에 있음)을 시도했지만 인터넷 액세스는 보장되지 않았습니다! intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)
intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, true)
에 :
...
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<receiver android:name=".NetworkReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
...
나는 또한 내가 선을 변경할 때 나는 또한 변화없이 것을 내 매니페스트 파일에 <action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" />
을 시도 있음을 유의하십시오 :
내 매니페스트는 다음 행을 포함 결과는 항상 사실이었습니다. 따라서 항상 내 서비스를 중단하고 서비스를 시작하려하지 않았습니다.
인 텐트의 엑스트라가 전혀 읽히지 않는다고 생각합니다. 따라서 기본값 인 getBooleanExtra()
이 항상 반환됩니다.
추신. Android 2.1입니다.
고마워요!
내가 사용하는 방법에 대해 알고 있습니다. 그러나 나는 많은 사람들이 내가 사용한 코드를 추천했다는 사실에 조금 놀랐다. (나는 최근에 안드로이드에서 구입 한 O'reilly 책에서도 읽었다.) 내가 CONNECTIVITY_ACTION 브로드 캐스트 솔루션을 찾을 수 없다면 나는 당신의 예제를 따르고 ConnectivityManager의 메서드를 사용하여 내 서비스의 체크를 할 것이라고 생각한다. 답장을 보내 주셔서 감사합니다 :) – snoopaki
당신은 @ snoopaki 환영합니다 - 실제로 내가 원하는 방법을 사용하여 솔루션을 선호하는 것입니다,하지만 난 그냥 무슨 일이 일어나지 않는 이유를 볼 수 있습니다. – Shlublu
실제로 서비스를 IntentService로 변경했으며 연결 변경 사항에 대한 처리 중 처리가 더 적합했습니다. 그래서 나는 적절하게 당신의 대답을 올바른 것으로 선택해야합니다! thx :) – snoopaki