Kiruthika
Kiruthika

Reputation: 1

Receiving Alarms in Android

In my project, I'm using alarm code. There is no error, but anything within the BroadcastReceiver class is not being executed. I don't understand where the fault is. Im doing it in Windows using Eclipse. I also have specified the <receiver> class in AndroidManifest.xml.

I want the code whithin the BroadcastReceiver class to be executed. In this case, I want the text given whithin the receiver class to be displayed at the specified time. This is my receiver class:

public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    context.registerReceiver(null, null);
    Toast.makeText(context, "Time is
up!!!!.",Toast.LENGTH_LONG).show();
}}

Can anyone suggest a way to get rid of this problem? Thanks!!!

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.project.rappel"
android:versionCode="1"
android:versionName="1.0">
<application
    android:icon="@drawable/icon"
    android:label="@string/app_name">
    <provider
        android:name="ScheduleProvider"
        android:authorities="com.project.rappel" />
    <activity
        android:name=".Rappel"
        android:label="@string/app_name">
        <intent-filter>
            <action
                android:name="android.intent.action.MAIN" />
            <category
                android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".SetSchedule"></activity>
    <activity
        android:name=".DaysAndTimes"></activity>
    <activity
        android:name=".Tts"></activity>

    <receiver
        android:name="MyBroadcastReceiver"
        android:process=":remote" />
   </application>
   <uses-sdk
    android:minSdkVersion="8" />

   </manifest> 

Above is my androidmanifest.xml.This is the code I used for trigerring the Receiver.

public void startAlert(View view) {
    EditText text = (EditText) findViewById(R.id.time);
    int i = Integer.parseInt(text.getText().toString());
    Intent intent = new Intent(this, MyBroadcastReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(
            this.getApplicationContext(), 234324243, intent, 0);
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
            + (i * 1000), pendingIntent);
    Toast.makeText(this, "Alarm set in " + i + " seconds",
            Toast.LENGTH_LONG).show();
}

Upvotes: 0

Views: 7172

Answers (4)

Kiruthika
Kiruthika

Reputation: 1

This code works fine:

public void setupAlarm() {
    AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, MyAlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
            intent, 0);
    Calendar time = Calendar.getInstance();
    time.setTimeInMillis(System.currentTimeMillis());
    // Set Alarm for next 10 seconds
    time.add(Calendar.SECOND, 10);
    alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(),
            pendingIntent);
}

and in the androidmanifest.xml I used this code:

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <receiver android:name=".MyAlarmReceiver" />

    <activity
        android:name=".AlarmSampleActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Thanks all for helping!!!

Upvotes: 0

blh83
blh83

Reputation: 495

First try adding a period in your manifest file in front of MyBroadcastReceiver. It should look like: android:name=".MyBroadcastReceiver".

If that doesn't work (though hopefully it does) try adding 'Context.' before ALARM_SERVICE on this line:

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

so it would look like:

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

Otherwise, I am not seeing anything immediately obvious.

Upvotes: 0

mig35
mig35

Reputation: 1442

I think the problem is in manifest file.

Try to remove this parameter "android:process=":remote"" from your reciever.

EDIT: Please, see my code bellow it work's perfectly. Hope, it will help.

// registration  
 Intent intent = new Intent(context, AlarmReceiver.class).putExtra(AlarmReceiver.ALARM_ID, alarm.getId());  
intent.setData(Uri.parse("date:" + alarm.getId()));  
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); // try to change last parameter like mine  
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTime().getTime(), pendingIntent);

// in manifest in application tag  
<receiver android:name=".ui.more.AlarmReceiver"/>
// receiver class  
public class AlarmReceiver extends BroadcastReceiver {  
    public static final String ALARM_ID = "alarmId";  
    public void onReceive(Context context, Intent intent) {  
     context.startActivity(new Intent(context, StartAlarmActivity.class)
               .putExtra(StartAlarmActivity.ALARM_ID, intent.getExtras().getInt(ALARM_ID))
               .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));  
    }  
}

Upvotes: 0

iori
iori

Reputation: 21

Looking only at this piece code it is not easy to answer. However, it is likely that you have not specified the intent filter for the receiver in the manifest.

<receiver android:name=".MyBroadcastReceiver"> 
<intent-filter> 
        <action android:name="xyz.abc.YOUR_ACTION" />  
</intent-filter> 
</receiver>

The activity or service that is using the alarm, when "the time is up" has to send an Intent matching the action specified in the android manifest. You have to do something like this:

Intent MyIntent = new Intent("xyz.abc.YOUR_ACTION");
Context cont = this.getBaseContext();
cont.sendBroadcast(SMSIntent);

Hope this helps.

Cheers

Upvotes: 2

Related Questions