【问题标题】:How to launch android wear activity from mobile如何从手机启动 android wear 活动
【发布时间】:2023-03-26 09:56:01
【问题描述】:

我一直在做一个项目,我需要手机上的一个按钮来启动手表上的活动。我一直在浏览 sdk 中的数据层示例,但无法使其正常工作。我设置了一个可穿戴监听服务类,但它没有接收任何消息。该服务已添加到清单中,但仍无法正常工作。我也有其他服务,我想我可能有太多服务。

在 Wear 手表上,是否必须运行某个 Activity 才能启动另一个 Activity?我希望手表在收到消息之前什么都不运行,这可能吗?

另外,磨损模块的编辑配置设置应该是什么? (例如,不启动活动、启动默认值或从活动启动)我只希望可穿戴设备在收到消息时启动。

如果有人能指出我正确的方向,将不胜感激。

谢谢。

【问题讨论】:

    标签: android android-intent android-activity wear-os


    【解决方案1】:

    手机

    访问可穿戴数据层

    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,我会试试的
    • @aiur 是活动的路径将是完整路径吗?
    • com.google.android.gms.wearable.BIND_LISTENER 已弃用,请改用 com.google.android.gms.wearable.DATA_CHANGED 和 com.google.android.gms.wearable.MESSAGE_RECEIVED
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多