title: Detecting Battery Charging Android
body: <p>I;m programmatically rejecting an incoming calls. The "call reject" and "sendSMS" work fine,
  but I want to reject the call only if the phone is in charging mode.</p>
  
  <p>I'm trying to implement the following code :</p>
  
  <pre><code>  case TelephonyManager.CALL_STATE_RINGING:
  
          if (isCharging())
          {
              reject();
              sendSMS(incomingNumber);
          } 
  
    break;
  </code></pre>
  
  <p>isCharging: </p>
  
  <pre><code>public boolean isCharging()
  {
      IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
      Intent batteryStatus = contextMember.registerReceiver(null, ifilter);
      int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
      boolean bCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                           status == BatteryManager.BATTERY_STATUS_FULL;
      return bCharging;
  }
  </code></pre>
  
  <p>But the app keeps crushing on incoming call.</p>
  
  <p>Please help me to figure this out!</p>
  
  <p>I'm receiving the following errors on the LogCat:</p>
  
  <pre><code>  E/AndroidRuntime(11160): FATAL EXCEPTION: main
    E/AndroidRuntime(11160): android.content.ReceiverCallNotAllowedException:         IntentReceiver components are not allowed to register to receive intents
    E/AndroidRuntime(11160):  at     android.app.ReceiverRestrictedContext.registerReceiver(ContextImpl.java:163)
    E/AndroidRuntime(11160):  at android.app.ReceiverRestrictedContext.registerReceiver(ContextImpl.java:157)
    E/AndroidRuntime(11160):  at   com.SmartDialer_app.SmartDialer.MyPhoneStateListener.isCharging(MyPhoneStateListener.java:106)
    E/AndroidRuntime(11160):  at  com.SmartDialer_app.SmartDialer.MyPhoneStateListener.onCallStateChanged(MyPhoneStateListene r.java:57)
    E/AndroidRuntime(11160):  at android.telephony.PhoneStateListener$2.handleMessage(PhoneStateListener.java:393)
    E/AndroidRuntime(11160):  at android.os.Handler.dispatchMessage(Handler.java:99)
    E/AndroidRuntime(11160):  at android.os.Looper.loop(Looper.java:137)
    E/AndroidRuntime(11160):  at  android.app.ActivityThread.main(ActivityThread.java:4898)
    E/AndroidRuntime(11160):  at java.lang.reflect.Method.invokeNative(Native Method)
    E/AndroidRuntime(11160):  at java.lang.reflect.Method.invoke(Method.java:511)
    E/AndroidRuntime(11160):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
    E/AndroidRuntime(11160):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
    E/AndroidRuntime(11160):  at dalvik.system.NativeStart.main(Native Method)
    E/AndroidRuntime(11160): FATAL EXCEPTION: main
    E/AndroidRuntime(11160): android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to register to receive intents
    E/AndroidRuntime(11160):  at android.app.ReceiverRestrictedContext.registerReceiver(ContextImpl.java:163)
    E/AndroidRuntime(11160):  at android.app.ReceiverRestrictedContext.registerReceiver(ContextImpl.java:157)
    E/AndroidRuntime(11160):  at com.SmartDialer_app.SmartDialer.MyPhoneStateListener.isCharging(MyPhoneStateListener.java:1 06)
    E/AndroidRuntime(11160):  at com.SmartDialer_app.SmartDialer.MyPhoneStateListener.onCallStateChanged(MyPhoneStateListener.java:57)
    E/AndroidRuntime(11160):  at android.telephony.PhoneStateListener$2.handleMessage(PhoneStateListener.java:393)
    E/AndroidRuntime(11160):  at android.os.Handler.dispatchMessage(Handler.java:99)
    E/AndroidRuntime(11160):  at android.os.Looper.loop(Looper.java:137)
    E/AndroidRuntime(11160):  at android.app.ActivityThread.main(ActivityThread.java:4898)
    E/AndroidRuntime(11160):  at java.lang.reflect.Method.invokeNative(Native Method)
    E/AndroidRuntime(11160):  at java.lang.reflect.Method.invoke(Method.java:511)
    E/AndroidRuntime(11160):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
    E/AndroidRuntime(11160):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
   E/AndroidRuntime(11160):   at dalvik.system.NativeStart.main(Native Method)
  </code></pre>
  
  <p>Thank you.</p>