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" />
ああ、答えは恥ずかしいほど簡単です。 onStart()
でmGoogleApiClient.connect()
を呼び出す必要がある部分を見逃しました。
OnStartおよびonStopライフサイクルメソッドで接続と切断を手動で呼び出すか、または enableAutoManage
機能を使用できます。
mCredentialsApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.enableAutoManage(this, this)
.addApi(Auth.CREDENTIALS_API)
.build();
さらに、ユーザーがGoogle PlayをセットアップしていないときにGoogleApiClientを実行しようとすると、接続が競合する可能性があることに気付きました。 (デバイスをリセットしたところ、それが起こりました)。したがって、次を使用してGoogleApiClientからの接続をテストすることをお勧めします
mCredentialsApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
または、タスクを実行する前にmCredentialsApiClient.isConnected()を確認してください。