Android 从wear启动应用程序并获取消息,而不管应用程序的状态如何
我正在处理可穿戴设备,我的目标是: 在我的手表上,我想按下一个简单的按钮,向手机发送一条简单的信息。但我想处理所有这些行为:Android 从wear启动应用程序并获取消息,而不管应用程序的状态如何,android,android-intent,broadcastreceiver,wear-os,Android,Android Intent,Broadcastreceiver,Wear Os,我正在处理可穿戴设备,我的目标是: 在我的手表上,我想按下一个简单的按钮,向手机发送一条简单的信息。但我想处理所有这些行为: 当移动应用程序尚未启动时,启动该应用程序并传递来自wear的消息,该消息可在launcher活动中处理 当移动应用程序在后台启动时,只需将其置于前台并处理来自wear的消息,即可在launcher活动中处理 当移动应用程序启动并处于前台时,只需在launcher活动中处理消息即可 到目前为止,我可以在应用程序尚未启动时启动它,但我无法在包含在意图中的启动程序活动中获得
- 当移动应用程序尚未启动时,启动该应用程序并传递来自wear的消息,该消息可在launcher活动中处理
- 当移动应用程序在后台启动时,只需将其置于前台并处理来自wear的消息,即可在launcher活动中处理
- 当移动应用程序启动并处于前台时,只需在launcher活动中处理消息即可
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);
}
因此,我想结合这一事实从wear(我知道如何)获取消息,但不管应用程序的状态如何,都要将此消息传递到launcher活动中获取它。只需创建静态广播接收器即可
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>
只需制作静态广播接收器
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>
在中,有一个:
当您对数据层API进行调用时,可以在调用完成时接收调用的状态。您还可以监听数据事件,这些事件是由您的应用程序在Android Wear网络上的任何位置进行的数据更改引起的
侦听数据层事件
由于数据层通过手持设备和可穿戴设备同步和发送数据,因此通常需要监听重要事件。此类事件的示例包括创建数据项和接收消息
要侦听数据层事件,有两个选项:
- 创建扩展WearableListenerService的服务
- 创建一个实现DataApi.DataListener的活动
使用这两个选项,可以覆盖您感兴趣处理的事件的数据事件回调方法
您可以侦听以使用的某些事件如下所示:
- :无论何时创建、删除或更改数据项对象,系统都会在所有连接的节点上触发此回调
- :从节点发送的消息将触发目标节点上的此回调
- :当应用程序实例在网络上发布的功能可用时,该事件将触发此回调。如果要查找附近的节点,可以查询回调中提供的节点的方法
根据有关条例:
WearableListenerService不会持续运行—它仅在发送新消息/节点连接/数据层更改时启动,在没有更多消息时停止
希望这有帮助。在中,有一个:
当您对数据层API进行调用时,可以在调用完成时接收调用的状态。您还可以监听数据事件,这些事件是由您的应用程序在Android Wear网络上的任何位置进行的数据更改引起的
侦听数据层事件
由于数据层通过手持设备和可穿戴设备同步和发送数据,因此通常需要监听重要事件。此类事件的示例包括创建数据项和接收消息
要侦听数据层事件,有两个选项:
- 创建扩展WearableListenerService的服务
- 创建一个实现DataApi.DataListener的活动
使用这两个选项,可以覆盖您感兴趣处理的事件的数据事件回调方法
您可以侦听以使用的某些事件如下所示:
- :无论何时创建、删除或更改数据项对象,系统都会在所有连接的节点上触发此回调
- :从节点发送的消息将触发目标节点上的此回调
- :当应用程序实例在网络上发布的功能可用时,该事件将触发此回调。如果要查找附近的节点,可以查询回调中提供的节点的方法
根据有关条例:
WearableListenerService不会持续运行—它仅在发送新消息/节点连接/数据层更改时启动,在没有更多消息时停止
希望这会有所帮助。但是要从launcher活动中检索数据消息,我想它应该在resume方法中,并通过getIntent()进行,对吗?因为现在由于静态方式,广播启动良好,但我无法获取数据,因为捆绑包是空的,这取决于它。如果启动程序活动启动模式为“singleTask”,则必须在启动程序活动中重写onNewIntent()。否则您可以在onCreate中执行getIntent()(如果再次创建启动程序活动),好的,我会处理它。感谢您的帮助。但是要从launcher活动中检索数据消息,我想它应该在resume方法中,并通过getIntent()进行,对吗?因为现在由于静态方式,广播启动良好,但我无法获取数据,因为捆绑包是空的,这取决于它。如果启动程序活动启动模式为“singleTask”,则必须在启动程序活动中重写onNewIntent()。否则您可以在onCreate中执行getIntent()(如果再次创建启动程序活动),好的,我会处理它。谢谢你的帮助。这似乎也是一个很好的处理方法!谢谢你们的帮助,伙计们!这似乎也是一个很好的处理方法!谢谢你们的帮助,伙计们!