【发布时间】:2016-02-04 14:45:43
【问题描述】:
我创建了一个 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 );
}
mew 活动随后接管。在这个活动中,我有三个选项,基本上是 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 );
}
用户选择一个选项,活动关闭,控制流传递给我的广播接收器。
现在,我设置了一个广播接收器,以便在选择一个选项时进行简单的祝酒。但是,除了显示敬酒之外,我无法对这些数据做更多的事情。
在我的广播接收器中:
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 中,我已经像往常一样注册了接收器以及电池前接收器和任何其他系统接收器。我正在广播接收器中接收消息
再次回到我的 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 无效。
谢谢,埃米特
【问题讨论】:
-
很少有基本的 Android 代码(服务、广播接收器等)在 Wear 中不起作用。它只是下面的Android。但是回到你的问题......我认为你根本不应该在这里使用 BroadcastReceivers 。要么从你的活动直接发送一个意图到你的表盘服务,或者(可能更简单)使用像github.com/greenrobot/EventBus这样的库
-
@String 好的,谢谢,我会检查一下,我曾尝试通过意图发回数据,但我不得不重新启动活动以从前一个活动中检索数据。也许这是一个时间问题,但我无法弄清楚。但是,再次感谢,我会查看您的链接
标签: android android-activity service broadcastreceiver wear-os