我创建了一个Android Wear表盘,一个交互式表盘。在脸上我有一个网格区域,我在那里听一个onTapCpmmand:
else if (x >= x6 & x <= x9 & y >= (y5 - (gridYUnit / 2)) & y <= (y8 - (gridYUnit / 2))) {
activityLaunched = new Intent(MyWatchFace.this, ActivityLaunched.class);
activityLaunched .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(activityLaunched );
}
然后,新的活动接管了。在这个活动中,我有三个选项,基本上是ImageButtons,各自有onClickHandlers:
optionOne.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
confirmationIntent = new Intent(ActivityLaunched.this, ConfirmationActivity.class);
confirmationIntent .putExtra(ConfirmationActivity.EXTRA_ANIMATION_TYPE,
ConfirmationActivity.SEARCH_SERVICE);
confirmationIntent .putExtra(ConfirmationActivity.EXTRA_MESSAGE,
getString(R.string.option_one));
currentOption = "1";
broadcastIntent(currentOption);
startActivity(confirmationIntent );
ActivityLaunched.this.finish();
}
});
使用broadcastIntent处理广播:
public void broadcastIntent(String currentOption){
Intent optionUpdated = new Intent();
optionUpdated .setAction("com.example.packagename....");
optionUpdated .putExtra("Option", currentOption);
sendBroadcast(optionUpdated );
}
用户选择一个选项,活动关闭,控制流传递给我的broadcastReceiver。
现在,我已经设置了一个broadcastReceiver来在选择一个选项时做一个简单的toast。但是,除了显示祝酒之外,我无法再使用这些数据了。
在我的broadcastReceiver中:
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Option Updated." + intent.getStringExtra("Option"), Toast.LENGTH_LONG).show();
currentOption = intent.getStringExtra("Option");
sendOption .setAction("com.example.packagename....");
sendOption tion.putExtra("Option", currentOption );
context.sendBroadcast(sendOption );
Log.d(TAG, "THIS WORKS : " + currentOption );
}
在我的WatchFaceService中,我已经注册了接收器以及batteryinforecece和其他任何系统,正常情况下。我在broadcastReceiver中收到消息
再次回到我的WatchFaceService,我发现问题的地方,我没有收到任何更新:
optionUpdateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle results = getResultExtras(true);
String option = results.getString("Option");
Log.d(TAG, " NOTHING SHOWING HERE " + currentOption + option );
}
};
我尝试过使用setter和getter,这需要第二次启动活动才能获得真正的价值。
关于我做错了什么的任何想法?
我在这里尝试了其他一些答案和想法,以及其他外部资源。但正如我所使用的Android Wear一样,与操作系统一样易变,我尝试的任何东西,建议适用于Android,似乎对Android Wear无效。
谢谢,艾美特
答案 0 :(得分:2)
如果在其上还有其他活动,则无法保证您的表盘服务正在运行。它可能会被保留,但同样可能会被拆除。您可以尝试在WatchFaceService.onCreate()
和WatchFaceService.onDestroy()
中注册您的接收器,但这不是一种可以保证有效的方式。
相反,在Activity中将信息保存到SharedPreferences中,然后读取您在表面内的信息。创建表盘时,请从首选项中读取值(您还可以拥有首选项的侦听器,以便在表盘已经启动时更改时更新其更改)。
答案 1 :(得分:0)
我实际上设法解决了这个问题。
我创建了第二个广播接收器,将其传回表面,然后覆盖寄存器/取消注册方法来处理传输。
最初,当我注册了第二个接收器时,它是垃圾邮件日志文件并导致手表崩溃。我必须覆盖的原因是处理过滤器的传递,由于某些奇怪的原因,无法在watchfacecanvas.engine中完成。
无论如何,它现在工作正常,但感谢您的帮助