0

私はアクティビティからサービスを開始しています。このサービスは、バッテリ変更されたブロードキャストレシーバの登録を行います。画面が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); 


           }   
     }  
    } 
} 

}

答えて

0

、しかし、サービス死なない。

画面がオフになると、すぐにスリープモードになります。何かがスリープモードからデバイスを起動するまで、あなたのコードは再び実行されません。また

  • あなたはサービスにバインドされていないので、

  • あなたはこれだけ持って、ここBinderを必要としないここgetApplicationContext()を使用する必要はありませんonBind()リターンnull

  • このサービスを停止するにはどこかのコードが必要なので、永久には実行されません

+0

を使用してしようとしない、デバイスがスリープモードになりますが、どのように私はまだブロードキャストを受信しますか?ありがとう。 – dcanh121

+0

@ dcanh121:理想的には、あなたはしません。 'WakeLock'を使うとスリープモードを防ぐことができますが、CPUを常に最新の状態に保つことは専門家にはなりません。なぜなら、バッテリーの消耗がずっと速くなるからです。ユーザーが自分の携帯電話を再びオンにしたときに自動的にアップデートを開始する必要があります。そのままにしておいてください。 – CommonsWare

1

使用AlarmManagerとは、最後の

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

しかし、それはどちらかの仕事と携帯電話がある

でレベルを放送します。私は、バッテリーの値を更新しないで、スリープモードで何を放送するのかをブロードキャストしないt-mobile MOVEを持っています...しかし、ほとんどの携帯電話はそうするでしょう。

ところでdc​​anh121を聞いてはいけません。電話がスリープモードになっているときでも、バッテリレベルを取得します。

0

なぜあなたはあなたが正しいですonResume()onPause()

+1

サービスでそれを使いたいのですが、画面がオフであってもその変更を聞きたいです。基本的にバッテリーレベルが変更されたとき(画面ロック/ロック解除)を知りたい。 – dcanh121

+0

'onEnabled()'や 'onReceive'や、どこにでもIntent'(Intent.ACTION_BATTERY_CHANGED) 'を登録してみてください。その後、ブロードキャスト受信者を使用してその変更を受信します。 –

関連する問題