domshyra
domshyra

Reputation: 952

BroadcastReceiver not sending back data to main class

I am using a BroadcastReceiver to set up an alarm alaret and for some reason it won't work.

public class SimpleSleepActivity extends Activity {
/** Called when the activity is first created. */

Button setAlarm, setTimer;
int hours = 1, alarmSec = 10;
Toast mToast;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    setAlarm = (Button) findViewById(R.id.bSetAlarm);
    setTimer = (Button) findViewById(R.id.bSetTimer);
    setTimer.setOnClickListener(mAlarmFromNow);


}

private OnClickListener mAlarmFromNow = new OnClickListener() {
    public void onClick(View v) {

        // When the alarm goes off, broadcast an Intent to the 
        // BroadcastReceiver. This is an Intent with an explicit class
        // name to have a receiver instantiated and called, and then 
        // create an IntentSender to have the intent executed as a broadcast.
        Intent intent = new Intent(SimpleSleepActivity.this,
                AlarmFromNow.class);
        PendingIntent sender = PendingIntent.getBroadcast(
                SimpleSleepActivity.this, 0, intent, 0);

        // Finding the current time and setting and alarm for XX seconds
        // from that time
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.add(Calendar.SECOND, alarmSec);

        // Scheduling the alarm
        AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
        am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);

        if (mToast != null) {
            mToast.cancel();
        }
        mToast = Toast.makeText(SimpleSleepActivity.this,
                //Show the user what they imputed
                "The alarm will go off in " + alarmSec + " Seconds", Toast.LENGTH_LONG);
        mToast.show();

    }
};



}

my other class is this

public class AlarmFromNow extends BroadcastReceiver {

public void onReceive(Context context, Intent intent) {
    //Display a toast after alarmSec is counted
    Toast.makeText(context, R.string.alarm_from_now, Toast.LENGTH_LONG)
            .show();
}

}

When I try to get that toast notification after 10 sec it won't appear. I can't think of any other reason that it won't work and I have looked at googles API demos and followed it closely.

Upvotes: 0

Views: 239

Answers (2)

Entreco
Entreco

Reputation: 12900

More likely, you forgot to add the BroadCast Receiver to your AndroidManifest.xml To be able to use it, it must be declared in your manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.yourpackage.name"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="9" />
    <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >

        <!-- Your activity here -->
        <activity android:name="SimpleSleepActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
             </intent-filter>
        </activity>

        <!-- Your Receiver here -->
        <receiver android:name="AlarmFromNow"></receiver>
    </application>
</manifest>

NOTE: I quickly tested your code, with this manifest, and indeed it shows the Toast after 10 secs...

Upvotes: 1

Will Tate
Will Tate

Reputation: 33509

I ran into something similar to this. I had to set an action on the Intent to get it to work properly. The value passed in with setAction() didn't matter. Try...

Intent intent = new Intent(SimpleSleepActivity.this,
            AlarmFromNow.class);
intent.setAction("Doesn't Really Matter");
PendingIntent sender = PendingIntent.getBroadcast(
            SimpleSleepActivity.this, 0, intent, 0);

Upvotes: 0

Related Questions