1

我想知道从程序代码中启动 SmartWatch Extension 的方法。比如 Intent 等。前几天我在 Google Play 中注册了 SmartWatch 的脚本语言。它分为两个程序,一个注册为SmartWatch Extension(BitmapCatcher),另一个注册为智能手机应用程序(Luarida)。脚本从智能手机开始。在这里,我想在启动脚本的同时启动 BitmapCatcher。虽然认为如果将 Intnent 发送到 LiveWare,BitmapCatcher 可以在不触摸屏幕的情况下启动,但该方式不理解。

请教在没有触摸屏幕的情况下启动 SmartWatch Extension 的程序代码。

(当我在索尼移动网站的 Smart Extras 讨论中写这个问题时,建议在这个网站上问 Jerker 先生。)


SmartWatch Extension 无法从其他 Android 应用程序启动,尽管它参考您的解释进行了测试。请再教。
我应该在“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 被重写如下并进行了测试。

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”通常是从应用程序启动的。

4

1 回答 1

2

您通过发送 START_REQUEST 意图来请求启动您的扩展,如 SDK 实用程序类中所定义。在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 回答