اذهب إلى المحتوى

السؤال

نشر (معدل)

السلام عليكم ورحمة الله وبركاته, انا جديد في استخدام الـbroadcast receiver ولدي بعض الاستفسارات التي بحثت عنها ولم اجد اجابه منطقيه او لم استطع فهمها بكل جيد.

استفساري الاول : بماذا استطيع استخدام الـ broadcast receiver غير الاشعارات؟

أستفساري الثاني: هل استطيع استخدام broadcast receiver واحد لعدد من الاشعارات كأشعار الصلاوات مثلا كـالفجر, والظهر, والمغرب ... الخ؟

استفساري الثالث:  أن كان بأمكاني استخدام broadcast receiver واحد كيف يمكنني ان أغير الTitle و الText ؟ 

بحثت في عدة مواقع ولم أجد اجابة بشكل جيد..

هذه الاكواد التي استخدمتها

broadcast receiver

class fajrBroadcastReceiver : BroadcastReceiver() {

    val CHANNEL_ID = "أذان الفجر"

    override fun onReceive(context: Context?, intent: Intent?) {

        val intent = Intent(context, MainActivity::class.java).apply {
            flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
        }
        val pendingIntent : PendingIntent = PendingIntent.getActivity(context,0,intent,0)

        val builder = NotificationCompat.Builder(context!!, CHANNEL_ID)
            .setSmallIcon(R.drawable.ic_fajr_icon)
            .setContentTitle("صلاة الفجر قد حلت")  // اريد تغيير هذا السترينق الى عدة جمل
            .setContentText("بسم الله الرحمن الرحيم")  // وهذا ايضا
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setDefaults(NotificationCompat.DEFAULT_ALL)
            .setContentIntent(pendingIntent)
            .setAutoCancel(true)

        with(NotificationManagerCompat.from(context)) {
            notify(123, builder.build())
        }

    }
}

Setting Activity

 

    val CHANNEL_ID = "أذان الفجر"

    private lateinit var alarmManager: AlarmManager
    private lateinit var pendingIntent: PendingIntent
      
       // اعداد الافتراضي
        defaultTimes.setOnCheckedChangeListener { buttonView, isChecked ->
            editor.putBoolean("DefaultTimesSwitch",isChecked)

            editor.apply()

            if (isChecked){
                val  fajrtime = getSharedPreferences("saveSettingData", Context.MODE_PRIVATE)

                calender = Calendar.getInstance()
                calender[Calendar.HOUR_OF_DAY] = fajrtime.getInt("fajrTimeHour", 0)
                calender[Calendar.MINUTE] = fajrtime.getInt("fajrTimeMinutes",0)
                calender[Calendar.SECOND] = 0
                calender[Calendar.MILLISECOND] = 0

                fajrEditTxt.setHint("" + fajrtime.getInt("fajrTimeHour", 0) + ":"
                        + fajrtime.getInt("fajrTimeMinutes",0) + " AM")

                alarmFajr()

            }else{
                fajrEditTxt.hint = "Press"
            }
                                                 
             
            private fun createNotificationChannel(){
            val channelName = "مؤذن الفجر"
            val DESCRIPTION_TEXT = "أشعار لأذان الفجر"
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            val name = channelName
            val description_text = DESCRIPTION_TEXT
            val importance = NotificationManager.IMPORTANCE_HIGH
            val channel = NotificationChannel(CHANNEL_ID, name, importance).apply {
                description = description_text
            }

            val notificationManager: NotificationManager =
                getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
            notificationManager.createNotificationChannel(channel)
        }

    }
    fun alarmFajr(){
        alarmManager = getSystemService(ALARM_SERVICE) as AlarmManager
        val i = Intent(this, fajrBroadcastReceiver::class.java)

        pendingIntent = PendingIntent.getBroadcast(this, 0, i,0)

        alarmManager.setInexactRepeating(
            AlarmManager.RTC_WAKEUP, calender.timeInMillis,
            AlarmManager.INTERVAL_DAY, pendingIntent
        )
    }

 

انا استخدم لغة الكوتلن لكن ان اردت الاجابة بلغة الجافا لا مانع انا اعرف اترجم الجافا الى الكوتلن

شكرا لكم ,,, 

تم التعديل في بواسطة عبدالرحمن العنزي4
تعديل بعض الاملاء

Recommended Posts

  • 0
نشر
بتاريخ منذ ساعة مضت قال عبدالرحمن العنزي4:

استفساري الاول : بماذا استطيع استخدام الـ broadcast receiver غير الاشعارات؟

مستقبل الأحداث، يمكن استخدامه في أي عملية غير متزامنة أي تحقيق اسجابة لحدوث شيئ ما، يمكن أن يكون انتهاء مهلة من الوقت أو نقر على زر من المستخدم أو أي تغييرات على مستوى نظام التشغيل

بتاريخ منذ ساعة مضت قال عبدالرحمن العنزي4:

أستفساري الثاني: هل استطيع استخدام broadcast receiver واحد لعدد من الاشعارات كأشعار الصلاوات مثلا كـالفجر, والظهر, والمغرب ... الخ؟

نعم بالطبع، من خلال intent يمكنك تمرير بيانات لمستقبل الأحداث، ثم استعمال الجملة الشرطية if مثلا لتبيان نوع الحدث ثم تشغيل الشيفرة المناسبة للتعامل معه.

بتاريخ منذ ساعة مضت قال عبدالرحمن العنزي4:

استفساري الثالث:  أن كان بأمكاني استخدام broadcast receiver واحد كيف يمكنني ان أغير الTitle و الText ؟ 

إن عمل مستقبل أحداث ديناميكي يتعلق بتمرير بيانات له وثم بناءاً على قيمة هذه البيانات يتم الاستجابة المناسبة

Intent intent = new Intent("my.multi.working.broadcast");  // اسم النشاط

intent.putExtra("type", type .. );  // نوع الصلاة

intent.putExtra("title", "my title: ");
intent.putExtra("text", "my text...:");

sendBroadcast(intent);

في الشيفرة السابقة تم تحديد نوع الصلاة (الوقت) بتمرير قيمة ضمن intent وإلا يمكن التحديد من النشاط activity

public void onReceive(Context context, Intent intent) {
  String action = intent.getAction();

  Log.i("Receiver", "Broadcast received: " + action);

  if(action.equals("my.action.string")){      /// تأكد من تطابق اسم النشاط في الجزء السابق مع هذا
    
	String state = intent.getExtras().getString("extra");

  }
}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...