PDA

View Full Version : مشکل با ناتیفیکیشن



esmaeilbf
شنبه 13 دی 1393, 15:11 عصر
برای نوشتن بخش "یادآوری" یا "reminder" در برنامه از AlarmManager استفاده کردم که کاملا درست کار میکنه. حالا میخوام این یادآوری ها به صورت ناتیفیکیشن نمایش داده بشن پس یک service نوشتم که AlarmManager سر موقعش آون رو اجرا کنه .
تا اینجای برنامه به درستی کار میکنه اما ناتیفیکیشن ها درست کار نمیکنن!! مثلا آلارم برای ساعت 12:10 setشده برنامه یک ناتیفیکیشن میده ام برای آلارم بعدی که مثلا ساعت 12:12 دقیقه هست هیچ اتفاقی نمیفته .
با log هم تست کردم برنامه داره همچنان onCreate اون service رو فراخوانی میکنه اما ناتیفیکیشن نمیاد!! مشکل از چی هست؟
اینم کدهای قسمت notification :

NotificationCompat.Builder builder = new NotificationCompat.Builder(context); builder.setSmallIcon(R.drawable.icon);
builder.setContentTitle("hello");
builder.setContentText("ALARM !!!!!!!ALARM !!!!!!!");
builder.setVibrate(new long[]{ 0, 200, 100, 200 });
builder.setSound(alarmSound);
builder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);
Notification notification = builder.build();
G.notificationManager.notify(0, notification);

hamedjj
شنبه 13 دی 1393, 15:22 عصر
برای نوشتن بخش "یادآوری" در برنامه "reminder" از AlarmManager استفاده کردم که کاملا درست کار میکنه. حالا میخوام این یادآوری ها به صورت ناتیفیکیشن نمایش داده بشن پس یک service نوشتم که AlarmManager سر موقعش آون رو اجرا کنه .
تا اینجای برنامه به درستی کار میکنه اما ناتیفیکیشن ها درست کار نمیکنن!! مثلا آلارم برای ساعت 12:10 setشده برنامه یک ناتیفیکیشن میده ام برای آلارم بعدی که مثلا ساعت 12:12 دقیقه هست هیچ اتفاقی نمیفته .
با log هم تست کردم برنامه داره همچنان onCreate اون service رو فراخوانی میکنه اما ناتیفیکیشن نمیاد!! مشکل از چی هست؟
اینم کدهای قسمت notification :

NotificationCompat.Builder builder = new NotificationCompat.Builder(context); builder.setSmallIcon(R.drawable.icon);
builder.setContentTitle("hello");
builder.setContentText("ALARM !!!!!!!ALARM !!!!!!!");
builder.setVibrate(new long[]{ 0, 200, 100, 200 });
builder.setSound(alarmSound);
builder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);
Notification notification = builder.build();
G.notificationManager.notify(0, notification);

در قسمت notify() عدد 0 را null قرار بده ببین قبول میکنه!

esmaeilbf
شنبه 13 دی 1393, 15:23 عصر
نه فقط Integer قبول میکنه!

hamedjj
شنبه 13 دی 1393, 15:27 عصر
نه فقط Integer قبول میکنه!

خط آخر را با این کد تغییر بده :

;(G.notificationManager.notify(Unique_Integer_Numb er, notification

esmaeilbf
شنبه 13 دی 1393, 15:36 عصر
یعنی به این صورت که یک متغیر تعریف کنم و هربار مقدارش رو تغییر بدم؟!

int id=11;
G.notificationManager.notify(id, notification);
id++;


این کارم کردم نشد!
نکته: وقتی یک ناتیفیکیشن میاد اگر پروسس برنامه رو ببندم ناتیفیکیشن بعدی دریافت میشه در غیر اینصورت نمیاد!! یعنی به خاطر تکراری بودن همین عدد هست؟ که بعدی ها نمیان؟

hamedjj
شنبه 13 دی 1393, 15:43 عصر
در مستندات گوگل توضیح داده که اگر نوتیفیکیشنی یا یک id ارسال شود و آن نوتیفیکیشن cancel یا باز نشود . نوتیفیکیشن بعدی با آپدیت جدید با همان id ارسال میشود در غیر اینصورت نوتیفیکیشن ارسال نمیشود.

Id هر بار باید تغییر کند و یک عدد Unique باشید
کد بالا جواب نداد؟

esmaeilbf
شنبه 13 دی 1393, 15:50 عصر
منظورتون از این چی بود؟ "Unique_Integer_Numb er" - یعنی یک متغیر int که هربارمقدارش تغییر میکنه؟ این کار رو کردم جواب نداد

hamedjj
شنبه 13 دی 1393, 15:56 عصر
پاسخ درست را پیدا کردی در این پست قرار بده تا ما هم استفاده کنیم
تشکر

esmaeilbf
شنبه 13 دی 1393, 17:48 عصر
nt = notification
مشکل حل شد . به خاطر این بود که ntها رو توی متد onCreate صدا میزدم در صورتی که باید در onStart فراخوانی بشن.

یک مشکل جدید: با هر بار تنظیم ساعت آلارم منجر ، بلافاصله یک nt جدید ارسال میشه در صورتی که من nt رو توی onStart صدا زدم و باید تا زمان فعال شدن آلارم منجر صبر کنه بعد پیغام بیاد!!!