【问题标题】:Android Wear - Gradle dependency issues "Cannot resolve symbol"Android Wear - Gradle 依赖问题“无法解析符号”
【发布时间】:2014-07-22 16:10:52
【问题描述】:

我按照说明 here 在 Android Studio 中构建了一个带有移动和穿戴组件的简单应用。我的移动活动中有以下代码,试图调用磨损模块中的 MyWearActivity:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);
    Intent intent = new Intent(this, MyWearActivity.class);
    startActivity(intent);
}

我的移动 build.gradle 文件具有以下依赖项:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
wearApp project(':wear')
compile 'com.android.support:appcompat-v7:20.+'
compile 'com.google.android.gms:play-services-wearable:+'
compile 'com.google.android.support:wearable:+'
}

但是,我收到以下错误“无法解析符号 MyWearActivity”,尝试从 Android Studio 运行“移动”运行配置。我认为 wearApp project(':wear') 位会处理移动依赖磨损,但似乎没有。谁能确定我哪里出错了?谢谢

【问题讨论】:

    标签: android android-studio android-gradle-plugin wear-os


    【解决方案1】:

    您应该改用 MessageAPI 向您的 Wear 设备发送消息。您可以在此处了解如何操作:https://developer.android.com/training/wearables/data-layer/index.html 这是一个示例(假设您已经创建并连接了GoogleApiClient

    private void fireMessage(final String message) {
        // Send the RPC
        PendingResult<NodeApi.GetConnectedNodesResult> nodes = Wearable.NodeApi.getConnectedNodes(apiClient);
        nodes.setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() {
            @Override
            public void onResult(NodeApi.GetConnectedNodesResult result) {
                for (int i = 0; i < result.getNodes().size(); i++) {
                    Node node = result.getNodes().get(i);
                    String nName = node.getDisplayName();
                    String nId = node.getId();
                    Log.d(TAG, "Node name and ID: " + nName + " | " + nId);
    
                    PendingResult<MessageApi.SendMessageResult> messageResult = Wearable.MessageApi.sendMessage(apiClient, node.getId(),
                            message, null);
                    messageResult.setResultCallback(new ResultCallback<MessageApi.SendMessageResult>() {
                        @Override
                        public void onResult(MessageApi.SendMessageResult sendMessageResult) {
                            Status status = sendMessageResult.getStatus();
                            Log.d(TAG, "Status: " + status.toString() + " Msg: " + message);
                            if (status.getStatusCode() != WearableStatusCodes.SUCCESS) {
                                //alertButton.setProgress(-1);
                                Toast.makeText(getApplicationContext(), "Tap to retry. Alert not sent :(", Toast.LENGTH_LONG).show();
                            }
                        }
                    });
                }
            }
        });
    }
    

    然后,在您的穿戴模块中,您应该实现一个侦听器,或者更好的是,一个带有onMessageReceived 方法的WearableListenerService 来响应该消息。例如,您可以让该服务根据消息触发 Intent 以启动 Activity,或构建通知以在设备上显示。这是构建通知的指南https://developer.android.com/training/wearables/notifications/index.html

    【讨论】:

      【解决方案2】:

      不,将 Wear 模块和 Mobile 模块视为两个完全不同的 apk 或应用程序(因为它们是)。您不会直接从移动应用程序调用 Wea​​r 模块中的活动。穿戴应用程序是通过用户交互启动的。你到底想做什么?

      好的,根据您在下面的评论,问题仍然是您无法从移动应用调用 Wea​​rActivity,因为它位于未链接在一起的不同库/应用中。 Nickjm 的答案中的示例代码是一个好的开始。

      【讨论】:

      • 当用户在Mobile端按下按钮时,我希望Wear端向手表AlarmManager注册一些通知。所以在我的最终代码中,我不想从移动端调用一个wear Activity,而是一个wear Service。
      猜你喜欢
      • 2015-12-19
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 2023-03-29
      • 2019-04-24
      • 2013-12-12
      • 1970-01-01
      相关资源
      最近更新 更多