【问题标题】:Recieving data from Android watch to phone从 Android 手表接收数据到手机
【发布时间】:2014-12-12 20:57:35
【问题描述】:

我正在尝试从手表到手机和手机到手表的文本传输。我能够从两个设备相互发送数据,我的手表也能够接收数据。
我的 Receive_Data_Phone 类中似乎存在一些问题。它没有检测到我通过手表发送的任何数据。
我已经分享了代码和 Logcat 输出。

Recieve_Data.java

public class Recieve_Data extends WearableListenerService {
private static final String TAG = "@@##";
private GoogleApiClient mGoogleApiClient;

@Override
public void onCreate() {
    super.onCreate();
    mGoogleApiClient = new GoogleApiClient.Builder(this).addApi(
            Wearable.API).build();
    mGoogleApiClient.connect();
    System.out.println("Inside RecieveData onCreate()");


}

@Override
public void onDataChanged(DataEventBuffer dataEvents) {
    final List<DataEvent> events = FreezableUtils
            .freezeIterable(dataEvents);
    dataEvents.close();
    System.out.println("Inside OnDataChanged()");

    if (!mGoogleApiClient.isConnected()) {
        ConnectionResult connectionResult = mGoogleApiClient
                .blockingConnect(30, TimeUnit.SECONDS);
        if (!connectionResult.isSuccess()) {
            Log.e(TAG,"WEAR :: Service failed to connect to GoogleApiClient.");
            return;
        }
    } else {
        Log.e(TAG,"WEAR :: Service connected to GoogleApiClient.");
    }

    for (DataEvent event : events) {
        if (event.getType() == DataEvent.TYPE_CHANGED) {
            String path = event.getDataItem().getUri().getPath();
            Log.d(TAG, "DataEvent.TYPE_CHANGED, path = " + path);

                /*          if (Constants.PATH_SERVER_RESPONSE.equals(path)) {
                // Get the data out of the event
                DataMapItem dataMapItem = DataMapItem.fromDataItem(event
                        .getDataItem());
                final String responseString = dataMapItem.getDataMap()
                        .getString(Constants.KEY_TITLE);
                Log.d(TAG, "DataEvent notif responseString: "
                        + responseString);

                Intent intent = new Intent("my-event");
                intent.putExtra("message", responseString);
                LocalBroadcastManager.getInstance(this).sendBroadcast(
                        intent);
            } 

             */         

             if (Constant_Vars.PATH_OBJECTIVE.equals(path)) {
                DataMapItem dataMapItem = DataMapItem.fromDataItem(event
                        .getDataItem());
                String msg = dataMapItem.getDataMap().getString(
                        Constant_Vars.KEY_OBJECTIVE);
                int message = Integer.parseInt(msg);
                Log.d(TAG, "WEAR:: String " + message);


            } else {
                Log.d(TAG, "Unrecognized path: " + path);
            }
        }
    }
}

@Override
public void onMessageReceived(MessageEvent messageEvent) {
    Log.d(TAG, "MOBILE:: onMessageReceived messageEvent path: "
            + messageEvent.getPath());

    if (messageEvent.getPath().equals(Constant_Vars.PATH_OBJECTIVE)) {
        Toast.makeText(getBaseContext(), "Service Working",
                Toast.LENGTH_SHORT).show();

    } else {
        Toast.makeText(getBaseContext(), "Unknown request",
                Toast.LENGTH_SHORT).show();
    }
}
}

Receive_Data_Phone.java

public class Recieve_Data_Phone extends WearableListenerService {


private static final String TAG = "@@##";

private GoogleApiClient mGoogleApiClient;

@Override
public void onCreate() {
    super.onCreate();
    mGoogleApiClient = new GoogleApiClient.Builder(this).addApi(
            Wearable.API).build();
    mGoogleApiClient.connect();
    System.out.println("Inside RecieveData onCreate()");


}

@Override
public void onDataChanged(DataEventBuffer dataEvents) {
    final List<DataEvent> events = FreezableUtils
            .freezeIterable(dataEvents);
    dataEvents.close();
    System.out.println("Inside OnDataChanged()");

    if (!mGoogleApiClient.isConnected()) {
        ConnectionResult connectionResult = mGoogleApiClient
                .blockingConnect(30, TimeUnit.SECONDS);
        if (!connectionResult.isSuccess()) {
            Log.e(TAG,"PHONE :: Service failed to connect to GoogleApiClient.");
            return;
        }
    } else {
        Log.e(TAG,"PHONE :: Service connected to GoogleApiClient.");
    }

    for (DataEvent event : events) {
        if (event.getType() == DataEvent.TYPE_CHANGED) {
            String path = event.getDataItem().getUri().getPath();
            Log.d(TAG, "DataEvent.TYPE_CHANGED, path = " + path);

                /*          if (Constants.PATH_SERVER_RESPONSE.equals(path)) {
                // Get the data out of the event
                DataMapItem dataMapItem = DataMapItem.fromDataItem(event
                        .getDataItem());
                final String responseString = dataMapItem.getDataMap()
                        .getString(Constants.KEY_TITLE);
                Log.d(TAG, "DataEvent notif responseString: "
                        + responseString);

                Intent intent = new Intent("my-event");
                intent.putExtra("message", responseString);
                LocalBroadcastManager.getInstance(this).sendBroadcast(
                        intent);
            } 

             */         

             if (Constant_Vars.PATH_FLAG.equals(path)) {
                DataMapItem dataMapItem = DataMapItem.fromDataItem(event
                        .getDataItem());
                String msg = dataMapItem.getDataMap().getString(
                        Constant_Vars.KEY_FLAG);
                //int message = Integer.parseInt(msg);
                Log.d(TAG, "PHONE:: String " + msg);


            } else {
                Log.d(TAG, "Unrecognized path: " + path);
            }
        }
    }
}

@Override
public void onMessageReceived(MessageEvent messageEvent) {
    Log.d(TAG, "MOBILE:: onMessageReceived messageEvent path: "
            + messageEvent.getPath());

    if (messageEvent.getPath().equals(Constant_Vars.PATH_FLAG)) {
        Toast.makeText(getBaseContext(), "Service Working",
                Toast.LENGTH_SHORT).show();

    } else {
        Toast.makeText(getBaseContext(), "Unknown request",
                Toast.LENGTH_SHORT).show();
    }
}
}

【问题讨论】:

    标签: android wear-os


    【解决方案1】:

    我认为,您可以发送相同的数据项,尝试添加键值,例如 dataMap.putLong("时间戳", System.currentMillion()) 它可能会工作

    原因是:如果发送相同的数据项,google服务不会检测到数据项发生变化,所以不会通知onDataChanged()方法

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多