Как сохранить уведомление об общих предпочтениях?

#java #android #android-studio #kotlin #alarmmanager

Вопрос:

У меня есть уведомление(с широковещательным приемником), диспетчер аварийных сигналов и временные проблемы. Все работает довольно хорошо, но я хочу сэкономить время, отведенное на перепалку, в соответствии с общими предпочтениями, поэтому, когда пользователь выбирает время из перепалки, он всегда будет отправлять уведомление в это время. Но перед этим я хочу установить время по умолчанию ( чтобы уведомление отправлялось пользователю в это время по умолчанию, пока пользователь не изменит его на выбранное время по времени) и сохранить его в том же ключе в общих настройках.

итак, чего я хочу, так это:

  1. Сохранение времени по умолчанию для общего предпочтения, чтобы оно каждый день уведомляло пользователя о времени по умолчанию.
  2. Сохранение времени, которое пользователь выбрал из time bicker, в том же ключе, что и #1, и, таким образом, оно станет временем по умолчанию.

Я не знаю, как использовать общий преф с менеджером сигнализации, поэтому буду признателен за любую помощь…

P. C. можно использовать только Java и Koltin

Android Manifast.xml

         <receiver android:name=".AthanBrodcasts.fajrBroadcastReceiver"/>
 

Мой радиоприемник

 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())
    }

}
}
 

Моя Деятельность По Настройке

 private lateinit var picker : MaterialTimePicker
private lateinit var calender : Calendar

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

private lateinit var alarmManager: AlarmManager
private lateinit var pendingIntent: PendingIntent

fajrEditTxt.setOnClickListener {
        showTimePicker()
    }
    fajrSalah.setOnCheckedChangeListener { buttonView, isChecked ->

        if (isChecked){

        }else{

        }
    }
private fun showTimePicker(){
    val  fajrtime = getSharedPreferences("saveSettingData", Context.MODE_PRIVATE)
    picker = MaterialTimePicker.Builder()
        .setTimeFormat(TimeFormat.CLOCK_12H)
        .setHour(fajrtime.getInt("fajrTimeHour", 0)) // I took it from a library I use
        .setMinute(fajrtime.getInt("fajrTimeMinutes",0)) // I took it from a library I use
        .setTitleText("حدد الموعد الذي تريدة")
        .build()

    picker.show(supportFragmentManager, "AdhanNotifacations")

    picker.addOnPositiveButtonClickListener {

        if(picker.hour > 12){

            fajrEditTxt.setHint(String.format("d",picker.hour - 12)   ":"
                      String.format("d", picker.minute)   " PM")
        }else{
            fajrEditTxt.setHint(String.format("d",picker.hour)   ":"
                      String.format("d", picker.minute)   " AM")
        }


        calender = Calendar.getInstance()
        calender[Calendar.HOUR_OF_DAY] = picker.hour
        calender[Calendar.MINUTE] = picker.minute
        calender[Calendar.SECOND] = 0
        calender[Calendar.MILLISECOND] = 0

        alarmFajr()

    }
}

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
    )
}
 

Ответ №1:

Ниже приведен пример байтового кода о том, как записывать данные в общие настройки:

 // Storing data into SharedPreferences
SharedPreferences sharedPreferences = getSharedPreferences("MySharedPref",MODE_PRIVATE);
 
// Creating an Editor object to edit(write to the file)
SharedPreferences.Editor myEdit = sharedPreferences.edit();
 
// Storing the key and its value as the data fetched from edittext
myEdit.putString("name", name.getText().toString());
myEdit.putInt("age", Integer.parseInt(age.getText().toString()));
 
// Once the changes have been made,
// we need to commit to apply those changes made,
// otherwise, it will throw an error
myEdit.commit();
 

Ниже приведен пример байтового кода о том, как считывать данные в общих настройках:

  // Retrieving the value using its keys the file name
// must be same in both saving and retrieving the data
SharedPreferences sh = getSharedPreferences("MySharedPref", MODE_APPEND);
 
// The value will be default as empty string because for
// the very first time when the app is opened, there is nothing to show
String s1 = sh.getString("name", "");
int a = sh.getInt("age", 0);
 
// We can then use the data
name.setText(s1);
age.setText(String.valueOf(a));
 

Комментарии:

1. Я знаю, что это java, но, когда вы говорите на котлине, вы всегда можете попытаться перевести или следовать логике моего кода

2. Я знаю, как использовать общие предпочтения, но я не знаю, как использовать их с менеджером оповещений, я не знаю, как сохранить значение уведомления