10

Il titolo lo somma. La stessa domanda è here. Pubblicando su SO per vedere se posso ricevere aiuto. Ho anche creato un almost minimal project per dimostrare il problema che sto affrontando, quindi i collegamenti che seguono puntano al pezzo di codice menzionato.Non si ricevono i callback AppMessage quando si invia un messaggio all'interno di un evento di connessione bluetooth

Niente di speciale su quello che sto facendo attualmente:

  1. mio watchface è notified che la connessione bluetooth con il telefono è in su, utilizzando .pebble_app_connection_handler.
  2. In quello bluetooth callback ho impostato, I send a message to the phone utilizzando app_message_outbox_send(). Quando la connessione BT è attiva, ovviamente.
  3. La mia app per Android ha uno BroadcastReceiver che ascolta questi messaggi e calls an IntentService.
  4. Questo IntentServicecalculates the data, pushes it to the watch e sets itself to run again dopo un po 'di tempo.

Cosa mi aspetto:

  1. Quando la connessione BT è in su, il gestore di connessione da chiamare.
  2. app_message_outbox_send() restituisce un valore che indica se l'inizializzazione del messaggio ha avuto errori. Normalmente, questo è APP_MSG_OK, ma può essere APP_MSG_BUSY, e ne sono perfettamente consapevole.
  3. Il callback dei messaggi dell'app (app_message_register_inbox_received e gli amici) viene chiamato per indicare se il processo asincrono di invio del messaggio al telefono ha funzionato davvero. Questo è indicato nel docs.

Quello che sto vedendo:

I passi previsti accadere quando il watchface viene caricato, perché ho innescare l'aggiornamento manualmente. Tuttavia, quando l'aggiornamento viene attivato da un evento di connessione BT, si verificano i passaggi 1 e 2 previsti, ma non il passaggio 3.

Questo è particolarmente aggravante quando ricevo APP_MSG_OK nel passaggio 2, perché dovrei ragionevolmente aspettarmi che tutto l'orologio è andato bene, e dovrei prepararmi a ricevere qualcosa di all'interno dei callback dei messaggi dell'app. Fondamentalmente, mi è stato detto dai dottori di aspettare una chiamata che sia mai.

Questo accade il 100% del tempo.

Grazie per qualsiasi aiuto. Ho un'altra soluzione che funziona, usando l'orologio per tenere traccia dell'intervallo di aggiornamento, ma credo che questo mi consenta di risparmiare più batteria sfruttando le recenti funzionalità di Android.

risposta

3

Da documentazione:

Per anche essere notificato di eventi di connessione relativi a qualsiasi PebbleKit compagno Apps associato con questo watchapp, anche assegnare al gestore il pebblekit_connection_handler campo. Questo verrà chiamato quando lo stato della connessione all'app PebbleKit cambia.

forse è quello che ti serve

+0

“consente di determinare se l'orologio è collegato al cellulare app_ _Pebble sottoscrivendo i' pebble_app_connection_handler' [...] permette anche di determinare se l'orologio sassolino può stabilire una connessione a un'app_PebbleKit companion iscrivendosi a 'pebblekit_connection_handler' [...] ciò restituirà _true per Android_ ogni volta che viene stabilita una connessione con l'app mobile _Pebble (poiché i messaggi PebbleKit vengono instradati tramite l'app Android)" Origine: https: //developer.pebble.com/docs/c/Foundation/Event_Service/ConnectionService/ – davidcesarino

+0

Inoltre, ho notato che 'connection_service_peek_pebblekit_connection' restituisce' true' anche quando il bluetooth è s off o lascio l'orologio disconnesso nell'app Pebble. Solo 'connection_service_peek_pebble_app_connection' sembra avere alcun effetto. – davidcesarino