标签: android-wear-data-api

无法将数据推送到android服装(模拟器)

我一直在尝试将数据推送到android服装模拟器.但一切都是徒劳的.我在仿真器上的监听器没有收到任何呼叫.如果其他人尝试过磨损和推送数据,请帮助.

这是我的接收器代码的样子

 private GoogleApiClient mGoogleApiClient;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_qrcode_generation);

    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Wearable.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();

    final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
    stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
        @Override
        public void onLayoutInflated(WatchViewStub stub) {
            ivQrImage = (ImageView) stub.findViewById(R.id.ivQRImage);
        }
    });
}

@Override
public void onDataChanged(DataEventBuffer dataEvents) {
    for (DataEvent event : dataEvents) {
        if (event.getType() == DataEvent.TYPE_CHANGED &&
                event.getDataItem().getUri().getPath().equals("/image")) {
            final DataMapItem dataMapItem = DataMapItem.fromDataItem(event.getDataItem());
            final Asset profileAsset = dataMapItem.getDataMap().getAsset("profileImage");
            final Bitmap bitmap = loadBitmapFromAsset(profileAsset);
            Log.d(TAG, ""+bitmap);
            if …
Run Code Online (Sandbox Code Playgroud)

android android-wear-data-api wear-os

16
推荐指数
2
解决办法
6424
查看次数

使用PutDataMapRequest后,Wearable.DataApi.getDataItem()的Uri是什么?

我正在测试可穿戴数据层Api,如Android教程中所述.

有一个低级API DataItem,它只能有一个字节数组作为有效负载,因此训练建议使用PutDataMapRequest,这似乎基本上等于Bundle使用Intents时的(即可序列化的映射).您基本上创建了此类的实例,然后填充值并发送它.

private final static String DATA_PATH = "/testdata";

PutDataMapRequest dataMap = PutDataMapRequest.create(DATA_PATH);
dataMap.getDataMap().putInt(...);

PutDataRequest request = dataMap.asPutDataRequest();
PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi.putDataItem(mGoogleApiClient, request);
pendingResult.setResultCallback(...);
Run Code Online (Sandbox Code Playgroud)

现在,我想检查这些数据是否存储正确(对于测试,在掌上电脑本身,我现在不关心可穿戴设备).适当的方法是在DataApi课堂上,所以我可以打电话:

PendingResult<DataApi.DataItemResult> pending;
pending = Wearable.DataApi.getDataItem(mGoogleApiClient, uri);
pending.setResultCallback(...);
Run Code Online (Sandbox Code Playgroud)

然后DataMapItem.fromDataItem()在回调内部使用以获取值.

问题是:请求DataItemResult的实际Uri什么?

存储数据,因为如果我使用Wearable.DataApi.getDataItems(mGoogleApiClient)迭代所有存储的数据,它确实存在,并且Uri是:

"wear://<some guid here>/testdata"
Run Code Online (Sandbox Code Playgroud)

并使用此Uri DataApi.getDataItem()返回正确的结果.但我对如何生成它一无所知,因为我只使用该/testdata部件来创建PutDataRequest...

或者我做错了什么?

android android-wear-data-api wear-os

15
推荐指数
1
解决办法
4747
查看次数

我可以将自定义对象发送到Android Wear吗?

我刚刚学习如何开发Android Wear,我已经为智能手表创建了一个全屏活动,在我的应用程序的移动部分,我获得了一些JSON数据,并从中创建了一个自定义对象列表.

在我的移动应用程序中,我在ListView中显示这些对象的信息.

在我的应用程序的Wear部分,我想显示此列表的限制版本,例如列表中的前3个将显示在Wearable上的全屏应用程序上.

我的问题是,似乎没有办法将Parcelable Objects发送到Android Wear,因此在DataItem中没有putParcelable选项.

看起来唯一的选择是以字节为单位发送对象,如下所示:

public void sendWearableData(GoogleApiClient aGoogleApiClient, ArrayList<MyObject> myObjectList, String path)
{

    googleApiClient = aGoogleApiClient;

    byte[] testBytes = new byte[0];

    if (googleApiClient.isConnected()) {
        PutDataMapRequest dataMapRequest = PutDataMapRequest.create(path);
        try {
            testBytes = BytesUtils.toByteArray(myObjectList);
        } catch (IOException e) {
            e.printStackTrace();
        }
        dataMapRequest.getDataMap().putByteArray(Constants.TEST_KEY, testBytes);
        PutDataRequest request = dataMapRequest.asPutDataRequest();
        Wearable.DataApi.putDataItem(googleApiClient, request);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我必须将我的对象转换为字节,将其发送到Android Wear并将其转换回来?这意味着我已经实现了Parcelable的对象,所以我现在可以通过Intents发送它们也需要实现Serializable,这是正确的还是有更好的方法呢?

android serializable parcelable android-wear-data-api wear-os

12
推荐指数
1
解决办法
4415
查看次数

永远不会调用Wearable.NodeApi.getConnectedNodes结果

我开发了一个Android的应用程序.下面的代码解释了问题

 if(mGoogleApiClient.isConnected()){
            K.i("Always called!");
            Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() {
                @Override
                public void onResult(NodeApi.GetConnectedNodesResult nodes) {
                    K.i("Never called :( ");
                    for (Node node : nodes.getNodes()) {
                        Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), message, null);
                    }
                }
            });      
        }
Run Code Online (Sandbox Code Playgroud)

UPD:我通过关闭来解决问题并再次开启我的手机(Nexus 5)可能有更简单的方法来解决问题吗?

试图添加.await()和AsyncTask,但结果是一样的

android android-wear-data-api wear-os

11
推荐指数
1
解决办法
3645
查看次数

从可穿戴设备发送消息到手机,然后立即回复

我今天一整天都在与Android Wear Message API作斗争,并且终于接受了我需要一些帮助.

我的应用程序非常简单.Mobile部分包含一个MainActivity(除了显示"Hello world"和一个扩展WearableListenerService的Service .)Wear部分只是一个带有单个Button的MainActivity,并实现了MessageApi.MessageListener.

这个想法很简单:按下Wear设备上的按钮,该按钮向Mobile发送消息.当移动设备收到消息时,它会显示带有发件人消息路径的Toast (例如/ mobile).执行此操作后,Mobile应立即使用我的reply()方法将消息发送 Wear设备.我想做的就是记录这条消息.

我可以完美地完成第一部分.当按下按钮时,手机会弹出一个叫"/ mobile"的Toast.然而,答案似乎只是在以太中迷失了; 没有错误,但也没有消息.

有人可以帮我理解我做错了什么吗?我在下面粘贴了我的文件.

是我关注的教程.干杯!

穿:MainActivity.java

package org.thecosmicfrog.toastdroidmessageapitutorial;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.wearable.view.WatchViewStub;
import android.util.Log;
import android.view.View;

import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.wearable.MessageApi;
import com.google.android.gms.wearable.MessageEvent;
import com.google.android.gms.wearable.Node;
import com.google.android.gms.wearable.NodeApi;
import com.google.android.gms.wearable.Wearable;

import java.util.List;
import java.util.concurrent.TimeUnit;

public class MainActivity extends Activity implements MessageApi.MessageListener {

    private final String LOG_TAG = MainActivity.class.getSimpleName();

    private static final long CONNECTION_TIME_OUT_MS = 100; …
Run Code Online (Sandbox Code Playgroud)

java android android-wear-data-api wear-os

11
推荐指数
1
解决办法
5478
查看次数

如何使用Android Wear的DataItem

我想在手持设备和可穿戴设备之间同步偏好.我在手持app上实现了示例代码.

PutDataMapRequest dataMap = PutDataMapRequest.create("/count");
dataMap.getDataMap().putInt(COUNT_KEY, count++);
PutDataRequest request = dataMap.asPutDataRequest();
PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi
    .putDataItem(mGoogleApiClient, request);
System.out.println(dataMap.getDataMap().getInt("COUNT_KEY"));//print 3
Run Code Online (Sandbox Code Playgroud)

然后在可穿戴应用上实现以下代码.但无法检索已保存的计数.

 PutDataMapRequest dataMap = PutDataMapRequest.create("/count");
 int count = dataMap.getDataMap().getInt("COUNT_KEY");
 System.out.println(count);//print 0
Run Code Online (Sandbox Code Playgroud)

我试过在Android的实际Android手持设备和模拟器中穿.我确认他们是通过使用Android Wear应用程序的演示卡连接的.

我需要什么或者我误解了什么?

android sync android-wear-data-api wear-os

10
推荐指数
1
解决办法
8570
查看次数

WearListenerService onDataChanged奇怪的行为

我想在Android Wear和Handheld之间进行双向数据传输.除了在Handheld上触发onDataChanged之外,一切似乎都很好.它触发后才插入\拔出USB线,连接到PC.所以我不明白为什么会这样.

这是我的代码:

Handheld上的WearListenerService:

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.wearable.DataApi;
import com.google.android.gms.wearable.DataEvent;
import com.google.android.gms.wearable.DataEventBuffer;
import com.google.android.gms.wearable.DataMap;
import com.google.android.gms.wearable.DataMapItem;
import com.google.android.gms.wearable.Node;
import com.google.android.gms.wearable.NodeApi;
import com.google.android.gms.wearable.PutDataMapRequest;
import com.google.android.gms.wearable.PutDataRequest;
import com.google.android.gms.wearable.Wearable;
import com.google.android.gms.wearable.WearableListenerService;

import java.util.List;

import ru.orangesoftware.financisto.db.DatabaseAdapter;
import ru.orangesoftware.financisto.model.Category;
import ru.orangesoftware.financisto.model.CategoryTree;
import ru.orangesoftware.financisto.utils.Log;

public class WearService extends WearableListenerService implements GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener
{
    private static final String WEARABLE_DATA_PATH = "/wearable_data";
    private static final String HANDHELD_DATA_PATH = "/handheld_data";

    private SendToDataLayerThread s;
    GoogleApiClient googleClient;

    private DatabaseAdapter db;

    @Override
    public void …
Run Code Online (Sandbox Code Playgroud)

android android-wear-data-api wear-os

7
推荐指数
1
解决办法
1249
查看次数

构建错误Bind_Listener已弃用

当我尝试构建我的apk时,它给了我错误的说法

错误:(190)错误:不推荐使用com.google.android.gms.wearable.BIND_LISTENER操作.

这是我的AndroidManifest现在的样子

    <service
        android:name=".MyDeviceListenerService"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action
                android:name="com.google.android.gms.wearable.BIND_LISTENER"/>
        </intent-filter>
    </service
Run Code Online (Sandbox Code Playgroud)

android-wear-data-api wear-os

7
推荐指数
1
解决办法
3238
查看次数

可穿戴的MessageAPI onMessageReceived永远不会命中,不同的设备ID

尝试从模拟的移动设备向模拟的佩戴设备发送消息.我可以通过Android Wear应用程序配对磨损设备,并验证onPeerConnected磨损设备是否被击中(onMessageReceived不是).

使用两个代码版本将node.getId()结果返回到磨损设备的两个不同ID.

运行这个:

          new Thread(new Runnable() {
                @Override
                public void run() {

                    NodeApi.GetLocalNodeResult nodes = Wearable.NodeApi.getLocalNode(mGoogleApiClient).await();
                    Node node = nodes.getNode();
                    MessageApi.SendMessageResult result = Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), "Hello Watch 1", null).await();

                    if (!result.getStatus().isSuccess()) {
                        Log.e(getPackageName(), "error");
                    } else {
                        Log.i(getPackageName(), "success!!!! sent to: " + node.getId());
                    }
                }
            }).start
Run Code Online (Sandbox Code Playgroud)

返回:08-09 10:24:33.106 17914-18007/com.wear.myapp I/com.wear.myapp:成功!!!! 发送至:223faf0e

运行这个:

            new Thread(new Runnable() {
                @Override
                public void run() {

                    NodeApi.GetConnectedNodesResult nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await();

                    for (Node node : nodes.getNodes()) …
Run Code Online (Sandbox Code Playgroud)

android-wear-data-api wear-os

7
推荐指数
1
解决办法
275
查看次数

应用关闭时,Android Wear WearableListenerService不会在Android 8 Oreo上触发

我有一个WearableListenerService手机应用程序DataItem从手表接收(在onDataChanged).代码与文档中的代码基本相同(如果有用,我可以把它放在这里).

当一个新DataItem收到,我展示给手机上的用户的通知.

它适用于Android 5,无论应用程序是运行还是被杀死.如果应用程序正在运行/在内存中,它也可以在Android O API 26上运行,但如果我先杀掉应用程序(通过滑动),WearableListenerService它也不会运行:那么它不会运行.

我知道Android 8上的后台执行限制,但我不知道如何在这种情况下处理它们,因为它的Android应该在我的应用程序处于后台时启动服务,以便我可以对数据层更改做出反应.

在应用程序处于后台时,有没有办法在Android 8上侦听数据层事件?

android android-wear-data-api android-wear-2.0 wear-os

7
推荐指数
0
解决办法
143
查看次数