व्यक्तिगत रूप से पैच किए गए android.jar का उपयोग करके सिरदर्द का कारण बनता है, प्रतिबिंब का उपयोग करके PowerProfile.java तक पहुंचने का एक 'सरल' तरीका है। लेकिन @FoamyGuy और अनगिनत अन्य लोगों ने यह ध्यान दिया है कि यह छुपा एपीआई है इसलिए इसे एक बड़े प्रयास में लपेटें क्योंकि यह एंड्रॉइड के बाद के संस्करण को तोड़ सकता है।
Class<?> powerProfileClazz = Class.forName("com.android.internal.os.PowerProfile");
//get constructor that takes a context object
Class[] argTypes = { Context.class };
Constructor constructor = powerProfileClazz
.getDeclaredConstructor(argTypes);
Object[] arguments = { context };
//Instantiate
Object powerProInstance = constructor.newInstance(arguments);
//define method
Method batteryCap = powerProfileClazz.getMethod("getBatteryCapacity", null);
//call method
Log.d(TAG, batteryCap.invoke(powerProInstance, null).toString());
यदि यह सार्वजनिक एपीआई का हिस्सा नहीं है तो यह संभवतः काम नहीं करेगा, या बहुत मुश्किल हो सकता है। और यहां तक कि यदि आप इसे काम करने के लिए प्रबंधित करते हैं तो भी संभव है कि आप इसे काम करने के लिए जो कुछ भी इस्तेमाल करते हैं, वह ओएस अपडेट द्वारा किसी बिंदु पर टूटा जाएगा। – FoamyGuy