2009-11-26 31 views
27

Có cách nào để lấy thông tin về pin từ SDK Android không? Chẳng hạn như tuổi thọ pin còn lại và như vậy? Tôi không thể tìm thấy nó thông qua các tài liệu.Pin Android trong SDK

Trả lời

23

Bạn có thể đăng ký bộ nhận Intent để nhận chương trình phát sóng cho ACTION_BATTERY_CHANGED: http://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED. Các tài liệu nói rằng chương trình phát sóng bị dính, vì vậy bạn sẽ có thể lấy nó ngay cả sau khi thay đổi trạng thái pin xảy ra.

+2

Bạn có thể đăng một số mã mẫu cho điều này không. Tôi không chắc chắn làm thế nào để nhận được một mục đích phát sóng. –

67

Dưới đây là ví dụ nhanh giúp bạn biết lượng pin được sử dụng, điện áp pin và nhiệt độ của pin.

Dán đoạn mã sau vào một hoạt động:

@Override 
public void onCreate() { 
    BroadcastReceiver batteryReceiver = new BroadcastReceiver() { 
     int scale = -1; 
     int level = -1; 
     int voltage = -1; 
     int temp = -1; 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
      scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 
      temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1); 
      voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1); 
      Log.e("BatteryManager", "level is "+level+"/"+scale+", temp is "+temp+", voltage is "+voltage); 
     } 
    }; 
    IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
    registerReceiver(batteryReceiver, filter); 
} 

Trên điện thoại của tôi, điều này có đầu ra sau mỗi 10 giây:

ERROR/BatteryManager(795): level is 40/100 temp is 320, voltage is 3848

Vì vậy, điều này có nghĩa rằng pin là 40% đầy đủ, có nhiệt độ 32,0 độ C, và có điện áp 3,848 Volts.

+4

Đây là một ví dụ tuyệt vời, nhưng tại sao bạn đăng nhập vào mức "lỗi"? – GetUsername

+1

@GetUsername Không có lý do cụ thể cho việc ghi nhật ký mức lỗi khác với tùy chọn cá nhân. Đối với đăng nhập như thế này mà tôi loại bỏ trước khi xuất bản ứng dụng của tôi, tôi muốn đăng nhập ở mức độ lỗi vì vậy nó rất dễ dàng để xem đăng nhập trong biển của đầu ra logcat. – plowman

0

Tôi cần có màn hình trên pin và kiểm tra Cấp độ và trạng thái. Tôi đang phát triển trên MonoForAndroid, vì vậy đây là những gì tôi đã đưa ra. Tôi đặt nó ở đây trong trường hợp ai đó có một yêu cầu tương tự. (Tôi đã thử nghiệm này và hoạt động độc đáo).

try 
{ 
    var ifilter = new IntentFilter(Intent.ActionBatteryChanged); 
    Intent batteryStatusIntent = Application.Context.RegisterReceiver(null, ifilter); 
    var batteryChangedArgs = new AndroidBatteryStateEventArgs(batteryStatusIntent); 
    _Battery.Level = batteryChangedArgs.Level; 
    _Battery.Status = batteryChangedArgs.BatteryStatus; 
} 
catch (Exception exception) 
{ 
    ExceptionHandler.HandleException(exception, "BatteryState.Update"); 
    throw new BatteryUpdateException(); 
} 

namespace Leopard.Mobile.Hal.Battery 
{ 
    public class AndroidBatteryStateEventArgs : EventArgs 
    { 
     public AndroidBatteryStateEventArgs(Intent intent) 
     { 
     Level = intent.GetIntExtra(BatteryManager.ExtraLevel, 0); 
     Scale = intent.GetIntExtra(BatteryManager.ExtraScale, -1); 
     var status = intent.GetIntExtra(BatteryManager.ExtraStatus, -1); 
     BatteryStatus = GetBatteryStatus(status); 
    } 

    public int Level { get; set; } 
    public int Scale { get; set; } 
    public BatteryStatus BatteryStatus { get; set; } 

    private BatteryStatus GetBatteryStatus(int status) 
    { 
     var result = BatteryStatus.Unknown; 
     if (Enum.IsDefined(typeof(BatteryStatus), status)) 
     { 
      result = (BatteryStatus)status; 
     } 
     return result; 
    } 
} 
} 


#region Internals 
public class AndroidBattery 
{ 
    public AndroidBattery(int level, BatteryStatus status) 
    { 
     Level = level; 
     Status = status; 
    } 

    public int Level { get; set; } 
    public BatteryStatus Status { get; set; } 
} 

public class BatteryUpdateException : Exception 
{ 
} 
#endregion 
2
public static String batteryLevel(Context context) 
    { 
     Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
     int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); 
     int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100); 
     int percent = (level*100)/scale; 
     return String.valueOf(percent) + "%"; 
    } 
Các vấn đề liên quan