مساعدة ضرورية جدا فى كود التنبيه

محمد • منذ سنة

السلام عليكم ورحمة الله وبركاته 

 

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

 

هذه الدالة فى الاكتفتى الرئيسية 

private fun setAlarm(hour: Int, minute: Int, azanNum:Int,alarmType:Int,prayerName:String) {
    val calendar = Calendar.getInstance()
    calendar.set(Calendar.HOUR_OF_DAY, hour)
    calendar.set(Calendar.MINUTE, minute)
    calendar.set(Calendar.SECOND, 0)

    val intent = Intent(this, AlarmReceiver::class.java)
    intent.putExtra("alarmType", alarmType)
    intent.putExtra("EXTRA_NOTIFICATION_ID", prayerName)
    alarmIntent = PendingIntent.getBroadcast(this, azanNum, intent, PendingIntent.FLAG_UPDATE_CURRENT)

    // تحديد وضع الإنذار وتفعيله
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, alarmIntent)
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, alarmIntent)
    } else {
        alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, alarmIntent)
    }
}

ومن ثم هذا الكلاس 

class AlarmReceiver : BroadcastReceiver() {

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



        val notificationId = intent!!.getStringExtra("EXTRA_NOTIFICATION_ID").toString()
        val type = intent.getIntExtra("alarmType", 1)

        when (type) {
            1->{showNotification(context!!,notificationId)}
            2->{vibrate(context!!)}
            3->{launchMainActivity(context!!)}
            4->{}
        }


    }

    // عرض إشعار
    private fun showNotification(context: Context, message: String) {
        val notificationManager =
            context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        val channelId = message
        val channelName = "Alarm Notification"
        val importance = NotificationManager.IMPORTANCE_HIGH

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val channel = NotificationChannel(channelId, channelName, importance)
            notificationManager.createNotificationChannel(channel)
        }

        val builder = NotificationCompat.Builder(context, channelId)
            .setSmallIcon(R.drawable.ic_launcher_foreground)
            .setContentTitle("الصلاة")
            .setContentText(message)
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setAutoCancel(true)

        val notification = builder.build()
        notificationManager.notify(0, notification)
    }
    // تشغيل فايبريشن
    private fun vibrate(context: Context) {
        val vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            vibrator.vibrate(VibrationEffect.createOneShot(10000, VibrationEffect.DEFAULT_AMPLITUDE))
        } else {
            vibrator.vibrate(10000)
        }
    }
    // فتح الاكتفتى الرئيسية
    private fun launchMainActivity(context: Context) {
        val intent = Intent(context, MainActivity::class.java)
        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        context.startActivity(intent)
    }
    // تشغيل مقطع صوتي
    private fun playSound(context: Context, soundResId: Int, message: String) {
        val player = MediaPlayer.create(context, soundResId)
        player.start()
        showNotification(context, message)
    }
}

وكذلك فى المينفست هذه الأذونات المرتبطة بكود التنبيه وغيره 

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.SET_ALARM" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

وأخيرا 

<receiver
    android:name=".AlarmReceiver"
    android:enabled="true"
    android:exported="true" />

أحتاج تعديل هذا الكود ليعمل والتطبيق مغلق لأنه يعمل فقط والتطبيق مفتوح ستكون ساعدتنى جدا جدا جدا جدا إذا جابتنى على هذا السؤال وشكرا

كلمات دليلية: alarm alarmreceiver

ساعد بالإجابة

"إن في قضاء حوائج الناس لذة لا يَعرفها إلا من جربها، فافعل الخير مهما استصغرته فإنك لا تدري أي حسنة تدخلك الجنة."

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !