1

プログラムコードから SmartWatch Extension を起動する方法が知りたいです。例えば、Intent などです。 先日 Google Play に SmartWatch のスクリプト言語を登録しました。2つのプログラムに分かれており、1つはSmartWatch Extension(BitmapCatcher)として登録され、もう1つはスマートフォンアプリ(Luarida)として登録されています。スクリプトはスマートフォンから開始します。ここでは、スクリプトの起動と同時に BitmapCatcher を起動したいと思います。LiveWareにIntnentを送れば、画面タッチなしでBitmapCatcherを起動できると思われますが、やり方がわかりません。

画面タッチなしでSmartWatch Extensionを起動するプログラムコードを教えてください。

(ソニーのモバイル サイトの Smart Extras ディスカッションでこの質問を書いたとき、このサイトで Jerker 氏に尋ねることをお勧めしました。)


ご説明を参考にテストしましたが、他のAndroidアプリからSmartWatch Extensionを起動することはできませんでした。また教えてください。
「Your.package.name」には何を書けばいいですか?
また、「HostAppPackageName」には何を書けばいいですか?

sendBroadcast で始まるのは BitmapCatcher です。このパッケージ名は「com.luaridaworks.smartwatch.bitmapcatcher」です。
テストプログラムでは、以下のように書きました。次のコメントに続きます。

package com.luaridaworks.test02;
 import com.sonyericsson.extras.liveware.aef.control.Control;
 import com.sonyericsson.extras.liveware.aef.registration.Registration;
 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
 public class Test02Activity extends Activity {
     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Intent intent = new Intent(Control.Intents.CONTROL_START_REQUEST_INTENT);
        intent.putExtra(Control.Intents.EXTRA_AEA_PACKAGE_NAME, "com.luaridaworks.smartwatch.bitmapcatcher");
        intent.setPackage("com.luaridaworks.smartwatch.bitmapcatcher");
        sendBroadcast(intent, Registration.HOSTAPP_PERMISSION);
     }
 } 

BitmapCatcher が起動しないので、Intent を以下のように書き換えてテストしました。

intent = new Intent(Control.Intents.CONTROL_START_REQUEST_INTENT);
intent.putExtra(Control.Intents.EXTRA_AEA_PACKAGE_NAME, "com.luaridaworks.smartwatch.bitmapcatcher");
intent.setPackage("com.sonyericsson.extras.liveware");
sendBroadcast(intent, Registration.HOSTAPP_PERMISSION);

同様に開始しませんでした。インテントは次のように書き換えてテストしました。

intent = new Intent(Control.Intents.CONTROL_START_REQUEST_INTENT);
intent.putExtra(Control.Intents.EXTRA_AEA_PACKAGE_NAME, "com.luaridaworks.smartwatch.bitmapcatcher");
intent.setPackage("com.luaridaworks.test02");
sendBroadcast(intent, Registration.HOSTAPP_PERMISSION);

同様に開始しませんでした。インテントは次のように書き換えてテストしました。

intent = new Intent(Control.Intents.CONTROL_START_REQUEST_INTENT);
intent.putExtra(Control.Intents.EXTRA_AEA_PACKAGE_NAME, "com.luaridaworks.test02");
intent.setPackage("com.luaridaworks.smartwatch.bitmapcatcher");
sendBroadcast(intent, Registration.HOSTAPP_PERMISSION);

同様に開始しませんでした。インテントは次のように書き換えてテストしました。

intent = new Intent(Control.Intents.CONTROL_START_REQUEST_INTENT);
intent.putExtra(Control.Intents.EXTRA_AEA_PACKAGE_NAME, "com.sonyericsson.extras.liveware");
intent.setPackage("com.luaridaworks.smartwatch.bitmapcatcher");
sendBroadcast(intent, Registration.HOSTAPP_PERMISSION);

同様に開始しませんでした。まだ成功していません。
通常アプリケーションプログラムから「com.luaridaworks.smartwatch.bitmapcatcher」を起動する com.luaridaworks.test02 というプログラムコードの例を教えてください。

4

1 に答える 1

2

SDK ユーティリティ クラスで定義されているように、START_REQUEST インテントを送信して、拡張機能の開始を要求します。これについては、 SDKの API 仕様の 6.1 章にも参照があります。

Intent intent = new Intent(Control.Intents.CONTROL_START_REQUEST_INTENT);
intent.putExtra(Control.Intents.EXTRA_AEA_PACKAGE_NAME, "your.package.name");
intent.setPackage(hostAppPackageName);
sendBroadcast(intent, Registration.HOSTAPP_PERMISSION);

参照 "your.package.name" は、拡張機能が登録されたときに拡張機能データベースに保存されたパッケージ名です。SDK の例を見ると、各拡張機能の例には、メソッドgetExtensionRegistrationConfigurationを持つ SampleRegistrationInformation があります。これは、登録が ContentProvider を介してデータベースに保存される場所です。次の行は、パッケージ名を保存します。

values.put(Registration.ExtensionColumns.PACKAGE_NAME, mContext.getPackageName());

あなたの例を見ると、あなたのパッケージ名は「com.luaridaworks.smartwatch.bitmapcatcher」だと思いますか?

hostAppPackageNameは、SmartWatch ホスト アプリケーションのパッケージ名です。このパッケージ名に関する情報は、ホスト アプリケーションから受け取るすべてのインテントと共に送信されます。SDK サンプルでは、​​後で使用するためにホスト アプリのパッケージ名をグローバル変数に保存するため、コード内でhostAppPackageNameを参照しています。これについては、この質問でもう少し詳しく説明します。ホスト アプリのパッケージ名をハード コードする場合は、com.sonyericsson.extras.smartwatch になります。ただし、将来変更される可能性があるため、しないことをお勧めします。

したがって、次の(ハードコーディングを使用)が機能するはずです。

Intent intent = new Intent(Control.Intents.CONTROL_START_REQUEST_INTENT);
intent.putExtra(Control.Intents.EXTRA_AEA_PACKAGE_NAME, "com.luaridaworks.smartwatch.bitmapcatcher");
intent.setPackage("com.sonyericsson.extras.smartwatch");
sendBroadcast(intent, Registration.HOSTAPP_PERMISSION);
于 2012-06-11T06:06:39.500 に答える