Я создал проект Android, я использую Jetpack glight для создания виджета Android, мне нужно отобразить значение, которое хранится в хранилище данных настроек, в моем виджет Android, я могу обновить значение хранилища данных настроек из моего приложения Android, и это значение сохраняется даже после перезагрузки приложения. Затем я создал виджет Android из своего приложения, и он говорит, что для виджета Android активны несколько хранилищ данных. тот же файл: /data/user/0/com.codingwithnobody.myandroidproject/files/datastore/user_preferences.preferences_pb. Вам следует либо поддерживать хранилище данных как одноэлементное, либо подтвердить, что в одном и том же файле нет двух активных хранилищ данных (подтвердив, что область действия отменена).
Вот мой код
Я создал проект Android, я использую Jetpack glight для создания виджета Android, мне нужно отобразить значение, которое хранится в хранилище данных настроек, в моем виджет Android, я могу обновить значение хранилища данных настроек из моего приложения Android, и это значение сохраняется даже после перезагрузки приложения. Затем я создал виджет Android из своего приложения, и он говорит, что для виджета Android активны несколько хранилищ данных. тот же файл: /data/user/0/com.codingwithnobody.myandroidproject/files/datastore/user_preferences.preferences_pb. Вам следует либо поддерживать хранилище данных как одноэлементное, либо подтвердить, что в одном и том же файле нет двух активных хранилищ данных (подтвердив, что область действия отменена). Вот мой код [code]private const val USER_PREFERENCES = "user_preferences"
@Singleton class DataStoreRepository @Inject constructor(private val dataStore: DataStore) {
private object PreferencesKeys { val COUNTER_KEY = intPreferencesKey("counter_key") }
// Get the current counter value as a Flow val counterFlow: Flow = dataStore.data .map { preferences -> preferences[PreferencesKeys.COUNTER_KEY] ?: 0 // Default to 0 if no value is stored }
// Increment the counter value suspend fun incrementCounter() { dataStore.edit { preferences -> val currentValue = preferences[PreferencesKeys.COUNTER_KEY] ?: 0 preferences[PreferencesKeys.COUNTER_KEY] = currentValue + 1 } } }
class MyWidget: GlanceAppWidget() {
override val sizeMode = SizeMode.Exact
override suspend fun provideGlance(context: Context, id: GlanceId) {
provideContent {
GlanceTheme { val dataStore = PreferenceDataStoreFactory.create { context.preferencesDataStoreFile("user_preferences") } val size = LocalSize.current val dataStoreRepository = remember { DataStoreRepository(dataStore) } val counter by dataStoreRepository.counterFlow.collectAsState(initial = 0)
Scaffold( titleBar = { TitleBar(startIcon = ImageProvider(R.mipmap.ic_launcher), title = "Hello") }, backgroundColor = GlanceTheme.colors.widgetBackground ) { Column( modifier = GlanceModifier.background(color = Color.Red) .padding(30.dp) ) { Text( text = "Counter value is ${counter}", style = TextStyle( color = ColorProvider( color = Color(0xFF000000) ), fontSize = 12.sp, fontWeight = FontWeight.Medium ), modifier = GlanceModifier.clickable { actionStartActivity(activity = MainActivity::class.java) } )