如何从程序代码启动SmartWatch Extension?

时间:2012-06-10 19:27:25

标签: android sony sony-smartwatch

我想知道从程序代码启动SmartWatch Extension的方法。例如,意图等。   我前几天在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”通常从应用程序启动。

1 个答案:

答案 0 :(得分:2)

您可以通过发送SDK实用程序类中定义的START_REQUEST intent来请求启动扩展。在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中的示例,每个扩展示例都有一个SampleRegistrationInformation,其方法为 getExtensionRegistrationConfiguration 。这是通过ContentProvider将注册存储到数据库的位置。以下行存储您的包名称。

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

我认为,通过查看您的示例,您的软件包名称是“com.luaridaworks.smartwatch.bitmapcatcher”?

hostAppPackageName 是SmartWatch主机应用程序的包名称。有关此程序包名称的信息将与您从宿主应用程序收到的每个意图一起发送。在SDK示例中,我们将主机应用程序包名称存储在稍后要使用的全局变量中,因此代码中的引用将引用到 hostAppPackageName 。我在this question中谈了这个问题。如果要对主机应用程序包名称进行硬编码,请执行以下操作: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);