2014-07-24 6 views
14

मैं http://developer.android.com/training/monitoring-device-state/battery-monitoring.htmlजब बैटरी स्तर निर्धारित करने के लिए

पर अपने आवेदन दिशा निर्देशों का पालन करने से बैटरी जानकारी प्राप्त करने के लिए कोशिश कर रहा हूँ इस विधि है की कोशिश कर रहा "IntentReceiver घटकों उद्देश्य प्राप्त करने के लिए रजिस्टर करने के लिए अनुमति नहीं है" की जांच करने के साथ आया था बैटरी स्तर:

public void sendBatteryInfoMessage(){ 

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

    int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); 
    boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; 

    int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 
    boolean isUsbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; 
    boolean isAcCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; 

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

    float batteryPct = batteryLevel/(float) scale; 

} 

c पहले कक्षा में Context वस्तु के रूप में आरंभ नहीं हो जाता।

यह मैं

07-24 18:11:23.445  634-634/wifi.myapp.sudara.lk.sudara_app W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x40028890) 
07-24 18:11:23.485  634-634/wifi.myapp.sudara.lk.sudara_app E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.RuntimeException: Unable to start receiver wifi.myapp.sudara.lk.sudara_app.SmsActivity: android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to register to receive intents 
      at android.app.ActivityThread.handleReceiver(ActivityThread.java:2821) 
      at android.app.ActivityThread.access$3200(ActivityThread.java:125) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2083) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:123) 
      at android.app.ActivityThread.main(ActivityThread.java:4627) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:521) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to register to receive intents 
      at android.app.ReceiverRestrictedContext.registerReceiver(ContextImpl.java:138) 
      at android.app.ReceiverRestrictedContext.registerReceiver(ContextImpl.java:132) 
      at wifi.myapp.sudara.lk.sudara_app.BatteryInfo.sendBatteryInfoMessage(BatteryInfo.java:25) 
      at wifi.myapp.sudara.lk.sudara_app.SmsActivity.onReceive(SmsActivity.java:53) 
      at android.app.ActivityThread.handleReceiver(ActivityThread.java:2810) 
            at android.app.ActivityThread.access$3200(ActivityThread.java:125) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2083) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:123) 
            at android.app.ActivityThread.main(ActivityThread.java:4627) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:521) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
            at dalvik.system.NativeStart.main(Native Method) 

हो रही है क्या मैं पता करने की जरूरत IntentReceiver components are not allowed to register to receive intents का अर्थ और कैसे पर आने के लिए त्रुटि संदेश है।

c.registerReceiver(null, iFilter) 

उपयोग:

आप के बजाय

उत्तर

59

धन्यवाद

c.getApplicationContext().registerReceiver(null, iFilter) 

Context कि onReceive() को पारित कर दिया है, registerReceiver() कॉल करने से अवरुद्ध है यहां तक ​​कि एक nullBroadcastReceiver साथ।

+1

यदि मेरे रिसीवर AndroidManifest में पंजीकृत हैं तो क्या होगा? –

+1

@ इगोरगानापोलस्की: मुझे पता नहीं है कि आप मेनिफेस्ट में पंजीकृत रिसीवर के लिए वह त्रुटि प्राप्त कर सकते हैं। – CommonsWare

+1

@ कॉमन्सवेयर मैं इस समाधान को नियोजित करते समय एंड्रॉइड संस्करण 4.1.2 और इससे भी कम त्रुटि में देख रहा हूं। रिसीवर को पंजीकृत करने से पहले मैं संदर्भ संदर्भ में संदर्भ को परिवर्तित कर रहा हूं, भले ही यह कैसे हो रहा है के बारे में कोई विचार? – neonDion

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