بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
خواندن اطلاعات از دیتابیس در BordcastReciver
سلام دوستان چطور میشه در زمان روشن کردن گوشی اطلاعاتی رو از دیتابیس برنامه بخونیم لطفا اهل فن کمک کنن
0
0
مثل حالت عادی در متد onReceive کانتکست وجود داره و فکر نمیکنم مشکلی باشه . (10 سال پیش)
برای این سوال 6 پاسخ وجود دارد.
پاسخ به سوال
آریا
10 سال پیش
0
0
سلام من از کد زیر برای ست کردن آلارم استفاده میکنم
btnSet.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
sId = (int) System.currentTimeMillis();
Calendar c = Calendar.getInstance();
cursor = G.database.rawQuery("SELECT * FROM alarm WHERE alarm_check = " + sId, null);
while (cursor.moveToNext()) {
hour = cursor.getInt(cursor.getColumnIndex("alarm_hour"));
minute = cursor.getInt(cursor.getColumnIndex("alarm_minute"));
second = cursor.getInt(cursor.getColumnIndex("alarm_second"));
}
cursor.close();
calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, c.get(Calendar.MONTH));
calendar.set(Calendar.YEAR, c.get(Calendar.YEAR));
calendar.set(Calendar.DAY_OF_MONTH, c.get(Calendar.DAY_OF_MONTH));
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, second);
calendar.set(Calendar.AM_PM, Calendar.PM);
Intent intent = new Intent(G.context, ActivityAlarm.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(G.context, (int) sId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
G.alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
}
});
و همه چی بخوبی کار میکنه حالا همین کدها رو هم تو BroadcastReciver مینویسم اما هنگام روشن شدن گوشی زمانهایی که بهش دادم کار نمیکنه
پاسخ به سوال
parsi bit
10 سال پیش
+1
0
سلام. منم همین مشکل رو داشتم. که بعد از یک روز تحقیق!! متوجه شدم مشکل از این بخشه:
G.alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
تابع set قدیمی شده و حالا برای درست تنظیم شدن آلارم باید از setExact استفاده کنی.
اینم از نمونه کد راه حل :
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, date.getYear());
calendar.set(Calendar.MONTH, date.getMonth());
calendar.set(Calendar.DAY_OF_MONTH, date.getDate());
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
long triggerTimeInMS = calendar.getTimeInMillis();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerTimeInMS , pendingIntent);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerTimeInMS , pendingIntent);
}
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerTimeInMS , pendingIntent);
}
alarmManager.set(AlarmManager.RTC_WAKEUP, triggerTimeInMS , pendingIntent);
}
من با sdk 4.0.3 کار میکنم خطا میگیره عکسشو پایین میذارم. کدهای خودم تو برنامه درست جواب میده هیچ مشکلی نداره یعنی تا 10 تا آلارم هم بهش دادم و دقیق سر ساعت و دقیقه آلارم زده شده مشکل من زمانیکه گوشی رو خاموش میکنم و روشن میکنم هستش تو این حالت هم دیتابیس رو میخونه ولی آلارمی که قبلا تنظیم کردم نمیزنه (10 سال پیش)
من با sdk 4.0.3 کار میکنم خطا میگیره عکسشو پایین میذارم. کدهای خودم تو برنامه درست جواب میده هیچ مشکلی نداره یعنی تا 10 تا آلارم هم بهش دادم و دقیق سر ساعت و دقیقه آلارم زده شده مشکل من زمانیکه گوشی رو خاموش میکنم و روشن میکنم هستش تو این حالت هم دیتابیس رو میخونه ولی آلارمی که قبلا تنظیم کردم نمیزنه (10 سال پیش)
پاسخ به سوال
آریا
10 سال پیش
0
0
کد رو تو برودکست به این حالت تغییر میدم وقتی گوشی خاموش و روشن میکنم فقط آخرین آلارم تنظیمی رو میزنه
cursor = G.database.rawQuery("SELECT * FROM alarm WHERE alarm_check = "+ sId,null);
ببینید شما یک اشتباه دارید : وقتی درون حلقه while دارید اطلاعات مربوط به هر آلارم رو میخونید باید همونجا هم آلارم مربوطه رو بعد از خوندن اطلاعات تنظیم کنید. ولی شما اومدین اول تمام آلارم های موجود رو در حلقه while خوندین و ریختین تو hour , minute , second . در نتیجه این مقادیر همین طور پشت سر هم جایگزین میشن و هیچ آلارمی تنظیم نمیشه! تا آخرین مورد که از حلقه بیرون میاد و میره آلارم مربوطه رو تنظیم میکنه. (10 سال پیش)
پاسخ به سوال
آریا
10 سال پیش
0
0
پاسخ به سوال
آریا
10 سال پیش
0
0
public class ActivityStartup extends Activity {
int sId;
private Calendar calendar;
public static Cursor cursor;
private int setHours, setMinutes, setSeconds;
private int hour, minute, second, i;
private EditText edtHours, edtMinutes, edtSeconds;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
edtHours = (EditText) findViewById(R.id.edtHours);
edtMinutes = (EditText) findViewById(R.id.edtMinutes);
edtSeconds = (EditText) findViewById(R.id.edtSeconds);
Button btnSet = (Button) findViewById(R.id.btnSet);
btnSet.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
sId = (int) System.currentTimeMillis();
Toast.makeText(G.context, "TIME CHANGED", Toast.LENGTH_LONG).show();
Log.i("LOG", "currentTimeMillis = : " + sId);
Calendar c = Calendar.getInstance();
int y = c.get(Calendar.YEAR);
int m = c.get(Calendar.MONTH);
int m1 = m + 1;
int d = c.get(Calendar.DAY_OF_MONTH);
setHours = Integer.parseInt(edtHours.getText().toString());
setMinutes = Integer.parseInt(edtMinutes.getText().toString());
setSeconds = Integer.parseInt(edtSeconds.getText().toString());
G.database.execSQL("INSERT INTO alarm (alarm_hour,alarm_check,alarm_minute,alarm_second,alarm_year,alarm_month,alarm_day) VALUES (" + setHours + "," + sId + "," + setMinutes + "," + setSeconds + "," + y + "," + m1 + "," + d + ")");
cursor = G.database.rawQuery("SELECT * FROM alarm WHERE alarm_check = " + sId, null);
while (cursor.moveToNext()) {
hour = cursor.getInt(cursor.getColumnIndex("alarm_hour"));
minute = cursor.getInt(cursor.getColumnIndex("alarm_minute"));
second = cursor.getInt(cursor.getColumnIndex("alarm_second"));
i = cursor.getInt(cursor.getColumnIndex("alarm_check"));
Log.i("LOG", "hour = : " + hour);
Log.i("LOG", "minute = : " + minute);
Log.i("LOG", "second = : " + second);
Log.i("LOG", "i = : " + i);
}
cursor.close();
calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, c.get(Calendar.YEAR));
calendar.set(Calendar.MONTH, c.get(Calendar.MONTH));
calendar.set(Calendar.DAY_OF_MONTH, c.get(Calendar.DAY_OF_MONTH));
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, second);
calendar.set(Calendar.AM_PM, Calendar.PM);
Intent intent = new Intent(G.context, ActivityAlarm.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(G.context, (int) sId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
G.alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
}
});
}
}
ببینید شما یک اشتباه دارید : وقتی درون حلقه while دارید اطلاعات مربوط به هر آلارم رو میخونید باید همونجا هم آلارم مربوطه رو بعد از خوندن اطلاعات تنظیم کنید. ولی شما اومدین اول تمام آلارم های موجود رو در حلقه while خوندین و ریختین تو hour , minute , second . در نتیجه این مقادیر همین طور پشت سر هم جایگزین میشن و هیچ آلارمی تنظیم نمیشه! تا آخرین مورد که از حلقه بیرون میاد و میره آلارم مربوطه رو تنظیم میکنه. (اینو گذاشتم که ببینیش) (10 سال پیش)
پاسخ به سوال
آریا
10 سال پیش
0
0
ublic class G extends Application {
public static AlarmManager alarmManager;
public static Context context;
public static SQLiteDatabase database;
public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
public static final String DIR_DATABASE = DIR_SDCARD + "/database-test/";
public static LayoutInflater inflater;
public static String packageName;
public static String DIR_APP;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
packageName = context.getPackageName();
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
DIR_APP = DIR_SDCARD + "/android/data/" + packageName;
new File(DIR_APP).mkdirs();
database = SQLiteDatabase.openOrCreateDatabase(DIR_APP + "/mydb", null);
database.execSQL("CREATE TABLE IF NOT EXISTS alarm (" +
"alarm_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , " +
"alarm_year INTEGER, " +
"alarm_month INTEGER, " +
"alarm_day INTEGER, " +
"alarm_hour INTEGER, " +
"alarm_minute INTEGER, " +
"alarm_second INTEGER," +
"alarm_check INTEGER," +
"alarm_time TEXT" +
")");
// database.execSQL("INSERT INTO alarm (alarm_year,alarm_month,alarm_month) VALUES (2016,10,10 )");
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
