母艦スマホがAndroid 8.0 (Oreo)以上の場合に,Sony SmartWatch2にアプリとして登録されない現象への対策
Android8.0 (Oreo)以上でSW2にアプリが登録されない現象
拙作のAndroidアプリ「地図ロイド」で,
母艦スマホがAndroid 8.0以上の場合に,
Sony SmartWatch2(SW2)にアプリとして登録されないという現象が発生しました.
この原因と対策について書きます.
原因
原因ですが,targetSdk=26 (Android 8.0)からの節電機能?によって,
宛先無指定(=暗黙的)のブロードキャストインテントをアプリ停止中(=manifest記述しか使えない)に受信できなくなったためでした.
SmartWatch2は独自フレームワークで作動しており,
SW2ホストアプリから各SW2アプリへの通信にブロードキャストインテントを多用しているのですが,
ほとんどは宛先アプリを指定して(=明示的)送信されています.
そのため,この影響は免れています.
しかし,SW2対応アプリに対して登録を要求するためのインテント
com.sonyericsson.extras.liveware.aef.registration.EXTENSION_REGISTER_REQUEST
については,宛先が無いようです.
確かに原理的に,アプリが未登録のこの段階では宛先をつけようがありません.
そのため,target26以上のSW2対応アプリはこのインテントを受信できず,
「自分自身をSW2に登録する」という動作を,永遠に行わないという状況でした.
対策
アプリ起動時に,「このインテントを受信した」と仮定した動作を行うようにしました.
そうすると,アプリを起動した時点でSW2に登録されるようになりました.
アプリがSW2に登録されているかどうかに関わらず,毎回実行するのですが,
多重登録のような状況にはなっておらず,問題はなさそうです.