Pewnego razu, gdy miałem problem, byliście naprawdę pomocni. Więc znowu mam inny problem, na który wpadłem ...:/getBoolean (EXTRA_NO_CONNECTIVITY) zawsze zwraca wartość false
Używam niestandardowego NetworkReceiver, który rozszerza BroadcastReceiver. Chcę wykryć, kiedy telefon ma połączenie z Internetem, aby móc uruchomić usługę w dowolnym momencie. Czytałem wiele tematów i wszystkie tematy mniej lub bardziej szybka do następującego kodu, który nie działa dla mnie:
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));
}
}
Mam problem jest taki, że logcat zawsze zwraca NetworkDown?: false
i obsługa nigdy nie zatrzymuje się (to restartuje się cały czas). Próbowałem go na emulatorze, naciskając klawisz F8, a także wypróbowałem go na moim dev-phone (nie ma karty SIM, dostęp do Internetu jest przez mój router wifi) poprzez wyłączenie routera -> brak dostępu do Internetu gwarantowany!
My Manifest zawiera następujące wiersze:
...
<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>
...
I należy również pamiętać, że ja też próbowałem <action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" />
w moim pliku manifestu bez zmian i że kiedy zmienił linię: intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)
do intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, true)
wynik był zawsze prawdziwy - i dlatego zawsze starał się zatrzymać moją usługę i nigdy jej nie uruchamiał.
Podejrzewam, że dodatki z Intencji nie są w ogóle czytane i dlatego domyślna wartość getBooleanExtra()
zawsze powraca.
PS. Jestem na systemie Android 2.1
Dzięki!
Jestem świadomy metody, którą stosowałeś. Jednak byłem trochę zaskoczony, że wiele osób poleca kod, którego użyłem (przeczytałem go także na książce O'reilly, którą ostatnio kupiłem na Androida!Jeśli nie mogę znaleźć rozwiązania w transmisji CONNECTIVITY_ACTION, myślę, że pójdę za twoim przykładem i wykonam kontrolę w mojej usłudze za pomocą metod ConnectivityManager. Dzięki za odpowiedź :) – snoopaki
Serdecznie zapraszamy @snoopaki - właściwie wolałbym przyjść z rozwiązaniem za pomocą twojej metody, ale po prostu nie widzę, co się dzieje i dlaczego. – Shlublu
Faktycznie zmieniłem moją usługę na IntentService, a obsługa w działaniu zmiany połączenia miała więcej sensu. Więc powinienem wybrać odpowiedź jako właściwą !! thx :) – snoopaki