私はアクティビティからサービスを開始しています。このサービスは、バッテリ変更されたブロードキャストレシーバの登録を行います。画面がONの間は放送を受信します。一度画面がOFFになると、私は放送の受信を停止しますが、サービスは死ぬことはありません。画面がOFFにされたら、私は放送の受信を停止Androidのサービスでバッテリーを変更しました
マイアクティビティコード、
@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);
}
}
}
}
}
を使用してしようとしない、デバイスがスリープモードになりますが、どのように私はまだブロードキャストを受信しますか?ありがとう。 – dcanh121
@ dcanh121:理想的には、あなたはしません。 'WakeLock'を使うとスリープモードを防ぐことができますが、CPUを常に最新の状態に保つことは専門家にはなりません。なぜなら、バッテリーの消耗がずっと速くなるからです。ユーザーが自分の携帯電話を再びオンにしたときに自動的にアップデートを開始する必要があります。そのままにしておいてください。 – CommonsWare