J'ai été googler pendant 5 jours d'affilée et ne trouve toujours pas la solution à mon problème, alors je publie désespérément ma question dans l'espoir que quelqu'un puisse m'aider.Android DataItem Pas de synchronisation avec l'émulateur portable
J'ai essayé d'envoyer un DataItem à un émulateur portable via l'WearableAPI. Je vais décrire toutes les étapes que je suis et spécifier le code que j'ai écrit.
Merci d'avance!
- Je démarre l'émulateur.
- J'ouvre l'application Android Wear sur mon propre appareil et j'associe l'émulateur.
- Je redirige l'ADB via tbp: 5601 tcp: 5601 dans le dossier platform-tools.
- Je commence l'application mobile sur mon téléphone Android par studio
- Je commence l'application d'usure sur l'émulateur Android par studio
- J'attends quelque chose se produise, mais rien ne se passe.
code mobile:
@Override
protected void onCreate(Bundle savedInstanceState) {
...
initComponents();
}
private void initComponents() {
...
initWearLink();
}
@Override
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
@Override
protected void onStop() {
super.onStop();
if (mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
}
// ---------------------------- WEARABLE PART ----------------------------
private void initWearLink() {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
// Request access only to the Wearable API
.addApi(Wearable.API)
.build();
increaseCounter();
}
private static final String COUNT_KEY = "efficiencyaide.dev.pv.studea.count";
private GoogleApiClient mGoogleApiClient;
private int count = 0;
// Create a data map and put data in it
private void increaseCounter() {
PutDataMapRequest putDataMapReq = PutDataMapRequest.create("/count");
putDataMapReq.getDataMap().putInt(COUNT_KEY, count++);
PutDataRequest putDataReq = putDataMapReq.asPutDataRequest();
PendingResult<DataApi.DataItemResult> pendingResult =
Wearable.DataApi.putDataItem(mGoogleApiClient, putDataReq.setUrgent());
}
@Override
public void onConnected(@Nullable Bundle bundle) {
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
@Override
public void onDataChanged(DataEventBuffer dataEventBuffer) {
}
Manifest Mobile:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="efficiencyaide.dev.pv.studea">
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<uses-permission android:name="android.permission.INTERNET" />
<application
tools:replace="android:icon"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:supportsRtl="true"
android:theme="@style/AppTheme">>
<activity
android:name=".newapp.activities.StartSplashScreen"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:theme="@style/FullscreenTheme">
<intent-filter>
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
</application>
</manifest>
gradle Mobile:
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.3"
defaultConfig {
applicationId "efficiencyaide.dev.pv.studea"
minSdkVersion 22
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
repositories {
maven {
url "https://jitpack.io"
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
wearApp project(':wear')
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.google.android.gms:play-services:10.0.1'
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.daimajia.swipelayout:library:[email protected]'
compile 'joda-time:joda-time:2.9.6'
compile 'com.github.clans:fab:1.6.4'
compile 'com.github.jivimberg:autoresizetextview:0.0.2'
compile 'com.github.PhilJay:MPAndroidChart:v3.0.1'
compile 'com.android.support:design:24.2.1'
compile 'com.android.support:support-v4:24.2.1'
compile 'com.google.android.gms:play-services-ads:10.0.1'
testCompile 'junit:junit:4.12'
}
code Wearable:
private void initWear() {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Wearable.API)
.enableAutoManage(this,this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
@Override
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
@Override
protected void onStop() {
super.onStop();
if (mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
}
@Override
protected void onResume() {
super.onResume();
mGoogleApiClient.connect();
}
@Override
public void onConnected(Bundle bundle) {
Log.i("Test", "Connected");
Wearable.DataApi.addListener(mGoogleApiClient, this);
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
protected void onPause() {
super.onPause();
Wearable.DataApi.removeListener(mGoogleApiClient, this);
mGoogleApiClient.disconnect();
}
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
for (DataEvent event : dataEvents) {
if (event.getType() == DataEvent.TYPE_CHANGED) {
// DataItem changed
DataItem item = event.getDataItem();
if (item.getUri().getPath().compareTo("/count") == 0) {
DataMap dataMap = DataMapItem.fromDataItem(item).getDataMap();
updateCount(dataMap.getInt(COUNT_KEY));
}
} else if (event.getType() == DataEvent.TYPE_DELETED) {
// DataItem deleted
}
}
}
Wearable Manifest:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="efficiencyaide.dev.pv.studea">
<uses-feature android:name="android.hardware.type.watch" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@android:style/Theme.DeviceDefault">
<activity
android:name=".TaskWorkWatchFace"
android:label="@string/app_name">
</activity>
<activity android:name=".TaskSuggestionWatchFace"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
</intent-filter>
</activity>
</application>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
</manifest>
(Désolé pour le long post/code, mais je ne voulais pas manquer quoi que ce soit)
Ce que je sais déjà/debugged:
- La fonction onDataChanged() n'est jamais appelée
- La fonction onConnected() dans le périphérique portable n'est jamais appelée
- Si je démarre l'application sur le portable, il est indiqué: " nouvelle version des services Google Play est nécessaire. Il se mettra à jour sous peu » Après ce message, l'application commence
- [EDIT]:... Réglage de la BAD debuggin permis ne contribue pas
J'espère que quelqu'un peut me aider avec ces informations que je présente mes excuses. pour la quantité de code.
Merci à l'avance
+1 pour le format de votre question de démarrage :) est-ce seulement avec l'émulateur l'avez-vous testé dans un environnement réel? –
Merci pour votre réponse! Je viens de le tester et en effet cela fonctionne sur mon appareil portable réel (j'aurais dû y penser). Alors, qu'est-ce que je fais de mal avec l'émulateur? Merci encore! –