GoogleApiClient onConnected никога не се е извиквал на носимо устройство

Имам устройство за носене, което се опитвам да свържа с GoogleApiClient, но обратните извиквания никога не се извикват (onConnected, onConnectionSuspended или onConnectionFailed). Всичко останало работи добре, DataLayerListenerService може да получава съобщения от преносимото устройство и onPeerConnected се извиква, когато се свърже. Пробвах и с емулатора, и с устройство Samsung Gear Live. Това е кодът, който имам в дейността, където се опитвам да се свържа с GoogleApiClient.

public class WearReaderActivity extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
    public static final String CONTENT_EXTRA = "contentExtra";
    private String LOG_TAG = WearReaderActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.reader);
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addApi(Wearable.API)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
    }

    private GoogleApiClient mGoogleApiClient;

    @Override
    protected void onStart() {
        super.onStart();
        Log.e("Connected?", String.valueOf(mGoogleApiClient.isConnected()));
        //new Thread(new GetContent()).start();
    }

    @Override
    public void onConnected(Bundle bundle) {
        Log.d("Connected", "Connected");
        new Thread(new GetContent()).start();
    }

    @Override
    public void onConnectionSuspended(int i) {
        Log.d("Connection suspened", "Connection suspended");
    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        Log.d("Connection suspened", "Connection suspended");
    }
...
}

Не съм сигурен дали ще помогне, но това е моят манифест за приложението Wearable

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="my.packagename">
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.DeviceDefault" >
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

    <activity
        android:name=".WearReaderActivity"
        android:label="Reading" >
        <intent-filter>
           <action android:name="android.intent.action.MAIN" />
           <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

<meta-data android:name="com.google.android.gms.version"
       android:value="@integer/google_play_services_version" />

    <service
        android:name=".DataLayerListenerService" >
        <intent-filter>
            <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
        </intent-filter>
    </service>

</application>

Any ideas?

РЕДАКТИРАНЕ: Добавено е следното към манифеста за носене, но все още не работи

<meta-data android:name="com.google.android.gms.version"
           android:value="@integer/google_play_services_version" />

person odiggity    schedule 10.07.2014    source източник


Отговори (3)


О, уау, отговорът е смущаващо прост. Пропуснах частта, в която в onStart() трябва да се обадите на mGoogleApiClient.connect().

person odiggity    schedule 10.07.2014
comment
За съжаление и на мен това ми се случи в началото. хаха - person gatlingxyz; 15.07.2014
comment
Не е толкова неудобно, когато „уроците“ на документацията пренебрегват това. - person iforce2d; 27.12.2014
comment
Точно това, което си мислех iforce2d. - person bmeulmeester; 21.01.2015
comment
Шокиращ пропуск в урока на developer.android.com/training/location/retrieve- current.html! - person Craig McMahon; 29.01.2015
comment
Подадох заявка за коригиране на документацията тук. - person Wayne Piekarski; 10.07.2015
comment
Уроците по документация пренебрегват да го споменат, тъй като @iforce2d ни сочеше. Внимавайте да извикате и mGoogleApiClient.disconnect() в onStop(). - person Sébastien BATEZAT; 14.07.2015
comment
.... това ВСЕ ОЩЕ е проблем с документацията... някак невероятно. За тяхна заслуга, можете да проверите примерния код (който сам по себе си е трудна връзка за намиране на страницата), където наистина показват onStart() и свързване: github.com/googlesamples/android -play-location/blob/master/ - person Don Cheadle; 23.08.2015

Можете да извикате свързването и прекъсването на връзката ръчно в методите на жизнения цикъл onStart и onStop или можете да използвате enableAutoManage< /a> характеристика.

mCredentialsApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .enableAutoManage(this, this)
            .addApi(Auth.CREDENTIALS_API)
            .build();
person Imre    schedule 18.11.2015

Освен това забелязах, че ако се опитате да направите GoogleApiClient, когато потребителят не е настроил Google Play, може да възникне конфликт при свързване. (Току-що нулирах устройството си и това се случи). Така че е добра практика да тествате връзката от GoogleApiClient с помощта на

mCredentialsApiClient = new GoogleApiClient.Builder(this)
        .addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)

Или просто проверете mCredentialsApiClient.isConnected(), преди да изпълните каквато и да е задача.

person Juan Mendez    schedule 29.09.2017