• 0

كيف اتعامل مع Broadcast receiver في الاندرويد ستوديو؟

السلام عليكم ورحمة الله وبركاته, انا جديد في استخدام الـ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
تعديل بعض الاملاء

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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");

  }
}

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن