سؤال

هل هناك طريقة للحصول على معلومات البطارية من SDK الروبوت؟ مثل المتبقية عمر البطارية وهلم جرا؟ أنا لا يمكن العثور عليه من خلال مستندات.

هل كانت مفيدة؟

المحلول

ويمكنك تسجيل جهاز استقبال النوايا لاستقبال البث لACTION_BATTERY_CHANGED: HTTP : //developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED . وتقول المستندات التي البث لزجة، لذلك عليك أن تكون قادرا على الاستيلاء عليها حتى بعد لحظة حدوث تغيير حالة البطارية.

نصائح أخرى

وهنا هو مثال سريع التي سوف تحصل على مبلغ من استخدام البطارية، والجهد البطارية، ودرجة حرارته.

ولصق التعليمات البرمجية التالية إلى النشاط:

@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);
}

في هاتفي، وهذا له الإخراج التالية كل 10 ثانية:

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

وهكذا وهذا يعني أن البطارية هو 40٪ كاملة، لديه درجة حرارة من 32.0 درجة مئوية، ولها الجهد من 3.848 فولت.

    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) + "%";
    }

وأنا بحاجة إلى رصد على البطارية والتحقق من مستوى ومكانة. أنا النامية MonoForAndroid، حتى هنا هو ما خطرت لي. أنا وضعه هنا في حالة شخص ما لديك شرط مماثل. (لقد جربت هذا ويعمل بشكل جيد).

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top