بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
مشکل در اجرای آلارم بعد از ریست شدن گوشی
سلام
من در حال نوشتن یک برنامه ارسال خودکار پیامک هستم. طبق آموزشهای استاد یک کلاس BootCompleteReceiver نوشتم که بعد از ریست شدن گوشی، مجدد زمان ارسال پیامک ها رو از دیتابیس می خونه و آلارم ها رو مجدد ست می کنه. اما مشکل اینجاست که اکثر اوقات عملیات بدرستی انجام نمیشه یعنی همون موقع که گوشی ریست میشه، به محض ست شدن آلارم، اجرا هم میشه( یعنی پیامک فرستاده میشه). الان مدت زیادی هست سر این مشکل موندم و هر چی جستجو کردم به نتیجه نرسیدم. خیلی ممنون میشم کمک کنید.
package reihaneh.android_app.sms_Manager_and_Scheduler;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import android.util.Log;
public class BootCompleteReceiver extends BroadcastReceiver
{
SQLiteDatabase bootDatabase;
String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
String DIR_DATABASE = DIR_SDCARD + "/db-sms_Manager_and_Scheduler/";
ArrayList<setAlarmNode> setAlarmNodes = new ArrayList<setAlarmNode>();
@Override
public void onReceive(final Context context, Intent intent) {
//Thread
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
bootDatabase = context.openOrCreateDatabase(DIR_DATABASE + "/database.sqlite", 0, null);
//Read From DB
String name;
String number;
String miladiDate;
String time;
String message;
int requestCode;
String repeat;
String schedulerId;
Boolean isFromSmsGroup = false;
Boolean smsGroup;
Cursor cursor = bootDatabase.rawQuery("SELECT * FROM sms_scheduler where nextOccurrence != '----' ", null);
cursor.moveToFirst();
while ( !cursor.isAfterLast()) {
isFromSmsGroup = false;
schedulerId = cursor.getString(cursor.getColumnIndex("schedulerId"));
name = cursor.getString(cursor.getColumnIndex("contactName"));
number = cursor.getString(cursor.getColumnIndex("contactPhone"));
miladiDate = cursor.getString(cursor.getColumnIndex("nextOccurrence")); /// Notic!
message = cursor.getString(cursor.getColumnIndex("smsText"));
requestCode = cursor.getInt(cursor.getColumnIndex("requestCode"));
repeat = cursor.getString(cursor.getColumnIndex("frequency"));
smsGroup = cursor.getInt(cursor.getColumnIndex("smsGroup")) > 0;
//calculate Date from next Occurrence
String nextOccur = getDate(Long.valueOf(miladiDate), "dd/MM/yyyy hh:mm a"); /////a ?
Log.i("TAG", "we are in BootCompleteReceiver and next occur is : " + nextOccur);
String[] temp = nextOccur.split(" ");
String nextOccurDate = temp[0];
String nextOccurTime = temp[1];
setAlarmNode node = new setAlarmNode();
node.name = name;
node.number = number;
node.nextOccurDate = nextOccurDate;
node.nextOccurTime = nextOccurTime;
node.message = message;
node.requestCode = requestCode;
node.repeat = repeat;
node.SchedulerId = schedulerId;
node.isFromSmsGroup = isFromSmsGroup;
setAlarmNodes.add(node);
if (smsGroup) {
isFromSmsGroup = true;
Cursor cursor3 = bootDatabase.rawQuery("SELECT GcontactName,GcontactPhone,requestCode FROM sms_group where GschedulerId = '" + schedulerId + "'", null);
cursor3.moveToFirst();
while ( !cursor3.isAfterLast()) {
name = cursor3.getString(cursor3.getColumnIndex("GcontactName"));
number = cursor3.getString(cursor3.getColumnIndex("GcontactPhone"));
int rCode = cursor3.getInt(cursor3.getColumnIndex("requestCode"));
setAlarmNode node2 = new setAlarmNode();
node2.name = name;
node2.number = number;
node2.nextOccurDate = nextOccurDate;
node2.nextOccurTime = nextOccurTime;
node2.message = message;
node2.requestCode = rCode;
node2.repeat = repeat;
node2.SchedulerId = schedulerId;
node2.isFromSmsGroup = isFromSmsGroup;
setAlarmNodes.add(node2);
cursor3.moveToNext();
}
cursor3.close();
}
cursor.moveToNext();
}
cursor.close();
for (int x = 0; x < setAlarmNodes.size(); x++)
{
boolean isFromBoot = true;
setAlarmNode temp = new setAlarmNode();
temp = setAlarmNodes.get(x);
ActivityNewScheduler.setAlarm(temp.name, temp.number, temp.nextOccurDate, temp.nextOccurTime, temp.message, temp.requestCode, temp.repeat, temp.SchedulerId, temp.isFromSmsGroup, isFromBoot);
}
}
});
thread.start();
}
public static String getDate(long milliSeconds, String dateFormat)
{
// Create a DateFormatter object for displaying date in specified format.
SimpleDateFormat formatter = new SimpleDateFormat(dateFormat);
// Create a calendar object that will convert the date and time value in milliseconds to date.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(milliSeconds);
return formatter.format(calendar.getTime());
}
}
setAlarm:
private void setAlarm(final String name, final String number, final String miladiDate, final String time, final String message, final int requestCode, final String repeat, final String SchedulerId, final Boolean isFromSmsGroup) {
String[] nextOccurArrayDate = miladiDate.split("/");
String[] nextOccurArrayTime = time.split(":");
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.clear();
calendar.set(Calendar.YEAR, Integer.valueOf(nextOccurArrayDate[2]));
calendar.set(Calendar.MONTH, (Integer.valueOf(nextOccurArrayDate[1]) - 1));
calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(nextOccurArrayDate[0]));
calendar.set(Calendar.HOUR, Integer.valueOf(nextOccurArrayTime[0]));
calendar.set(Calendar.MINUTE, Integer.valueOf(nextOccurArrayTime[1]));
Intent intentAlarm = new Intent(G.context, smsActivityBroadCast.class);
intentAlarm.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// intentAlarm.putExtra("DATE", Cal);
intentAlarm.putExtra("NAME", name);
intentAlarm.putExtra("NUMBER", number);
intentAlarm.putExtra("MESSAGE", message);
intentAlarm.putExtra("FREQUENCY", repeat);
intentAlarm.putExtra("SID", SchedulerId);
intentAlarm.putExtra("ISFROMSMSGROUP", isFromSmsGroup);
// PendingIntent pendingIntent = PendingIntent.getBroadcast(G.context, requestCode, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent pendingIntent = PendingIntent.getBroadcast(G.context, requestCode, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
if (repeat.equals("یکبار")) {
G.alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
Log.i("TAG", "set Alarm For: " + name + " date: " + String.valueOf(calendar.getTimeInMillis()));
}
if (repeat.equals("هر نیمساعت")) {
// G.alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_HALF_HOUR, pendingIntent);
G.alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 900000, pendingIntent);
Log.i("TAG", "set Alarm For: " + name + " date: " + String.valueOf(calendar.getTimeInMillis()));
}
if (repeat.equals("هر ساعت")) {
G.alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_HOUR, pendingIntent);
}
if (repeat.equals("هر دو ساعت")) {
G.alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_HOUR * 2, pendingIntent);
}
if (repeat.equals("هر هشت ساعت")) {
G.alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_HOUR * 8, pendingIntent);
}
if (repeat.equals("هر روز")) {
G.alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
}
if (repeat.equals("هر هفته")) {
G.alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 7, pendingIntent);
}
if (repeat.equals("هر ماه")) {
G.alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 30, pendingIntent);
}
if (repeat.equals("هر سال")) {
G.alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 365, pendingIntent);
}
}
برای این سوال پاسخی وجود ندارد.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .