2012-09-05 63 views
1

我正在开发一个应用程序,我需要从服务中监视剩余电池的百分比。有人可以告诉我该怎么做吗?我发现一些示例代码正在从活动中获取电池状态,而不是从服务中获取电池状态。从Android中的服务获取电池状态

谢谢。

+1

你绝对可以做到这一点通过广播接收器:http://developer.android.com/training/monitoring-device-state/battery-monitoring.html – Christopher

+0

马克的答案接受PLZ – tobias

回答

4

有什么区别? 您应该能够在服务中为电池事件注册一个接收器,就像您进行一项活动一样。例如:

private final BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context arg0, Intent intent) { 
     int rawLevel = intent.getIntExtra("level", -1); 
     int scale = intent.getIntExtra("scale", -1); 
     int status = intent.getIntExtra("status", -1); 
     // Do something 
    } 
}; 

public void onCreate() { 
    registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
} 

public void onDestroy() { 
    unregisterReceiver(this.mBatInfoReceiver); 
} 
5

使用ACTION_BATTERY_CHANGED。每当电池值发生变化时都会调用它。 请参见下面的代码,看看它是如何做:

public void onCreate() 
{ 

this.registerReceiver(this.mBatInfoReceiver, 
     new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
} 

private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context arg0, Intent intent) { 

    int level = intent.getIntExtra("level", 0); 
    Log.e("test", String.valueOf(level) + "%"); 

    } 
}; 


public void onDestroy(){ 

    // unregister receiver 
    this.unregisterReceiver(this.mBatInfoReceiver); 
} 
0

我认为你必须使用ACTION_BATTERY_CHANGED。请注意,这是一个粘性意图,所以您不需要直接在广播接收机中监视它。您可以直接从活动中获取参考。

从Android文档:

因为这是一个棘手的意图,你不需要通过广播接收器,简单地调用registerReceiver在空传递作为接收器如图所示,在未来片段来注册,目前的电池状态意图被返回。

http://developer.android.com/training/monitoring-device-state/battery-monitoring.html