2013-04-01 20 views
30

Szukałem w internecie i nie mogłem znaleźć odpowiedzi na moje pytanie. Moim problemem jest uzyskanie informacji o poziomie naładowania baterii tylko raz, np. wywołanie funkcji getBatteryLevel(). Istnieją tylko rozwiązania, które są implementowane za pomocą BroadcastReceiver, ale jak wiem, będzie on wywoływany za każdym razem, gdy nastąpi zmiana poziomu baterii. Proszę, powiedz mi, jak mogę uzyskać te informacje tylko raz? TransmisjaPoziom naładowania baterii tylko jeden raz za pomocą Androida SDK

+4

Użyj 'BroadcastReceiver', a następnie, gdy uzyskasz wartość, po prostu odrejestruj odbiornik. – TronicZomB

Odpowiedz

96

jest znana jako "transmisja lepka". Ponieważ jest to lepkie, możesz zarejestrować się w celu emisji za pomocą zerowego odbiornika, który uzyska tylko poziom naładowania baterii jeden raz, aby uzyskać czas, dzwoniąc pod numer registerReceiver.

Funkcja aby uzyskać poziom baterii bez otrzymywania aktualizacji będzie wyglądać mniej więcej tak:

public float getBatteryLevel() { 
    Intent batteryIntent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
    int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
    int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 

    // Error checking that probably isn't needed but I added just in case. 
    if(level == -1 || scale == -1) { 
     return 50.0f; 
    } 

    return ((float)level/(float)scale) * 100.0f; 
} 

Więcej danych można wyciągnąć z tej lepkiej audycji. Za pomocą zwróconego batteryIntent można uzyskać dostęp do innych dodatków opisanych w klasie BatteryManager.

+0

Ta metoda nie może teraz zostać wywołana z odbiornika (np. Widget). Czy znasz jakiś inny sposób, aby uzyskać poziom naładowania baterii, który można wykonać za pomocą metody onUpdate() aplikacji Widget? –

+1

Jeśli robisz to z widżetu, będziesz musiał wywołać 'registerReceiver' jak:' getApplicationContext(). RegisterRzever (...) 'aby zadziałał. – MCeley

+0

Mam kontekst i mogę go wywołać, ale wywołanie nie jest dozwolone z odbiornika, przekazując to lub wartość zerową jako pierwszy parametr "odbiornik". Komunikat dziennika jest bardzo wyraźny, że nie można dzwonić z odbiornika. –

Powiązane problemy