2012-08-15 15 views
6

मेरे आवेदन में, बैटरी कम होने पर मैं कुछ करना चाहता हूं। जब बैटरी कम होती है तो एंड्रॉइड ACTION_BATTERY_LOW आग लगती है और जब बैटरी फिर से अपने अच्छे स्वास्थ्य तक पहुंच जाती है तो यह ACTION_BATTERY_OKAY का इरादा रखती है। तो, मेरे पास इसके बारे में तीन प्रश्न हैं:जब एंड्रॉइड सक्रिय करता है ACTION_BATTERY_LOW

1. बैटरी प्रतिशत एंड्रॉइड वास्तव में ACTION_BATTERY_LOW पर कौन सा आग लगाता है?

2. क्या यह बैटरी बार-बार कम होने पर उसी घटना को बार-बार आग लगती है?

3. क्या हम बैटरी प्रतिशत को कॉन्फ़िगर कर सकते हैं जिस पर एंड्रॉइड ACTION_BATTERY_LOW इरादा को आग लगाएगा?

मैं तीसरे बिंदु के बारे में अधिक चिंतित हूं।

उत्तर

8

नहीं, आप ACTION_BATTERY_LOW थ्रेसहोल्ड भेजे जाने पर सेट नहीं कर सकते हैं। यह एक सिस्टम स्तर का इरादा है जो एंड्रॉइड रोम द्वारा निर्दिष्ट किया गया है। बस एक

/* The ACTION_BATTERY_LOW broadcast is sent in these situations: 
     * - is just un-plugged (previously was plugged) and battery level is 
     * less than or equal to WARNING, or 
     * - is not plugged and battery level falls to WARNING boundary 
     * (becomes <= mLowBatteryWarningLevel). 
     */ 
     final boolean sendBatteryLow = !plugged 
      && mBatteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN 
      && mBatteryLevel <= mLowBatteryWarningLevel 
      && (oldPlugged || mLastBatteryLevel > mLowBatteryWarningLevel); 

     sendIntent(); 

     // Separate broadcast is sent for power connected/not connected 
     // since the standard intent will not wake any applications and some 
     // applications may want to have smart behavior based on this. 
     Intent statusIntent = new Intent(); 
     statusIntent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); 
     if (mPlugType != 0 && mLastPlugType == 0) { 
      statusIntent.setAction(Intent.ACTION_POWER_CONNECTED); 
      mContext.sendBroadcast(statusIntent); 
     } 
     else if (mPlugType == 0 && mLastPlugType != 0) { 
      statusIntent.setAction(Intent.ACTION_POWER_DISCONNECTED); 
      mContext.sendBroadcast(statusIntent); 
     } 

     if (sendBatteryLow) { 
      mSentLowBatteryBroadcast = true; 
      statusIntent.setAction(Intent.ACTION_BATTERY_LOW); 
      mContext.sendBroadcast(statusIntent); 
3

उस उद्देश्य को बैटरी सेवा से निकाल दिया गया है। आप कोड थोड़ा विश्लेषण करने के लिए होगा, लेकिन मैं बहुत यकीन है कि यह बार-बार आग नहीं करता हूँ:

http://gitorious.org/android-eeepc/base/blobs/fda6fae156e31a287e3cfbf66e51ea1405cdf479/services/java/com/android/server/BatteryService.java 

वास्तविक मान है कि यह आग पर एंड्रॉयड संसाधनों में सेटअप कर रहे हैं, तो यह केवल एक के दौरान विन्यास है सिस्टम निर्माण

<!-- Display low battery warning when battery level dips to this value --> 
<integer name="config_lowBatteryWarningLevel">15</integer> 

<!-- Close low battery warning when battery level reaches this value --> 
<integer name="config_lowBatteryCloseWarningLevel">20</integer> 

जब तक आप एक कस्टम हार्डवेयर मंच विकसित कर रहे हैं, मैं क्या बारे में कोई अनुमान नहीं होगा: यह क्या हम अपने हार्डवेयर के लिए है, लेकिन यह संभावना एंड्रॉयड चलाता है कि पर एक हार्डवेयर प्लेटफॉर्म के लिए अलग होगा ये मान सेट हैं।

+0

:

mLowBatteryWarningLevel = mContext.getResources().getInteger( com.android.internal.R.integer.config_lowBatteryWarningLevel); 

कोड है, जो नीचे बैटरी सेवा की अद्यतन विधि में एंड्रॉयड प्रणाली कोड से कट जाता है देखें: यहाँ कोड है, जहां यह बैटरी सेवा में मूल्य सेट है मानक प्रश्न कोडिंग, आप अपने पूर्णांक कहां स्टोर करते हैं? क्या यह एक अलग स्थिरांक फ़ाइल में है? –

+0

यह थोड़ी देर के बाद से मैंने देखा, लेकिन मुझे पूरा यकीन है कि बैटरी सेवा संसाधनों में पहले से ही परिभाषित हैं। हमने बस उन्हें समायोजित किया। – jsmith

+1

@KalaJ यदि इन पूर्णांकों का उपयोग जावा फाइलों में * केवल * किया जा रहा है, तो इसे कहें, 'CONST.java' (स्थिरांक के लिए) या' CONFIG.java' (कॉन्फ़िगरेशन पैरामीटर के लिए)। अगर वे यूआई के लिए हैं, तो आप इसे 'value.xml' स्टोर करते हैं। नोट: 'value.xml' किसी भी अन्य res फ़ाइल की तरह है और आपके पास स्थानीयकरण आदि के आधार पर कई संस्करण हो सकते हैं। –

संबंधित मुद्दे