Как мне сделать, чтобы SmartWatch Extension запускался из программного кода?

Я хочу узнать способ запуска SmartWatch Extension из программного кода. Например, Intent и т. д. На днях я зарегистрировал скриптовый язык для SmartWatch в Google Play. Он делится на две программы: одна регистрируется как расширение SmartWatch (BitmapCatcher), а другая регистрируется как приложение для смартфона (Luarida). Скрипт запускается со смартфона. Здесь я хочу запустить BitmapCatcher одновременно с запуском скрипта. Способ не понятен, хотя думается, что BitmapCatcher можно запустить без касания экрана, если Intnent отправлен в LiveWare.

Научите, пожалуйста, программный код, в котором SmartWatch Extension запускается без касания экрана.

(Это было рекомендовано задать г-ну Джеркеру на этом сайте, когда я задавал этот вопрос в обсуждении Smart Extras на мобильном сайте Sony.)


Расширение SmartWatch не удалось запустить из других приложений Android, хотя оно было протестировано со ссылкой на ваше объяснение. Пожалуйста, научите еще раз.
Что мне написать в "Your.package.name"?
Более того, что я должен написать в "HostAppPackageName"?

Тот, который начинается с sendBroadcast это БитмапКэтчер. Имя этого пакета "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 был переписан следующим образом и протестирован.

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 был переписан следующим образом и протестирован.

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 был переписан следующим образом и протестирован.

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.test02, в котором "com.luaridaworks.smartwatch.bitmapcatcher" обычно запускается из прикладной программы.


person tarosay    schedule 10.06.2012    source источник


Ответы (1)


Вы запрашиваете запуск своего расширения, отправляя намерение START_REQUEST, как определено в служебных классах SDK. Об этом также упоминается в главе 6.1 спецификации API SDK.

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, каждый пример расширения имеет SampleRegistrationInformation с методом getExtensionRegistrationConfiguration. Здесь регистрация сохраняется в базе данных через 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);
person Jerker    schedule 11.06.2012
comment
I'm sorry. В связи с тем, что в комментарии некорректно отображался код программы, комментарий был написан следующим образом: Ответ. - person tarosay; 13.06.2012
comment
Спасибо большое. Это удалось в начале, когда код был написан по вашему объяснению. Я понимаю, что это com.sonyericsson.extras.smartwatch, и в будущем они могут быть изменены. Однако из-за того, что генерируется операция странная только одна, она пишет. Он генерируется во время зарядки SmartWatch. (Далее продолжается) - person tarosay; 13.06.2012
comment
CONTROL_START_REQUEST_INTENT передается в SmartWatch при оплате. Затем запускается целевое расширение SmartWatch. Далее передается CONTROL_STOP_REQUEST_INTENT. Затем расширение SmartWatch завершается и возвращается в режим зарядки. Даже если передается CONTROL_START_REQUEST_INTENT, после этого он никогда не запускается. Необходимо заставить их проснуться, нажав жесткую кнопку, чтобы начать снова. Эта спецификация не является проблемой для меня. - person tarosay; 13.06.2012