母艦スマホが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に登録されているかどうかに関わらず,毎回実行するのですが, 多重登録のような状況にはなっておらず,問題はなさそうです.

kamolandをフォローしましょう


© 2019 KMIソフトウェア