آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

خواندن اطلاعات از دیتابیس در BordcastReciver

آریا  10 سال پیش  10 سال پیش
0 0

سلام دوستان چطور میشه در زمان روشن کردن گوشی اطلاعاتی رو از دیتابیس برنامه بخونیم لطفا اهل فن کمک کنن

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 مینویسم اما هنگام روشن شدن گوشی زمانهایی که بهش دادم کار نمیکنه

0 0
شما چک کنید که آیا توی BroadCast مقدار cursor خالی هست یا نه اگر حالی نبود پس مشکلی با دیتابیس ندارید باید بقیه قسمت هارو چک کنید . (10 سال پیش)
پاسخ به سوال 
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);
}
0 0
ممنون از دوستان لطف کردین اما من تو برنامه مشکلی ندارم اما وقتی گوشی رو خاموش و روشن میکنم برنامه کار نمیکنه طبق راهنمایی آقای کاشی زاده انجام دادم تو برودکست اطلاعات از دیتابیس میخونه و تو Toast نمایش داده میشه اما در زمان مشخص شده آلارم نمیزنه (10 سال پیش)
0 0
دوست عزیز دقیقا به خاطر همین موضوع هست که هشدارها در زمان موردنظر کار نمیکنه! شما یک بار به جای set از setExact برای تنظیم آلارم استفاده کن و نتیجه رو بگو.... (10 سال پیش)
0 0
من با sdk 4.0.3 کار میکنم خطا میگیره عکسشو پایین میذارم. کدهای خودم تو برنامه درست جواب میده هیچ مشکلی نداره یعنی تا 10 تا آلارم هم بهش دادم و دقیق سر ساعت و دقیقه آلارم زده شده مشکل من زمانیکه گوشی رو خاموش میکنم و روشن میکنم هستش تو این حالت هم دیتابیس رو میخونه ولی آلارمی که قبلا تنظیم کردم نمیزنه (10 سال پیش)
0 0
من با sdk 4.0.3 کار میکنم خطا میگیره عکسشو پایین میذارم. کدهای خودم تو برنامه درست جواب میده هیچ مشکلی نداره یعنی تا 10 تا آلارم هم بهش دادم و دقیق سر ساعت و دقیقه آلارم زده شده مشکل من زمانیکه گوشی رو خاموش میکنم و روشن میکنم هستش تو این حالت هم دیتابیس رو میخونه ولی آلارمی که قبلا تنظیم کردم نمیزنه (10 سال پیش)
پاسخ به سوال 
آریا  10 سال پیش
0 0

کد رو تو برودکست به این حالت تغییر میدم وقتی گوشی خاموش و روشن میکنم فقط آخرین آلارم تنظیمی رو میزنه 

  cursor = G.database.rawQuery("SELECT * FROM alarm WHERE alarm_check = "+ sId,null);
0 0
فکر میکنم مشکل من تو همین خطه تو برنامه زمانیکه گوشی هنوز خاموش نشده cursor = G.database.rawQuery("SELECT * FROM alarm WHERE alarm_check = " + sId, null); درست کار میکنه اما وقتی گوشی خاموش روشن شد تو برودکست کار نمیکنه (10 سال پیش)
0 0
ببینید شما یک اشتباه دارید : وقتی درون حلقه while دارید اطلاعات مربوط به هر آلارم رو میخونید باید همونجا هم آلارم مربوطه رو بعد از خوندن اطلاعات تنظیم کنید. ولی شما اومدین اول تمام آلارم های موجود رو در حلقه while خوندین و ریختین تو hour , minute , second . در نتیجه این مقادیر همین طور پشت سر هم جایگزین میشن و هیچ آلارمی تنظیم نمیشه! تا آخرین مورد که از حلقه بیرون میاد و میره آلارم مربوطه رو تنظیم میکنه. (10 سال پیش)
پاسخ به سوال 
آریا  10 سال پیش
0 0

0 0
من مجددا کد شما رو خوندم. میشه لطفا توضیح بدی که alarm_check تو دیتابیست دقیقا چیه؟ (10 سال پیش)
0 0
ممنون عزیز لطف کردی alarm_check یک id که با هر با ست کردن آلارم زمان فعلی سیستم تو دیتابیس save میشه (10 سال پیش)
پاسخ به سوال 
آریا  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);

            }
        });

    }

}
0 0
ببینید شما یک اشتباه دارید : وقتی درون حلقه while دارید اطلاعات مربوط به هر آلارم رو میخونید باید همونجا هم آلارم مربوطه رو بعد از خوندن اطلاعات تنظیم کنید. ولی شما اومدین اول تمام آلارم های موجود رو در حلقه while خوندین و ریختین تو hour , minute , second . در نتیجه این مقادیر همین طور پشت سر هم جایگزین میشن و هیچ آلارمی تنظیم نمیشه! تا آخرین مورد که از حلقه بیرون میاد و میره آلارم مربوطه رو تنظیم میکنه. (اینو گذاشتم که ببینیش) (10 سال پیش)
0 0
نمیدونم شاید کدم اشتباه باشه اما تا وقتی گوشی خاموش نکردم و تو برنامه هستم خوب کار میکنه مقادیر هم چک کردم تو دیتابیس save میشن ولی بعد از اینکه گوشی خاموش میکنم و روشن میکنم دیگه کار نمیکنه چی گذاشتین من ببینم ؟ چیزی ندیدم... (10 سال پیش)
0 0
خب ممکنه اونجا کدت متفاوت باشه! حالا شما اینو امتحان کن و آلارم ها رو داخل حلقه while تنظیم کن. به احتمال 99% درست میشه! (10 سال پیش)
0 0
parsi bit عزیز انجام دادم ولی متاسفانه بازم جواب نداد. البته کدهام تو Broadcast هم دقیقا همینه واسه همین دوباره کپیش نکردم. موندم چه کنم (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 )");

    }

}

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .