#java #android #android-studio #kotlin #alarmmanager
Вопрос:
У меня есть уведомление(с широковещательным приемником), диспетчер аварийных сигналов и временные проблемы. Все работает довольно хорошо, но я хочу сэкономить время, отведенное на перепалку, в соответствии с общими предпочтениями, поэтому, когда пользователь выбирает время из перепалки, он всегда будет отправлять уведомление в это время. Но перед этим я хочу установить время по умолчанию ( чтобы уведомление отправлялось пользователю в это время по умолчанию, пока пользователь не изменит его на выбранное время по времени) и сохранить его в том же ключе в общих настройках.
итак, чего я хочу, так это:
- Сохранение времени по умолчанию для общего предпочтения, чтобы оно каждый день уведомляло пользователя о времени по умолчанию.
- Сохранение времени, которое пользователь выбрал из 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. Я знаю, как использовать общие предпочтения, но я не знаю, как использовать их с менеджером оповещений, я не знаю, как сохранить значение уведомления