كيف يمكنني إعداد منبهات متعددة في Android؟

StackOverflow https://stackoverflow.com/questions/3273342

  •  17-09-2020
  •  | 
  •  

سؤال

حتى الآن، وبفضل هذا الموقع، تمكنت من إعداد منبه سيتم إعداده وتنشيطه، حتى لو قمت بتشغيل هاتفي.

الآن، قمت بإعداد منبه لإظهار تذكير للحدث أ وأحتاج إلى التطبيق لإعداد منبه آخر لعرضه آخر تذكير للحدث B.

لا بد أنني أفعل شيئًا خاطئًا، لأنه يؤدي فقط إلى تنشيط التذكير بالحدث أ.يبدو أنه بمجرد إعداده، يتم فهم أي إنذار آخر على أنه نفس التنبيه.:-(

وإليكم تفاصيل ما أقوم به في خطوتين:

1) من أحد الأنشطة، قمت بضبط المنبه الذي سيتصل بجهاز الاستقبال في وقت وتاريخ معينين

                Intent intent = new Intent(Activity_Reminder.this,
                        AlarmReceiver_SetOnService.class);

                intent.putExtra("item_name", prescription
                        .getItemName());
                intent
                        .putExtra(
                                "message",
                                Activity_Reminder.this
                                        .getString(R.string.notif_text));
                intent.putExtra("item_id", itemId);
                intent.putExtra("activityToTrigg",
                        "com.companyName.appName.main.Activity_Reminder");

                PendingIntent mAlarmSender;

                mAlarmSender = PendingIntent.getBroadcast(
                        Activity_Reminder.this, 0, intent, 0);

                long alarmTime = dateMgmt.getTimeForAlarm(pickedDate);
                Calendar c = Calendar.getInstance();
                c.setTimeInMillis(alarmTime);
                // Schedule the alarm!
                AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                am.set(AlarmManager.RTC_WAKEUP, alarmTime + 15000,
                        mAlarmSender);

2) من المتلقي اتصل بالخدمة

        Bundle bundle = intent.getExtras();
        String itemName = bundle.getString("item_name");
        String reminderOrAlarmMessage = bundle.getString("message");
        String activityToTrigg = bundle.getString("activityToTrigg");
        int itemId = Integer.parseInt(bundle.getString("item_id"));
        NotificationManager nm = (NotificationManager) context.getSystemService("notification");
        CharSequence text = itemName + " "+reminderOrAlarmMessage;
        Notification notification = new Notification(R.drawable.icon, text,
                System.currentTimeMillis());
        Intent newIntent = new Intent();
        newIntent.setAction(activityToTrigg);
        newIntent.putExtra("item_id", itemId);
        CharSequence text1= itemName + " "+reminderOrAlarmMessage;
        CharSequence text2= context.getString(R.string.notif_Go_To_Details);
        PendingIntent pIntent = PendingIntent.getActivity(context,0, newIntent, 0);
        notification.setLatestEventInfo(context, text1, text2, pIntent);
        notification.flags = Notification.FLAG_AUTO_CANCEL;
        notification.defaults = Notification.DEFAULT_ALL;
        nm.notify(itemId, notification);

شكرا لك مقدما،

monn3t

هل كانت مفيدة؟

المحلول

حسنًا، عندما تقوم بتعيين PendingIntent، من المفترض أن تقوم بتعيين معرف فريد له، في حالة رغبتك في التعرف عليه لاحقًا (لتعديله/إلغاءه)

static PendingIntent    getActivity(Context context, int requestCode, Intent intent, int flags) 
//Retrieve a PendingIntent that will start a new activity, like calling Context.startActivity(Intent).
static PendingIntent    getBroadcast(Context context, int requestCode, Intent intent, int flags) 
//Retrieve a PendingIntent that will perform a broadcast, like calling Context.sendBroadcast().

رمز الطلب هو ذلك المعرف.

في التعليمات البرمجية الخاصة بك، يمكنك الاستمرار في إعادة تعيين نفس PendingIntent، بدلاً من ذلك استخدم رمز طلب مختلفًا في كل مرة.

PendingIntent pIntent = PendingIntent.getActivity(context,uniqueRQCODE, newIntent, 0);

يجب أن يكون عددًا صحيحًا، وأفترض أن لديك معرفًا أساسيًا (معرف العنصر) التي يمكنها التعرف على الإنذار أ من الإنذار ب.

نصائح أخرى

يمكنك إعداد إنذارات متعددة عن طريق توفير رمز طلب مختلف في hangingIntent.getBroadcast(......)

الطريقة التي استخدمتها لإعداد إنذارات متعددة هي أنني قمت بإنشاء إنذار واحد.لقد قمت بتهيئة عدد صحيح ثابت في فئة إعداد التنبيه والذي سيتم زيادته في كل مرة من نشاطي الرئيسي عندما أقوم بالنقر فوق الزر "إضافة إنذار" في نشاطي الرئيسي.على سبيل المثال

MainActivity.java

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void addAlarmClick(View v) {
    AlarmActivity.broadcastCode++;
    startActivity(new Intent(this, AlarmActivity.class));
}
}

AlarmActivity.java

public class AlarmActivity extends AppCompatActivity {`
//........
public static int broadcastCode=0;
//........
Intent myIntent = new Intent(AlarmActivity.this, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(AlarmActivity.this,
                            broadcastCode, myIntent, 0);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top