Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: Event ACTION_POWER_CONNECTED is not sent to my BroadcastReceiver

I want to do something after the the phone is put into charger. So I created ChargingOnReciever:

public class ChargingOnReceiver extends BroadcastReceiver { 
    public void onReceive(Context context, Intent intent) { 
        context.startActivity(someActivity);
        Log.d(TAG, "Phone was connected to power");
    } 
} 

and I want my receiver to listen to android.intent.action.ACTION_POWER_CONNECTED, so I put this into manifest:

<reciever android:name=".ChargingOnReceiver"
          android:enabled="true"
          android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
    </intent-filter>
</reciever>

But ChargingOnReceiver is apparently not started when I put my G1 to charger (connect to my notebook via USB cable). Any help is much appreciated.

like image 954
fhucho Avatar asked Jan 20 '10 19:01

fhucho


People also ask

How do I contact BroadcastReceiver?

Creating a BroadcastReceiverThe onReceiver() method is first called on the registered Broadcast Receivers when any event occurs. The intent object is passed with all the additional data. A Context object is also available and is used to start an activity or service using context. startActivity(myIntent); or context.

What file is used to register the BroadcastReceiver?

You register this broadcast receiver either in the manifest file or in the code. These events are intents. So, whenever these kinds of events happen, an intent is triggered.

What is Android BroadcastReceiver?

A broadcast receiver (receiver) is an Android component which allows you to register for system or application events. All registered receivers for an event are notified by the Android runtime once this event happens.

How do you implement a custom BroadcastReceiver?

APPROACH : Create your own receiver class which will extend the BroadcastReceiver class of the default android. content package. You will need to override the onRecieve() method, which will take context and intent as params.


2 Answers

It's receiver, not reciever! It took me 5 hours to find this stupid bug. I think that the Android Eclipse plugin should do some syntax checking in the manifest xml.

like image 116
fhucho Avatar answered Oct 05 '22 22:10

fhucho


For anyone trying to register receiver for "android.intent.action.ACTION_POWER_CONNECTED" and "android.intent.action.ACTION_POWER_DISCONNECTED" , I would like to add :

As part of the Android 8.0 (API level 26) Background Execution Limits, apps that target the API level 26 or higher can no longer register broadcast receivers for implicit broadcasts in their manifest. However, several broadcasts are currently exempted from these limitations. Apps can continue to register listeners for the exempted broadcasts, no matter what API level the apps target.

The above two broadcasts are no longer in the list of these exempted broadcasts. Please refer the documentation below :

https://developer.android.com/guide/components/broadcast-exceptions

like image 23
Abhishek Luthra Avatar answered Oct 05 '22 23:10

Abhishek Luthra