onDataChanged() не вызывается при износе Android

Я пытаюсь использовать элементы данных, чтобы отправить несколько строк в свою одежду, но моя одежда никогда не получает никакого сигнала, потому что onDataChanged() никогда не вызывается. Я даже установил отметку времени, чтобы данные всегда были разными, когда бы они ни отправлялись.

Есть ли какой-то особый способ установить приложение на оба устройства, чтобы оно заработало? Я просто нажимаю «Выполнить» и выбираю свой телефон, затем переключаю модули и делаю то же самое для своего носимого устройства.

Вот код моей основной деятельности на моем телефоне:

public class HomeActivity extends Activity{

public static String TAG = "HomeActivity";
private GoogleApiClient mGoogleApiClient;


@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.home_view);
    Button mButton = (Button) findViewById(R.id.send_button);
    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            sendData();
        }
    });

    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                @Override
                public void onConnected(Bundle bundle) {

                }

                @Override
                public void onConnectionSuspended(int i) {

                }
            }).addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(ConnectionResult connectionResult) {

                }
            }).addApi(Wearable.API)
            .build();
    mGoogleApiClient.connect();
}

private void sendData(){
    if (mGoogleApiClient!=null){
        return;
    }

    final PutDataMapRequest putRequest = PutDataMapRequest.create("/SAMPLE");
    final DataMap map = putRequest.getDataMap();
    map.putInt("color", Color.RED);
    map.putLong("date", new Date().getTime());
    Wearable.DataApi.putDataItem(mGoogleApiClient, putRequest.asPutDataRequest());
}

}

А вот код на моем носимом устройстве:

public class LayoutFaceService extends CanvasWatchFaceService implements DataApi.DataListener{

@Override
public void onCreate(){
    super.onCreate();
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Wearable.API)
            .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                @Override
                public void onConnected(Bundle bundle) {
                    Log.i(TAG, "Connected");
                    Wearable.DataApi.addListener(mGoogleApiClient, LayoutFaceService.this);
                }

                @Override
                public void onConnectionSuspended(int i) {

                }
            })
            .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(ConnectionResult connectionResult) {

                }
            })
            .build();
    mGoogleApiClient.connect();
}


@Override
public void onDataChanged(DataEventBuffer dataEvents) {
    for (DataEvent event : dataEvents) {
        if (event.getType() == DataEvent.TYPE_DELETED) {
            Log.d(TAG, "DataItem deleted: " + event.getDataItem().getUri());
        } else if (event.getType() == DataEvent.TYPE_CHANGED) {
            Log.d(TAG, "DataItem changed: " + event.getDataItem().getUri());
        }
    }

}

И мой манифест износа:

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

<uses-permission android:name="com.google.android.permission.PROVIDE_BACKGROUND" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.DeviceDefault" >
    <service
        android:name=".LayoutFaceService"
        android:label="@string/my_digital_name"
        android:permission="android.permission.BIND_WALLPAPER" >
        <meta-data
            android:name="android.service.wallpaper"
            android:resource="@xml/watch_face" />
        <meta-data
            android:name="com.google.android.wearable.watchface.preview"
            android:resource="@drawable/preview_digital" />
        <meta-data
            android:name="com.google.android.wearable.watchface.preview_circular"
            android:resource="@drawable/preview_digital_circular" />

        <intent-filter>
            <action android:name="android.service.wallpaper.WallpaperService" />
            <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
            <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" />
</application>

person Cdaly    schedule 06.09.2015    source источник
comment
Получаете ли вы журнал Connected в приложении Wear?   -  person dhaval    schedule 06.09.2015


Ответы (1)


В sendData() ваше условие кажется неверным; mGoogleApiClient != null верно, поэтому вы выходите прямо здесь. Обратитесь к этому и посмотрите, сможете ли вы продвинуться дальше; могут быть и другие проблемы, но это первая очевидная. Если это не решило вашу проблему полностью, убедитесь, что вы также включили манифест на своем телефоне в свое сообщение.

person Ali Naddaf    schedule 06.09.2015
comment
Вау, это была проблема. Я поменял != на == и теперь все работает нормально. Спасибо. - person Cdaly; 06.09.2015