Activity(端末)とExtension(グラス)間の通知
まず、ActivityとControlExtenstionとのやりとりはExtensionServiceを介して行われます
ControlExtenstionはExtensionService内でつくられるので問題ないのですが、Activity側はExtensionServiceを持っていないので持ってこなきゃダメ
Activity -> ControlExtensionへの通知
これはホストApp(MainActivity)でGPSを取得して、それをControlExtensionでGPSの情報を表示したい時などに役立ちます。
まずActivity内でExtensionServiceを持ってきます
public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (SampleExtensionService.Object == null) { Intent intent = new Intent(Registration.Intents .EXTENSION_REGISTER_REQUEST_INTENT); Context context = getApplicationContext(); intent.setClass(context, SampleExtensionService.class); context.startService(intent); } }
SampleExtensionService.Object
がない場合はSampleExtensionService内で
public static SampleExtensionService Object;
と宣言してください
そして、Extensionに通知したいタイミングで
if (HelloWorldExtensionService.Object != null) { HelloWorldExtensionService.Object.SendMessageToExtension("Hello SmartEyeglass"); }
を行えばExtensionServiceに対してメッセージが送られます。
もちろんExtensionServiceはsendMessageToExtensionを受け取った時の処理を記述する必要があります
まずはExtensionService内でControlExtenstionのインスタンスを作ります(作り方は自由)
そして、そのインスタンスのメソッドに対してメッセージを送ります
public void SendMessageToExtension (String message) { // ControlExtensionにメッセージを送るメソッド SampleControlExtenstion.DisplayMessage(message); }
ここではDisplayMessageというメソッドをSampleControlExtenstion内に作りましたが、なんでもいいです。もちろん引数はStringじゃなくてもOK
ExtensionServiceを経由することを忘れず注意すれば意外と簡単にできましたね
ControlExtension -> Activity
これもExtensionServiceを経由するので頑張るのはExtensionService
ExtenstionService内でインテントを作成して、その中にメッセージを埋め込みます
・ExtensionService
public void sendMessageToActivity(final String message) { Intent intent = new Intent(); intent.setClass(getBaseContext(), HelloWorldActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("Message", message); startActivity(intent); }
・Activity
// Intent内のExtras()を取得する Bundle extras = getIntent().getExtras(); if (extras != null) { String message = extras.getString("Message"); Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); }