Android: GCM и клиент Google API

Я тестирую Google Cloud Messaging и хочу отправить данные в smartwatch, чтобы открыть уведомление в приложении smartwatch с данными.

Итак, у меня есть GcmListenerService, который обрабатывает сообщение от GCM (это работает).

Теперь мне интересно, как реализовать Google API Client.

Вот как я это сделал, но это не работает:

public class GcmMessageHandler extends GcmListenerService {

private static final String TAG = "GcmMessageHandler";

private GoogleApiClient mGoogleApiClient;

public static final int MESSAGE_NOTIFICATION_ID = 435345;

public void buildGoogleApiClient() {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                @Override
                public void onConnected(Bundle connectionHint) {
                    Log.d(TAG, "onConnected: " + connectionHint);
                    sendNotif();
                }

                @Override
                public void onConnectionSuspended(int cause) {
                    Log.d(TAG, "onConnectionSuspended: " + cause);
                }
            })
            .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(ConnectionResult result) {
                    Log.d(TAG, "onConnectionFailed: " + result);
                }
            })
            .addApi(Wearable.API)
            .build();
}

public void sendNotif () {
    if (mGoogleApiClient.isConnected()) {
        PutDataMapRequest putDataMapRequest = PutDataMapRequest.create("/new_meeting");
        putDataMapRequest.getDataMap().putString("title", "title");
        putDataMapRequest.getDataMap().putString("content", "content");
        PutDataRequest request = putDataMapRequest.asPutDataRequest();
        Wearable.DataApi.putDataItem(mGoogleApiClient, request)
                .setResultCallback(new ResultCallback<DataApi.DataItemResult>() {
                    @Override
                    public void onResult(DataApi.DataItemResult dataItemResult) {
                        if (!dataItemResult.getStatus().isSuccess()) {
                            Log.e(TAG, "buildWatchOnlyNotification(): Failed to set the data, "
                                    + "status: " + dataItemResult.getStatus().getStatusCode());
                        } else {
                            Log.e(TAG, dataItemResult.getStatus().getStatusMessage());
                        }
                    }
                });

    } else {
        Log.e(TAG, "buildWearableOnlyNotification(): no Google API Client connection");
    }
}

@Override
public void onMessageReceived(String from, Bundle data) {

    String message = data.getString("message");

    this.buildGoogleApiClient();
    this.mGoogleApiClient.connect();


}

}

Я пытался в деятельности, и она работает

public class MainActivity extends AppCompatActivity {

private static final String TAG = "MainActivity";
private static final int REQUEST_SIGNUP = 0;

private GoogleApiClient mGoogleApiClient;

@InjectView(R.id.btn__login_login) Button _btn_login_login;

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


    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                @Override
                public void onConnected(Bundle connectionHint) {
                    Log.d(TAG, "onConnected: " + connectionHint);
                }

                @Override
                public void onConnectionSuspended(int cause) {
                    Log.d(TAG, "onConnectionSuspended: " + cause);
                }
            })
            .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(ConnectionResult result) {
                    Log.d(TAG, "onConnectionFailed: " + result);
                }
            })
            .addApi(Wearable.API)
            .build();

    progressDialog = new ProgressDialog(MainActivity.this, R.style.AppTheme_Dark_Dialog);

    ButterKnife.inject(this);

    _btn_login_login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            sendNotification();
        }
    });

}

private void sendNotification() {
    if (mGoogleApiClient.isConnected()) {
        PutDataMapRequest dataMapRequest = PutDataMapRequest.create("/new_meeting");

        dataMapRequest.getDataMap().putDouble("timestamp", System.currentTimeMillis());
        dataMapRequest.getDataMap().putString("title", "This is the title");
        dataMapRequest.getDataMap().putString("content", "This is a notification with some text.");
        PutDataRequest putDataRequest = dataMapRequest.asPutDataRequest();
        Wearable.DataApi.putDataItem(mGoogleApiClient, putDataRequest);
    }
    else {
        Log.e(TAG, "No connection to wearable available!");
    }
}

@Override
protected void onStart() {
    super.onStart();
    mGoogleApiClient.connect();
}

@Override
protected void onStop() {
    super.onStop();
    mGoogleApiClient.disconnect();
}

1 ответ

Я изменяю это в моем слушателе, и это работает:

public void buildGoogleApiClient() {

    Context context = getBaseContext();

    mGoogleApiClient = new GoogleApiClient.Builder(context)
            .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                @Override
                public void onConnected(Bundle connectionHint) {
                    Log.d(TAG, "onConnected: " + connectionHint);
                    sendNotif();
                }

                @Override
                public void onConnectionSuspended(int cause) {
                    Log.d(TAG, "onConnectionSuspended: " + cause);
                }
            })
            .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(ConnectionResult result) {
                    Log.d(TAG, "onConnectionFailed: " + result);
                }
            })
            .addApi(Wearable.API)
            .build();
}
Другие вопросы по тегам