অ্যান্ড্রয়েডে ব্যাটারির স্তর এবং স্টেট পান


109

আমি কীভাবে ব্যাটারি স্তর এবং রাষ্ট্র (প্লাগ ইন, ডিসচার্জিং, চার্জিং ইত্যাদি) পেতে পারি? আমি বিকাশকারী ডক্স নিয়ে গবেষণা করেছি এবং আমি ব্যাটারি ম্যানেজার ক্লাস পেয়েছি। তবে এতে কোনও পদ্ধতি নেই, কেবল ধ্রুবক রয়েছে। আমি কীভাবে এটি ব্যবহার করব?


আরও কিছু গবেষণার পরে, আমি ব্যাটারি ম্যানেজ.অক্ষেত্র_রাবল খুঁজে পেয়েছি।
মোহিত দেশপাণ্ডে

এখানে ব্যাটারি শতাংশের জন্য এই পদ্ধতিটি চেক করুন freakyjolly.com/android-useful- মডেলস- এবং- ফাংশনগুলি
কোড স্পাই

উত্তর:


124

এখানে একটি কোড নমুনা যা ব্যাটারির তথ্য কীভাবে পাবেন তা ব্যাখ্যা করে।

এটির সংক্ষেপে, ACTION_BATTERY_CHANGEDউদ্দেশ্যটির জন্য একটি সম্প্রচার রিসিভার গতিশীলভাবে সেট আপ করা হয়, কারণ এটি প্রকাশ্যে ঘোষিত উপাদানগুলির মাধ্যমে প্রাপ্ত হতে পারে না, কেবল এটির সাথে স্পষ্টভাবে নিবন্ধন করে Context.registerReceiver()

public class Main extends Activity {
  private TextView batteryTxt;
  private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context ctxt, Intent intent) {
      int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
      batteryTxt.setText(String.valueOf(level) + "%");
    }
  };

  @Override
  public void onCreate(Bundle b) {
    super.onCreate(b);
    setContentView(R.layout.main);
    batteryTxt = (TextView) this.findViewById(R.id.batteryTxt);
    this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
  }
}

2
অভিপ্রায় সম্পর্কে CTION আপনি প্রকাশ্যে ঘোষিত উপাদানগুলির মাধ্যমে এটি গ্রহণ করতে পারবেন না, কেবলমাত্র Context.registerReceiver () এর সাথে এটির জন্য নিবন্ধিত করে।
ক্লাস অ্যান্ড্রয়েড

2
@ ক্লাসআন্ড্রয়েড ভাল, হ্যাঁ, এটি উত্তরে বর্ণিত হয়েছে।
স্যারডিয়ারিয়াস

হ্যাঁ @ স্যারডিয়ারিয়াস, অন্যকে এটি সম্পর্কে জানান। আমি প্রথমে আপনার উত্তরটিকে উত্সাহিত করেছি এবং যখন আমি এটি জানতে পেরেছিলাম তখন এই মন্তব্যটি রেখেছিলাম। :)
ক্লাস অ্যান্ড্রয়েড

13
অনপেজ বা অনডেস্ট্রয় অনিবন্ধনযোগ্য রিসিভারটি ভুলে যাবেন না।
ডেভ ডোগা ওজ

নতুন কী ওয়ার্ক দিয়ে ব্যাটারি ম্যানেজারকে ইনস্টল করতে পারছেন না, কেন স্যার?
সুভাষচন্দ্রু

102

এপিআই 21 যেহেতু শতাংশের হিসাবে বর্তমান ব্যাটারি স্তর পেতে নিম্নলিখিতটি ব্যবহার করা সম্ভব হয়েছিল:

BatteryManager bm = (BatteryManager)getSystemService(BATTERY_SERVICE);
int batLevel = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);

65

অফিসিয়াল অ্যান্ড্রয়েড ডক্সের উপর ভিত্তি করে , আপনি বর্তমান ব্যাটারি শতাংশ পেতে কোনও সহায়ক বা ইউটিল ক্লাসে এই পদ্ধতিটি ব্যবহার করতে পারেন:

public static int getBatteryPercentage(Context context) {

    if (Build.VERSION.SDK_INT >= 21) {

         BatteryManager bm = (BatteryManager) context.getSystemService(BATTERY_SERVICE);
         return bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);

    } else {

         IntentFilter iFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
         Intent batteryStatus = context.registerReceiver(null, iFilter);

         int level = batteryStatus != null ? batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) : -1;
         int scale = batteryStatus != null ? batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1) : -1;

         double batteryPct = level / (double) scale;

         return (int) (batteryPct * 100);
   }
}

অফিসিয়াল ডক্সে একটি ভুল, আপনার অবশ্যই ডাবল পরিবর্তে ফ্লোট ইন্ট লেভেল = ব্যাটারি স্ট্যাটাস ব্যবহার করতে হবে! = নাল? ব্যাটারিস্ট্যাটাস.জেটইন্টেক্সট্রা (ব্যাটারি ম্যানেজ.আরেক্টরা_এলএইভিএল, -১): -1; ইন স্কেল = ব্যাটারি স্ট্যাটাস! = নাল? ব্যাটারিস্ট্যাটাস.জেটইন্টেক্সট্রা (ব্যাটারি ম্যানেজ.আরেক্টরা_এসএসিএল, -১): -1; ডাবল ব্যাটারিপ্যাক্ট = (দ্বিগুণ) স্তর / (ডাবল) স্কেল; int শতাংশ = (ইনট) (ব্যাটারিপ্যাক্ট * 100 ডি);
ব্যবহারকারী 2212515

2
@ ব্যবহারকারী 2212515, আপনি কি সরকারী ডক্সের উপর ভিত্তি করে আমার উত্তর সম্পাদনা করতে আপত্তি করবেন?
ব্লুওয়্যার

@ রায়ান, আমি আমার উত্তরটি অ্যান্ড্রয়েড ভি 21 এবং তারপরে সমর্থন করতে সম্পাদনা করেছি। অনুগ্রহপূর্বক এটি ভালো করে দেখুন.
ব্লুওয়্যার

14

অ্যান্ড্রয়েডের ব্যাটারি ম্যানেজারটি একটি স্টিকি ইন্টেন্ট ব্যবহার করছে বলে আপনাকে একটি প্রকৃত ব্রডকাস্টার্সিভার নিবন্ধন করতে হবে না:

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = registerReceiver(null, ifilter);

int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

float batteryPct = level / (float)scale;

return (int)(batteryPct*100);

এটি https://developer.android.com/training/mon भयो-device-state/battery-mon भयो . html এ অফিশিয়াল ডক্স থেকে এসেছে ।


7

আপনি শতকরা চার্জ চার্জ পেতে এটি ব্যবহার করতে পারেন।

private void batteryLevel() {
        BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                context.unregisterReceiver(this);
                int rawlevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
                int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
                int level = -1;
                if (rawlevel >= 0 && scale > 0) {
                    level = (rawlevel * 100) / scale;
                }
                batterLevel.setText("Battery Level Remaining: " + level + "%");
            }
        };
        IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(batteryLevelReceiver, batteryLevelFilter);
    }

5

এই ফাংশনটি চেষ্টা করার দরকার নেই পারমিসন বা কোনও রিসিভার

void getBattery_percentage()
{
      IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
      Intent batteryStatus = getApplicationContext().registerReceiver(null, ifilter);
      int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
      int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
      float batteryPct = level / (float)scale;
      float p = batteryPct * 100;

      Log.d("Battery percentage",String.valueOf(Math.round(p)));
  }

4

আমরা ব্যাটারি ম্যানেজার ব্যবহার করি এমন ব্যাটারি শতাংশ পরীক্ষা করতে , নিম্নলিখিত পদ্ধতিটি ব্যাটারি শতাংশ ফিরে আসবে।

উত্স লিঙ্ক

public static float getBatteryLevel(Context context, Intent intent) {
    Intent batteryStatus = context.registerReceiver(null,
            new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    int batteryLevel = -1;
    int batteryScale = 1;
    if (batteryStatus != null) {
        batteryLevel = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, batteryLevel);
        batteryScale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, batteryScale);
    }
    return batteryLevel / (float) batteryScale * 100;
}

আরে আমি এটি ব্যবহার করেছিলাম এবং কখনও কখনও ফলাফলটি 89 টি হয় তার 00.89 এর দশমিক দশাগুলি কী ঘটে চলেছে
পেম্বা তামাং

1
private void batteryLevel() {
        BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                context.unregisterReceiver(this);
                int rawlevel = intent.getIntExtra("level", -1);
                int scale = intent.getIntExtra("scale", -1);
                int level = -1;
                if (rawlevel >= 0 && scale > 0) {
                    level = (rawlevel * 100) / scale;
                }
                mBtn.setText("Battery Level Remaining: " + level + "%");
            }
        };
        IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(batteryLevelReceiver, batteryLevelFilter);
    }

1

অফিসিয়াল ডক্সে একটি ভুল, আপনার অবশ্যই ডাবল পরিবর্তে ভাসা ব্যবহার করতে হবে। কারণ 0.53F * 100F = 52F

int level = batteryStatus != null ? 
batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) : -1; int scale = 
batteryStatus != null ? batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1) : -1; 
double batteryPct = (double) level / (double) scale; int percent = (int) (batteryPct * 100D);

ম্যাথ.গ্রাউন্ড () ব্যবহার না করে চূড়ান্ত মান intালাইয়ের ফলে thus.০৩ এফ -> ৫২ এফ ভুল নয়?
রবায়ের

0

অন্যান্য উত্তরে কীভাবে ব্যাটারি স্থিতি অ্যাক্সেস করা যায় তা উল্লেখ করা হয়নি (ক্র্যাজিং বা না)।

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);

// Are we charging / charged?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                     status == BatteryManager.BATTERY_STATUS_FULL;

// How are we charging?
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.