Обновление значения виджета
Задача: каждый раз через 24 часа изменять значение в виджете. Проблема: не знаю, как поочередно подставлять значения в виджет. Подробнее: в MainActivity я записываю 7 чисел из EditText'ов в память с помощью библиотеки Paper. В сервисе, который отвечает за обновление значения виджета я пытаюсь прописать логику, которая поочередно подставляла бы значения. Мне нужно считывать, какое значение в виджете или что-то по типу того. Пример: я ввел в 3 текстовых поля 3 разных числа. При запуске виджета должно отобразиться первое число. Через 24 часа второе число, еще через 24 часа третье число. Я пытался это реализовать с помощью переменных-флажков, но ведь я присваиваю им значения в коде, а при повторном запуске кода это значение заново присваивается. Есть у кого идеи? Буду очень признателен. Ниже код (немного грязный, извиняюсь :)):
MainActivity.ky
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initCreate()
initFuncs()
}
private fun initCreate() {
APP_ACTIVITY = this
Paper.init(this)
checkData()
}
private fun initFuncs() {
startBtn.setOnClickListener {
writeData()
startBroadcast()
}
stopBtn.setOnClickListener {
deleteData()
stopBroadcast()
}
}
private fun stopBroadcast() {
stopService(Intent(this, MyService::class.java))
}
private fun startBroadcast() {
val intent = Intent(this, MyService::class.java)
val pendingIntent =
PendingIntent.getService(applicationContext, 1, intent, PendingIntent.FLAG_IMMUTABLE)
val alarmManager = getSystemService(ALARM_SERVICE) as AlarmManager
alarmManager.setInexactRepeating(
AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(),
AlarmManager.INTERVAL_DAY,
pendingIntent
)
Toast.makeText(this, "Alarm will ring after every 15 minutes interval", Toast.LENGTH_LONG)
.show()
}
private fun updateWidgetData(text: String) {
val context: Context = this
val appWidgetManager = AppWidgetManager.getInstance(context)
val remoteViews = RemoteViews(context.packageName, R.layout.my_widget)
val thisWidget = ComponentName(context, MyWidget::class.java)
remoteViews.setTextViewText(R.id.appwidgetText, text)
appWidgetManager.updateAppWidget(thisWidget, remoteViews)
}
private fun checkData() {
if (Paper.book().read<String>("one") != "") {
val one = Paper.book().read<String>("one")
enterNumberOne.setText(one)
}
if (Paper.book().read<String>("two") != "") {
val two = Paper.book().read<String>("two")
enterNumberTwo.setText(two)
}
if (Paper.book().read<String>("three") != "") {
val three = Paper.book().read<String>("three")
enterNumberThree.setText(three)
}
if (Paper.book().read<String>("four") != "") {
val four = Paper.book().read<String>("four")
enterNumberFour.setText(four)
}
if (Paper.book().read<String>("five") != "") {
val five = Paper.book().read<String>("five")
enterNumberFive.setText(five)
}
if (Paper.book().read<String>("six") != "") {
val six = Paper.book().read<String>("six")
enterNumberSix.setText(six)
}
if (Paper.book().read<String>("seven") != "") {
val seven = Paper.book().read<String>("seven")
enterNumberSeven.setText(seven)
}
}
private fun deleteData() {
Paper.book().delete("one")
enterNumberOne.setText("")
Paper.book().delete("two")
enterNumberTwo.setText("")
Paper.book().delete("three")
enterNumberThree.setText("")
Paper.book().delete("four")
enterNumberFour.setText("")
Paper.book().delete("five")
enterNumberFive.setText("")
Paper.book().delete("six")
enterNumberSix.setText("")
Paper.book().delete("seven")
enterNumberSeven.setText("")
updateWidgetData("")
}
private fun writeData() {
Paper.book().write("one", enterNumberOne.text.toString())
Paper.book().write("two", enterNumberTwo.text.toString())
Paper.book().write("three", enterNumberThree.text.toString())
Paper.book().write("four", enterNumberFour.text.toString())
Paper.book().write("five", enterNumberFive.text.toString())
Paper.book().write("six", enterNumberSix.text.toString())
Paper.book().write("seven", enterNumberSeven.text.toString())
val text = enterNumberOne.text.toString()
updateWidgetData(text)
}
}
MyService.kt (оставил следы своих тщетных попыток)
lass MyService : Service() {
private var count = 0
private var subCount = 0
private lateinit var one: String
private lateinit var two: String
private lateinit var three: String
private lateinit var four: String
private lateinit var five: String
private lateinit var six: String
private lateinit var seven: String
override fun onCreate() {
super.onCreate()
Paper.init(this)
checkData()
when(Paper.book("main").read<Int>("sub")) {
2 -> {
updateWidgetData("two")
}
1 -> {
updateWidgetData("one")
Paper.book("main").write("sub", 2)
}
}
pasteData()
}
private fun pasteData() {
when (count) {
1 -> {
updateWidgetData(one)
}
2 -> {
}
3 -> {
if (subCount == 1) {
updateWidgetData(one)
subCount = 3
}
if (subCount == 2) {
updateWidgetData(two)
subCount--
}
if (subCount == 3) {
updateWidgetData(one)
subCount--
}
}
}
}
private fun checkData() {
if (Paper.book().read<String>("one") != "") {
one = Paper.book().read<String>("one").toString()
count++
}
if (Paper.book().read<String>("two") != "") {
two = Paper.book().read<String>("two").toString()
count++
}
if (Paper.book().read<String>("three") != "") {
three = Paper.book().read<String>("three").toString()
count++
}
if (Paper.book().read<String>("four") != "") {
four = Paper.book().read<String>("four").toString()
count++
}
if (Paper.book().read<String>("five") != "") {
five = Paper.book().read<String>("five").toString()
count++
}
if (Paper.book().read<String>("six") != "") {
six = Paper.book().read<String>("six").toString()
count++
}
if (Paper.book().read<String>("seven") != "") {
seven = Paper.book().read<String>("seven").toString()
count++
}
}
private fun updateWidgetData(text: String) {
val context: Context = this
val appWidgetManager = AppWidgetManager.getInstance(context)
val remoteViews = RemoteViews(context.packageName, R.layout.my_widget)
val thisWidget = ComponentName(context, MyWidget::class.java)
remoteViews.setTextViewText(R.id.appwidgetText, text)
appWidgetManager.updateAppWidget(thisWidget, remoteViews)
}
override fun onBind(intent: Intent?): IBinder? {
return null
}
}