Регистрация Battery Changed трансляция в сервисе Android - PullRequest
0 голосов
/ 02 июля 2011

Я запускаю сервис из Активности.Служба регистрирует приемник с измененной батареей.Я получаю трансляции, пока экран включен.Как только экран выключен, я прекращаю получать трансляции, однако служба не умирает.

Мой код активности

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    context = this.getApplicationContext();     

    Intent intent = new Intent(this,BatteryStatusService.class);


    startService(intent);
}

и код моей службы

public class BatteryStatusService extends Service{

private final static String TAG = BatteryStatusService.class.getSimpleName();
private BroadcastReceiver timeTickReceiver;//changeReceiver;
private boolean registered = false;

public class LocalBinder extends Binder {
    BatteryStatusService getService() {
        return BatteryStatusService.this;
    }
}

private final IBinder mBinder = new LocalBinder();

@Override
public void onStart(Intent intent, int startId){
    Log.i(TAG,"Starting service");

    IntentFilter filter = new IntentFilter();
    filter.addAction(Constants.ACTION_BATTERY_CHANGED);     
    timeTickReceiver = new TimeTickReceiver();

    this.getApplicationContext().registerReceiver(timeTickReceiver, filter);
    registered = true;
}


@Override
public void onDestroy(){
    Log.d(TAG,"Stopping service");  
if(registered){

        this.getApplicationContext().unregisterReceiver(timeTickReceiver);
    }
}

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return mBinder;
}

public class TimeTickReceiver extends BroadcastReceiver {

    private String action = null;   
    private  final String TAG = TimeTickReceiver.class.getSimpleName();

    @Override
    public void onReceive(Context context, Intent intent) {

        action = intent.getAction();        




        if(action.equals(Constants.ACTION_BATTERY_CHANGED)){                


            Log.d(TAG,"I got action = "+action);


                                }           
        }       
    }
}

}

Ответы [ 3 ]

1 голос
/ 30 ноября 2011

используйте AlarmManager и получите последний транслируемый уровень с

Intent BATTERYintent=this.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

Однако есть мобильные телефоны, где он также будет работать.У меня есть T-Mobile MOVE, который не будет обновлять значение батареи / трансляцию, независимо от того, что в спящем режиме ... но большинство мобильных телефонов будут делать это так, как они

, кстати, не слушая dcanh121, бывают случаи, когда вынеобходимо получить уровень заряда батареи, даже когда телефон находится в режиме сна.

0 голосов
/ 06 сентября 2012

почему бы вам не попробовать использовать onResume() и onPause()

0 голосов
/ 03 июля 2011

Как только экран выключен, я прекращаю получать трансляции, однако служба не умирает.

Когда экран выключается, вскоре после этого устройство переходит в спящий режимРежим.Ваш код не выполняется снова, пока устройство не выйдет из спящего режима.

Также:

  • Вам не нужно использовать getApplicationContext() здесь

  • Вам не нужно Binder здесь, поскольку вы не привязываетесь к услуге, поэтому просто onBind() return null

  • Youнужно где-нибудь иметь код для остановки этой службы, чтобы она не работала вечно

...