Android Wear上的通知正在运行,但数据层并非如此

时间:2014-11-10 13:58:52

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

我正在开发一款包含一些可穿戴功能的Android应用。我有一些使用WearableExtender的通知,他们工作正常。但是,当我尝试使用数据层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]

看起来手表上有一些适当的路径(路径= / 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>

并且两者 清单我有一句话:

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

在应用程序标记

2 个答案:

答案 0 :(得分:2)

因此,您需要在可穿戴和手持模块中使用 SAME 包名称。我改变了它,现在代码正在运行!

答案 1 :(得分:0)

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