По какой-то причине мое приложение для WearOS обновляется только при первом запуске. После этого он никогда больше не запрашивает новые данные из API...
Что мешает опросу проводиться более одного раза? Это должно происходить каждую минуту/60 секунд. Я поместил его внутри тега службы манифеста Android и указал 60 для значения интервала UPDATE_PERIOD_SECONDS. Он должен производить опрос, но больше никогда не проводит опрос, только при запуске.
Нужно ли что-то изменить в реальном коде службы? Я не могу найти подходящую документацию, в которой показано, как обновить интервал или разрешить его обновление через интервал...
По какой-то причине мое приложение для WearOS обновляется только при первом запуске. После этого он никогда больше не запрашивает новые данные из API... [code]@AndroidEntryPoint class CustomTextComplicationService : SuspendingComplicationDataSourceService() {
@Inject lateinit var dataStore: DataStore private val preferences by lazy { UserPreferencesRepository(dataStore).getPreferences() }
private fun openScreen(): PendingIntent? { val intent = Intent(this, MainActivity::class.java) intent.putExtra("$packageName.${Request.CUSTOM_TEXT.name}", true)
private suspend fun fetchApiData(): String? { Log.d(TAG, "POLLING"); val client = OkHttpClient.Builder() .sslSocketFactory(createTrustAllSslSocketFactory(), createTrustAllTrustManager()) .hostnameVerifier(createTrustAllHostnameVerifier()) .build()
val apiUrl = "https://hello.com/data/" val userApiKey = "KEY" // API key with special characters val userApiSecret = "SECRET" // Secret key val userId = "1"
// URL encode the parameters val encodedApiKey = URLEncoder.encode(userApiKey, StandardCharsets.UTF_8.toString()) val encodedApiSecret = URLEncoder.encode(userApiSecret, StandardCharsets.UTF_8.toString()) val encodedUserId = URLEncoder.encode(userId, StandardCharsets.UTF_8.toString())
// Construct the URL val url = "$apiUrl?userapikey=$encodedApiKey&userapisecret=$encodedApiSecret&userid=$encodedUserId"
val request = OkHttpRequest.Builder() .url(url) .build()
return try { val response = withContext(Dispatchers.IO) { client.newCall(request).execute() } if (response.isSuccessful) { val responseBody = response.body?.string() ?: "" val json = JSONObject(responseBody) json.getString("valueShortened"); } else { Log.w(TAG, "API request failed: ${response.code}") null } } catch (e: Exception) { Log.e(TAG, "Error fetching data from API", e) null } }
// Custom method to trust all certificates (bypass SSL verification) private fun createTrustAllSslSocketFactory(): javax.net.ssl.SSLSocketFactory { val sslContext = SSLContext.getInstance("TLS") val trustAllCerts = arrayOf(createTrustAllTrustManager()) sslContext.init(null, trustAllCerts, java.security.SecureRandom()) return sslContext.socketFactory }
private fun createTrustAllTrustManager(): X509TrustManager { return object : X509TrustManager { // Return an empty array instead of null override fun getAcceptedIssuers(): Array = arrayOf()
override fun checkClientTrusted(chain: Array?, authType: String?) { // Accept all client certificates }
override fun checkServerTrusted(chain: Array?, authType: String?) { // Accept all server certificates } } }
// Create a HostnameVerifier that accepts all hostnames private fun createTrustAllHostnameVerifier(): HostnameVerifier { return HostnameVerifier { _, _ -> true } }
override suspend fun onComplicationRequest(request: ComplicationRequest): ComplicationData? { val text = fetchApiData() ?: return null val title: String = preferences.first().customTitle
val complicationTitle = if (title.isBlank()) null else PlainComplicationText.Builder(text = title).build()
[/code] Что мешает опросу проводиться более одного раза? Это должно происходить каждую минуту/60 секунд. Я поместил его внутри тега службы манифеста Android и указал 60 для значения интервала UPDATE_PERIOD_SECONDS. Он должен производить опрос, но больше никогда не проводит опрос, только при запуске. Нужно ли что-то изменить в реальном коде службы? Я не могу найти подходящую документацию, в которой показано, как обновить интервал или разрешить его обновление через интервал...