【问题标题】:Notification on Android Wear is working but Data Layer isn'tAndroid Wear 上的通知有效,但数据层无效
【发布时间】:2014-11-11 23:54:00
【问题描述】:

我正在开发一个包含一些可穿戴功能的 Android 应用。我有一些使用 Wea​​rableExtender 的通知,它们工作正常。但是当我尝试使用 Data Layer Api 时它不起作用。

我使用了这篇文章的答案中提出的代码:Android Wear Watchface Settings on host,但从未调用过 onDataChanged(DataEventBuffer dataEvents)。我正在使用 Android 模拟器进行移动和观看。

这是我在手表的 LogCat 上得到的:

11-10 05:43:44.777: D/DataItems(1333): inserted data item row 60 for DataItemRecord
[es.example.rebeca.prueba,10b8f01e736f2a1276b2bbf41a6c6dd18c005e65,DataItemInternal
[f702125c, dataSz=65, host=db03afd0-746e-48ad-8b0d-98ff360bf672, path=/SAMPLE, numAssets=0],
db03afd0-746e-48ad-8b0d-98ff360bf672,seqId=13136,assetsAreReady=false]

手表上似乎收到了带有适当路径 (path=/SAMPLE) 的东西。但是,我看不到任何消息(我放了一些日志来检查数据是否到达手表)。

任何提示将不胜感激。

编辑

我在手机端使用的代码:

public class MainActivity extends Activity {
    private GoogleApiClient mGoogleApiClient;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       mGoogleApiClient = new GoogleApiClient.Builder(this)
           .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                @Override
                public void onConnected(Bundle connectionHint) {
                   Log.d("DataLayerApi", "onConnected()"); //This is shown
           }
                @Override
                public void onConnectionSuspended(int cause) { }
                })
           .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(ConnectionResult result) {}
           })
           .addApi(Wearable.API)
           .build();
        mGoogleApiClient.connect();
    }

    public void sendWearable(View v) {  //This is a button
        syncSampleDataItem();
    }

    private void syncSampleDataItem() {
        if(mGoogleApiClient == null)
        return;

        final PutDataMapRequest putRequest = PutDataMapRequest.create("/SAMPLE");
        final DataMap map = putRequest.getDataMap();
        map.putInt("color", Color.RED);
        map.putString("string_example", "Sample String");
        Wearable.DataApi.putDataItem(mGoogleApiClient,  putRequest.asPutDataRequest());
    }
}

AndroidManifest.xml中:

<uses-feature android:name="android.hardware.type.watch" />

我在可穿戴端使用的代码:

public class ListenerService extends WearableListenerService { 

String myTag = "DataLayerApi";

@Override
public void onDataChanged(DataEventBuffer dataEvents) {
    super.onDataChanged(dataEvents);
    Log.d(myTag, "onDataChanged()" + dataEvents); //This is NEVER shown

    final List<DataEvent> events = FreezableUtils.freezeIterable(dataEvents);
    for(DataEvent event : events) {
        final Uri uri = event.getDataItem().getUri();
        final String path = uri!=null ? uri.getPath() : null;
        if("/SAMPLE".equals(path)) {
            final DataMap map = DataMapItem.fromDataItem(event.getDataItem()).getDataMap();
            // read your values from map:
            int color = map.getInt("color");
            String stringExample = map.getString("string_example");
            Log.d(myTag, color + stringExample); //This is NEVER shown
        }
    }
}

AndroidManifest.xml中:

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

both Manifests 我有一行:

<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

在应用标签内

【问题讨论】:

  • 你尝试过官方可穿戴示例代码吗?
  • 你能贴出你正在使用的代码吗?
  • 查看我的编辑@kentarosu,谢谢!
  • 我试过@pskink。它也不起作用,而且有点令人困惑,因为它将 DataLayerApi 与 MessageApi 混合在一起。那么问题出在哪里??
  • 您使用的是模拟器吗? Android Wear 应用是否有效?

标签: android wear-os android-wear-data-api


【解决方案1】:

所以事实证明,您需要在可穿戴和手持模块中使用 SAME 包名称。我改变了它,现在代码可以工作了!

【讨论】:

  • 很高兴听到。但是我很难将示例代码应用程序放在可穿戴设备上。我有 moto 360。我使用这个示例。 developer.android.com/samples/Quiz/index.html我签署了apk。测验应用程序永远不会显示。可以试试吗?
  • 您尝试过 Android Wear 模拟器吗?我只能试一试,因为我没有手表。
  • 是的。我在模拟器上试过。也不工作。请继续尝试,让我知道你的结果。已经与它战斗了几个小时。
  • 使用 Android Studio 提供的代码示例(Program Files (x86)/Android/android-studio/sdk/samples/android-20),而不是您发布的页面中的代码,因为它们不同!我尝试执行您建议的那个,但我只能运行移动模块。您应该已经看到穿戴式和手持式包装是不同的!所以它不起作用。然而,在我告诉你的目录中,包是相等的:package com.example.android.wearable.quiz;试试看,让我知道!
  • 对。移动模块运行良好。想知道为什么可穿戴设备不起作用。
【解决方案2】:

从外观上看,你的可穿戴方面是不正确的。您的穿戴应用还需要它自己的 GoogleApiClient 实例。

【讨论】:

  • 为什么需要 GoogleApiClient?
  • 为了获取已更改的数据,可穿戴应用需要与 Google Play 服务进行通信。为此,您需要GoogleApiClient。编辑:虽然,显然你已经让它工作了,所以我可能错了。
  • 如果我想与手持设备通信,我需要它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多