Reputation: 129
I want to set specific time and date in Alarm Manager.I have try to set time in calendar. But after run the application it sends the email properly on specific date but not send specific time whatever i have to set in Alarm Manager.Can someone help me please.Thanks in advance.
Here is my Alarm Manager code
btnSubmit = (Button) findViewById(R.id.buttonSubmit);
btnSubmit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
cal.setTime(emailDate);
cal.set(Calendar.PM, 5);
cal.set(Calendar.MINUTE, 5);
cal.set(Calendar.SECOND, 0);
Date dt = cal.getTime();
Long longDate = (long) dt.getTime();
System.out.println("dt :=" + dt);
System.out.println("Long Date :=" + longDate);
Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(Xyz.this, 1, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, longDate, pendingIntent);
}
}
Here is AlarmManager Code
strMinusDate = "22-08-2014";
String[] splitDate_Parts = strMinusDate.split("-");
saparated_Day = splitDate_Parts[0];
saparated_Month = splitDate_Parts[1];
saparated_Year = splitDate_Parts[2];
int convertDay = Integer.valueOf(saparated_Day);
int convertMonth = Integer.valueOf(saparated_Month);
int convertYear = Integer.valueOf(saparated_Year);
cal.set(convertDay,convertMonth,convertYear,11,30,00);
Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(Xyz.this, 1, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
Here is AlarmManagerBroadcastReceiver class code.
public class AlarmManagerBroadcastReceiver extends BroadcastReceiver
{
String strServiceName;
String strSuppliername;
String strEmail;
String strReplacementDate;
String strIntervalDays;
String strNextReplacementDate;
String strEmailDate;
@Override
public void onReceive(Context con, Intent arg1)
{
// TODO Auto-generated method stub
SharedPreferences prefs = con.getSharedPreferences("MyPref_Email", Context.MODE_PRIVATE);
strServiceName=prefs.getString("ServiceName",null);
strSuppliername=prefs.getString("Suppliername" , null);
strEmail=prefs.getString("Email" , null);
strReplacementDate=prefs.getString("ReplacementDate" , null);
strIntervalDays=prefs.getString("IntervalDays" , null);
strNextReplacementDate=prefs.getString("NextReplacementDate" ,null);
strEmailDate = prefs.getString("EmailDate", null);
System.out.println(strServiceName+" , "+strSuppliername+" , "+strEmail+" , "+strReplacementDate+" , "+strIntervalDays+" , "+strNextReplacementDate);
Log.e("ON CREATE" , "=" + strServiceName);
Log.e("ON CREATE" , "=" + strSuppliername);
Log.e("ON CREATE" , "=" + strEmail);
Log.e("ON CREATE" , "=" + strReplacementDate);
Log.e("ON CREATE" , "=" + strIntervalDays);
Log.e("ON CREATE" , "=" + strNextReplacementDate);
Log.e("ON CREATE" , "=" + strEmailDate);
String subject =strServiceName;
System.out.println(" subject = " + subject);
String body = strServiceName
+","
+strSuppliername
+","
+strEmail
+","
+strReplacementDate
+","
+strIntervalDays
+","
+strNextReplacementDate
+","
+strEmailDate;
Log.e("body " , " = " + body);
System.out.println(" body = " + body);
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_EMAIL , new String[]{strEmail});
shareIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
shareIntent.putExtra(Intent.EXTRA_TEXT , body);
Intent new_intent = Intent.createChooser(shareIntent, "Share via");
new_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
con.startActivity(new_intent);
Log.e("Send Email ="," In My Service ");
System.out.println("Service start time");
}
}
Upvotes: 1
Views: 1656
Reputation: 2618
Some ACTION(event) needs to be fired by the sender so that the receiver
wakes up in response to that particular event. You are not providing any event in the intent
which you are firing
//set the time in this way by giving proper values
calendar.set(selectedYear, selectedMonth, selectedDay,selectedHour, selectedMinute);
//create the AlarmManager in this way using that calender object
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC,
calendar.getTimeInMillis(), pendingIntent);
EDIT :
When creating intent
in your AlarmManager
code ,
Intent myIntent = new Intent("com.abc.pqr"); //just a user defined action
PendingIntent pendingIntent = PendingIntent.getBroadcast(Xyz.this, 1, myIntent, 0);
In manifest add :
<permission android:name="com.abc.pqr"></permission>
<uses-permission android:name="com.abc.pqr" />
in <application>
tag, add
<receiver
android:name="yourFullPackagePath.AlarmManagerBroadcastReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="com.abc.pqr" />
</intent-filter>
</receiver>
Upvotes: 1