简体   繁体   English

从Android手表到手机接收数据

[英]Recieving data from Android watch to phone

I am trying text transfer from watch to phone and phone to watch. 我正在尝试从手表到手机和手机到手表的文本传输。 I am able to send the data from both the devices to each other, and my watch is able to receive the data too. 我能够将两个设备之间的数据发送到彼此,并且我的手表也能够接收数据。
There seems to be some problem in my Receive_Data_Phone class. 我的Receive_Data_Phone类似乎存在一些问题。 It doesn't detect any data which i am sending through watch. 它没有检测到我通过手表发送的任何数据。
I have shared the code and Logcat Output. 我已经共享了代码和Logcat输出。

Recieve_Data.java 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 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();
    }
}
}

i think, you may send the same data item, try to add a key-value, like dataMap.putLong("timestamp", System.currentMillion()) it may work 我认为,您可能会发送相同的数据项,尝试添加一个键值,例如dataMap.putLong(“ timestamp”,System.currentMillion())可能会起作用

the reason is : if you send the same data item, google service will not detect the data item is changed, so it will not notify onDataChanged() Method 原因是:如果您发送相同的数据项,则Google服务将不会检测到该数据项已更改,因此不会通知onDataChanged()方法

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM