我想知道从程序代码启动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 = 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.test02的程序代码,其中“com.luaridaworks.smartwatch.bitmapcatcher”通常从应用程序启动.
解决方法:
您可以通过发送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);