我正在处理可穿戴设备,我的目标是下一个:
从我的手表中,我想按一个简单的按钮,它向手机发送一条简单的信息。但我想处理所有这些行为:
到目前为止,我还没有启动应用程序,但是我无法在额外消息 >意图。这是代码。
移动服务
public class MobileWearService extends WearableListenerService {
private static final String START_ACTIVITY = "/start_activity";
@Override
public void onMessageReceived(MessageEvent messageEvent) {
super.onMessageReceived(messageEvent);
String event = messageEvent.getPath();
String msg = new String(messageEvent.getData());
if (event.equals(START_ACTIVITY)) {
Intent intent = new Intent( this, MainActivity.class );
intent.putExtra("Data", msg);
intent.setFlags( Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity( intent );
}
}
}
但是,如果我使用广播将消息从服务发送到主要活动,则仅当应用程序启动且前景
时才有效 public class MobileWearService extends WearableListenerService {
private static final String START_ACTIVITY = "/start_activity";
@Override
public void onMessageReceived(MessageEvent messageEvent) {
super.onMessageReceived(messageEvent);
String event = messageEvent.getPath();
String msg = new String(messageEvent.getData());
if (event.equals(START_ACTIVITY)) {
broadcastIntent.setAction("com.me.project.wear.to.app");
broadcastIntent.putExtra("Data", msg);
broadcastIntent.putExtras(intent);
sendBroadcast(broadcastIntent);
}
}
}
启动器活动
private IntentFilter mIntentFilter = new IntentFilter("com.me.project.wear.to.app");
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null && intent.getAction().equals("com.me.project.wear.to.app")) {
String msg = intent.getStringExtra("Data");
}
}
};
@Override
protected void onResume() {
super.onResume();
registerReceiver(mReceiver, mIntentFilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(mReceiver);
}
所以我想结合这个事实来获取消息(我知道如何),但是无论应用程序的状态如何,都要通过此消息将其发送到启动器活动中。
答案 0 :(得分:1)
制作静态BroadcastReceiver
public class WatchMessageReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null &&
intent.getAction().equals("com.me.project.wear.to.app")) {
String msg = intent.getStringExtra("Data");
Intent launcherIntent = new Intent(context, LauncherActivity.class);
launcherIntent.putExtra("Data",msg);
startActivity(launcherIntent);
}
}
}
清单文件中的
<receiver android:name ="WatchMessageReceiver"
<intent-filter>
<action android:name="com.me.project.wear.to.app"/>
</intent-filter>
</receiver>
答案 1 :(得分:1)
在Sending and Syncing Data training中,有一个Handling Data Layer Events:
当您调用数据层API时,您可以在完成调用后收到调用状态。您还可以监听应用程序在Android Wear网络上的任何位置进行的数据更改所导致的数据事件。
由于数据层在手持设备和可穿戴设备上同步和发送数据,因此通常需要监听重要事件。此类事件的示例包括数据项的创建和消息的接收。
要监听数据层事件,您有两个选择:
- 创建一个扩展WearableListenerService的服务。
- 创建一个实现DataApi.DataListener的活动。
使用这两个选项,您可以覆盖有兴趣处理的事件的数据事件回调方法。
您可以使用WearableListenerService收听的一些事件如下:
onDataChanged()
:每当创建,删除或更改数据项对象时,系统都会在所有连接的节点上触发此回调。onMessageReceived()
:从节点发送的消息会在目标节点上触发此回调。onCapabilityChanged()
:当您的应用实例所宣传的功能在网络上可用时,该事件会触发此回调。如果您正在寻找附近的节点,则可以查询回调中提供的节点的isNearby()
方法。
根据相关的SO post:
WearableListenerService不会持续运行 - 它仅在发送新的消息/节点连接/数据层更改时启动,并且在没有其他消息时停止。
希望这有帮助。