web-dev-qa-db-ja.com

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");
    }
...
}

それが役立つかどうかはわかりませんが、これはウェアラブルアプリのマニフェストです

    <?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>

何か案は?

編集:以下をウェアラブルマニフェストに追加しましたが、まだ機能していません

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

ああ、答えは恥ずかしいほど簡単です。 onStart()mGoogleApiClient.connect()を呼び出す必要がある部分を見逃しました。

142
odiggity

OnStartおよびonStopライフサイクルメソッドで接続と切断を手動で呼び出すか、または enableAutoManage 機能を使用できます。

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

さらに、ユーザーがGoogle PlayをセットアップしていないときにGoogleApiClientを実行しようとすると、接続が競合する可能性があることに気付きました。 (デバイスをリセットしたところ、それが起こりました)。したがって、次を使用してGoogleApiClientからの接続をテストすることをお勧めします

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

または、タスクを実行する前にmCredentialsApiClient.isConnected()を確認してください。

0
Juan Mendez