Joinが一定時間スリープするとGCMコネクションが切れる件


スリープ後、時間が経つとプッシュ通知が来なくなる件 | マイネ公さんの掲示板 | マイネ王

 

ググったら先人の知恵があったのでメモ。取りあえずPNF no-Rootを5分間隔で設定して様子見中。5分に一度通信するのでバッテリー消費がどうなるか要確認。

 

joinでの連携がうまく行けば3、4日の稼働になる、といいな。at Kospet Prime

 

 

時計側からスマホ側の任意のアプリを起動させる

なんとなくセキリティ的に問題有りそうな気がしまするが。例えばAmazfit GTRなんかはサードパーティーのアプリを使うことで時計側のアプリを起動させたりマクロ動かしたりてきるです。これと似た様なことをGoogleのCloud Message(以下GCM)を利用して実装するッス。アイデアのメモ。

 

Automateには便利なことに、GCMのブロックが用意されており、GCMを送付/受信出来ます。従ってAndroid Smart Watch側からGCMを経由してスマホに指示を送ることで任意のアプリを起動できます。

 

 

送信側のフロー


f:id:diablo3cs:20200311151805j:image

 

フローの例。関数を設定し(上のフローではtest)、そこにYtube Musicのパッケージネームを格納してます。

 

Set Variable

 

アプリのパッケージ名などはApp startブロックなどで検索して探します。

 

Cloud Message Send

  • Proceed: Immediately
  • From Google Account: 自分のgoogleアカウント
  • To Google Account: 自分の奴
  • Cipher Account: 任意に設定する。設定しないと危険。
  • Payload: =test
  • 関数testをペイロードとしてGCMで送付する。

 

関数を指定する場合は右側のfxボタンを押して直接入れます。なお="  "のダブルカンマの間の文は文字として認識されます。関数の場合は" "不要。

 

受信側のフロー


f:id:diablo3cs:20200311153333j:image

 

Cloud Message Receive

  • To  Google Account: 自分の。
  • Cipher Account: 送信側と同じにする。
  • Output variable, Payload: payload 
  • ↑関数payloadにpayloadで送付された中身を格納する。

 

Toast Show

  • Message: =payload
  • 単に何が送られてきてか表示するだけ。

 

fork

  • 分岐を取ります。下のApp Startが実行に失敗しても受信が途切れないようにするため。

 

 

App start

  • Package: =payload
  • payloadのパッケージを実行する。

 

 

時計側からYtubeを再生/停止させるには

joinかwatch droidがあれば要らない気がしますが。上を応用します。

 


f:id:diablo3cs:20200311155536j:image

App StartでYtubeを指定。フロントにYtubeを持ってきます。Delayは起動の待ち時間用。

 

Interact

  • Proceed: Immediately
  • Action: Click
  • Package: ="com.google.android.apps.youtube.music"
  • UI element class: ="android.widget.ImageView"
  • UI element Text: 空欄にする。
  • UI element ID: ="com.google.android.apps.youtube.music:id/play_pause_replay_button"
  • ↑はYtube起動時に表示される下側再生バーの再生/停止ボタンを指定しています。

 

これらはInteractブロックのRecord Interactionから実際のボタンをクリックすることでそのボタンを指定できまする。Automateは神。ただしUI Element Textを指定すると再生のみ、停止のみしか動かなくなるので空欄とします。

 

んで、これをGCM通してスマホ側で実行させればスマホに触ることなくYtubeが再生出来るのじゃよ。たぶん。