2012-09-05 64 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