How to set Alarm in Android programmatically?
Following is my code can Any body please tell me why it is not working .I have learned it from this tutorial. But it is not working any help will be appreciable.
My code is
import java.util.Calendar;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.ListActivity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Toast;
public class Notify extends Activity {
Button btn;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nit);
Calendar cal=Calendar.getInstance();
cal.set(Calendar.MONTH,6);
cal.set(Calendar.YEAR,2011);
cal.set(Calendar.DAY_OF_MONTH,29);
cal.set(Calendar.HOUR_OF_DAY,17);
cal.set(Calendar.MINUTE,30);
//String[] dude=new String[] {"nitin","avi","aman","rahul","pattrick","minkle","manmohan","nitin","nitin"};
//setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,dude));
//getListView().setTextFilterEnabled(true);
//String[] dude1=new String[] {"nitin","avi","aman","rahul","pattrick","minkle","manmohan"};
Intent intent = new Intent(this, Mote.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 1253, intent, PendingIntent.FLAG_UPDATE_CURRENT| Intent.FILL_IN_DATA);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),pendingIntent );
Toast.makeText(this, "Alarm worked.", Toast.LENGTH_LONG).show();
}
}
and my Receiver class is
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class Mote extends BroadcastReceiver{
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();
int icon = R.drawable.icon;
CharSequence tickerText = "Hello you have to take medicine I am Nitin Sharma";
long when = System.currentTimeMillis();
//Notification notification = new Notification(icon, tickerText,when );
CharSequence contentTitle = "My notification";
CharSequence contentText = "Hello World!";
//notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
final int NOTIF_ID = 1234;
NotificationManager notofManager = (NotificationManager)context. getSystemService(Context.NOTIFICATION_SERVICE);
// Notification note = new Notification(R.drawable.face,"NEW ACTIVITY", System.currentTimeMillis());
Intent notificationIntent = new Intent(context, Alset.class);
PendingIntent contentIntent = PendingIntent.getActivity(context,0, notificationIntent, 0);
Notification notification = new Notification(icon, tickerText,when );
//Notification notification1 = new Notification(R.drawable.icon, "Wake up alarm", System.currentTimeMillis());
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
notification.flags = Notification.FLAG_INSISTENT;
notification.defaults |= Notification.DEFAULT_SOUND;
//notification.setLatestEventInfo(context, "My Activity", "This will runs on button click", contentIntent);
notofManager.notify(NOTIF_ID,notification);
//PendingIntent contentIntent = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0);
//notification.setLatestEventInfo(context, "Context Title", "Context text", contentIntent);
//notification.flags = Notification.FLAG_INSISTENT;
}
}
Solution 1:
I think you want to set the alarm for 26th June and not 26th July. If so then change cal.set(Calendar.MONTH,6);
to cal.set(Calendar.MONTH,5);
because the months are zero-based. if you intend the alarm to fire on 26th july then it is expected that the alarm will fire when the date-time is 26th July 2011, 17:30
Solution 2:
1.add this in manifest file
<receiver android:name=".MyAlarmReciever">
<intent-filter>
<action android:name="com.example.helloandroid.alarms" />
</intent-filter>
</receiver>
-
make a activity
public class AlrmActivity extends BaseAcitivity { TimePicker myTimePicker; Button buttonstartSetDialog; TextView textAlarmPrompt; TimePickerDialog timePickerDialog; final static int RQS_1 = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_alrm); textAlarmPrompt = (TextView)findViewById(R.id.alarmprompt); buttonstartSetDialog = (Button)findViewById(R.id.startSetDialog); buttonstartSetDialog.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { textAlarmPrompt.setText(""); openTimePickerDialog(false); }}); } private void openTimePickerDialog(boolean is24r){ Calendar calendar = Calendar.getInstance(); timePickerDialog = new TimePickerDialog( AlrmActivity.this, onTimeSetListener, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), is24r); timePickerDialog.setTitle("Set Alarm Time"); timePickerDialog.show(); } TimePickerDialog.OnTimeSetListener onTimeSetListener = new TimePickerDialog.OnTimeSetListener(){ @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { Calendar calNow = Calendar.getInstance(); Calendar calSet = (Calendar) calNow.clone(); calSet.set(Calendar.HOUR_OF_DAY, hourOfDay); calSet.set(Calendar.MINUTE, minute); calSet.set(Calendar.SECOND, 0); calSet.set(Calendar.MILLISECOND, 0); if(calSet.compareTo(calNow) <= 0){ //Today Set time passed, count to tomorrow calSet.add(Calendar.DATE, 1); } setAlarm(calSet); }}; private void setAlarm(Calendar targetCal){ textAlarmPrompt.setText( "\n\n***\n" + "Alarm is set@ " + targetCal.getTime() + "\n" + "***\n"); Intent intent = new Intent(getBaseContext(), MyAlarmReciever.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0); AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent); } }
3 . xml file include
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="hello" />
<Button
android:id="@+id/startSetDialog"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Set Target Time"/>
<TextView
android:id="@+id/alarmprompt"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
4 .make alarm manager class
public class MyAlarmReciever extends BroadcastReceiver {
Vibrator v;
Context ct;
String title;
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
ct=context;
Log.e("onReceive", "ladskjflsakjdflskjdflskjdfslkjdflasdf");
Toast.makeText(context, "OnReceive alarm test", Toast.LENGTH_SHORT).show();
v=(Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(3000);
int badgeCount = 1;
// ShortcutBadger.applyCount(context, badgeCount);
ShortcutBadger.removeCount(context);
Bundle bundle = intent.getExtras();
try{
title = intent.getExtras().get("title").toString();
// title = intent.getStringExtra("title");
Toast.makeText(context, title, Toast.LENGTH_LONG).show();
}catch(Exception e){
e.printStackTrace();
}
// if (!Utlis.checkNetworkConnection(context)) {
//
// Notification(context, "Wifi Connection off");
//
// } else {
Notification(context, "Please pray for this prayer ");
// }
}
public void Notification(Context context, String message) {
// Set Notification Title
String strtitle = "iPray Prayer Reminder";
// Open NotificationView Class on Notification Click
Intent intent = new Intent(context, PrayerForOtherActivity.class);
// Send data to NotificationView Class
intent.putExtra("title", title);
intent.putExtra("text", title);
// Open NotificationView.java Activity
PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
// NotificationCompat.Action action = new NotificationCompat.Action.Builder(R.drawable.app_icon, "Previous", pIntent).build();
// Create Notification using NotificationCompat.Builder
NotificationCompat.Builder builder = new NotificationCompat.Builder(
context)
// Set Icon
.setSmallIcon(R.drawable.app_icon)
// Set Ticker Message
.setTicker(message)
// Set Title
.setContentTitle(context.getString(R.string.app_name))
// Set Text
.setContentText(message)
// Add an Action Button below Notification
// Set PendingIntent into Notification
.setContentIntent(pIntent)
// Dismiss Notification
.setAutoCancel(true);
// Create Notification Manager
NotificationManager notificationmanager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
// Build Notification with Notification Manager
notificationmanager.notify(38, builder.build());
}
}