如何从移动设备启动Android Wear活动

4
我一直在开发一个项目,需要在手机上添加一个按钮来启动手表上的活动。我查看了SDK中的数据层示例,但无法使其正常工作。我设置了一个可穿戴监听器服务类,但它没有接收到任何消息。服务已添加到清单文件中,但仍然无法正常工作。我也有其他服务,并且我认为可能有太多的服务了。
在 Wear 手表上,是否必须运行一个活动才能启动另一个活动?我希望手表在收到消息之前不要运行任何内容,这是可能的吗?
此外,我的 Wear 模块的编辑配置设置应该是什么?(例如:不启动活动、启动默认活动或从活动启动)我只想在接收到消息时启动可穿戴设备。
如果有人能指导我正确的方向,我将不胜感激。
谢谢。
1个回答

6

移动设备

访问可穿戴设备数据层

MainActivity.java

public class MainActivity extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener{
private GoogleApiClient mGoogleApiClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Wearable.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();
    mGoogleApiClient.connect();
}

@Override
public void onConnected(Bundle bundle) {
    Log.d("GoogleApi", "onConnected: " + bundle);
}

@Override
public void onConnectionSuspended(int i) {
    Log.d("GoogleApi", "onConnectionSuspended: " + i);
}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
    Log.d("GoogleApi", "onConnectionFailed: " + connectionResult);
}

GetConnectedNodes

Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() {
                @Override
                public void onResult(NodeApi.GetConnectedNodesResult getConnectedNodesResult) {
                    for (Node node : getConnectedNodesResult.getNodes()) {
                        sendMessage(node.getId());
                    }
                }
            });

发送消息

public static final String START_ACTIVITY_PATH = "/start/MainActivity";


private void sendMessage(String node) {
        Wearable.MessageApi.sendMessage(mGoogleApiClient , node , START_ACTIVITY_PATH , new byte[0]).setResultCallback(new ResultCallback<MessageApi.SendMessageResult>() {
            @Override
            public void onResult(MessageApi.SendMessageResult sendMessageResult) {
                if (!sendMessageResult.getStatus().isSuccess()) {
                    Log.e("GoogleApi", "Failed to send message with status code: "
                            + sendMessageResult.getStatus().getStatusCode());
                }
            }
        });
    }

穿戴设备

实现消息监听器

WearDataLayerListenerService.java

public class WearDataLayerListenerService extends WearableListenerService {
public static final String START_ACTIVITY_PATH = "/start/MainActivity";
@Override
public void onMessageReceived(MessageEvent messageEvent) {
    super.onMessageReceived(messageEvent);
    if(messageEvent.getPath().equals(START_ACTIVITY_PATH)){
        Intent intent = new Intent(this , MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
}}

在清单文件中添加监听器服务

    <service
        android:name=".WearDataLayerListenerService">
        <intent-filter>
            <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
        </intent-filter>
    </service>

谢谢,aiur。我会尝试一下。 - Hal
@aiur是活动的路径,将会是完整路径吗? - Cyph3rCod3r
com.google.android.gms.wearable.BIND_LISTENER已被弃用,请使用com.google.android.gms.wearable.DATA_CHANGED和com.google.android.gms.wearable.MESSAGE_RECEIVED。 - Vytautas Berankis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接