シンプルな文字列だけをスマホからアンドロイドウェアに送りたい。私は前にこの質問を見ました: Unable to push data to android wear (Emulator) で同じ方法を試みましたが、onDataChanged は電話でホール アプリを削除したときだけで、push StringstoWear が呼び出されたときではありませんでした。助けを求めて...
これが電話での私のコードです:package de.gruppe8.culturehelper;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.wearable.PutDataMapRequest;
import com.google.android.gms.wearable.Wearable;
import java.util.Date;
public class Phone extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private GoogleApiClient mGoogleApiClient;
private static final String TAG = "PHONE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_phone);
//Erstelle Google API Client zur Kommunikation mit Wear
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Wearable.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
//Testbutton zum Daten versenden
Button button = (Button) findViewById(R.id.Testbutton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pushStringsToWear();
}
});
}
//Sendet Daten an Wear, wenn aufgerufen !!!!--->Auchtung wird noch nicht richtig empfangen
private void pushStringsToWear() {
Inhalt.TEXT ="ätzend";
//Requester
PutDataMapRequest Sender = PutDataMapRequest.create(Inhalt.NOTIFICATION_PATH);
//Diese Daten werden versendet, unter dem angegeben Pfad (siehe hier drüber)
Sender.getDataMap().putLong("time", System.currentTimeMillis());
Sender.getDataMap().putString("Bilddateiname", Inhalt.IMAGE);
Sender.getDataMap().putString("Text", Inhalt.TEXT);
Wearable.DataApi.putDataItem(mGoogleApiClient, Sender.asPutDataRequest());
//bestätigt das aufrufen der Funktion
TextView Information = (TextView) findViewById(R.id.Information);
String a= "dgdfjkjhg";
Information.setText(a);
}
//zu versendende Daten--->müssen anhand der Datenbank vor dem Absenden verändert werden
public static class Inhalt {
public static String NOTIFICATION_PATH = "/Warning";
public static Long Zeit = System.currentTimeMillis();
public static String IMAGE = "Image";
public static String TEXT = "content";
}
//Pflichtfunktionen onStart,onStop,onConnected,onConnectionFailed/Suspended, onStop
@Override
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
Log.d(TAG, "connected to APICLIENT" + new Date().getTime());
}
@Override
public void onConnected(Bundle bundle) {
Log.d(TAG, "Connected");
}
@Override
public void onConnectionSuspended(int i) {
Log.d(TAG, "Connection Suspended");
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.d(TAG, "Connection Failed");
}
@Override
protected void onStop() {
super.onStop();
mGoogleApiClient.disconnect();
Log.d(TAG, "disconected from APICLIENT" + new Date().getTime());
}
}
そして、これは摩耗に関する私のコードです:
package de.gruppe8.culturehelper;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GoogleApiAvailability;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.wearable.DataApi;
import com.google.android.gms.wearable.DataEvent;
import com.google.android.gms.wearable.DataEventBuffer;
import com.google.android.gms.wearable.DataMapItem;
import com.google.android.gms.wearable.MessageApi;
import com.google.android.gms.wearable.MessageEvent;
import com.google.android.gms.wearable.Wearable;
import java.util.Objects;
public class Watch extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, DataApi.DataListener, MessageApi.MessageListener {
private GoogleApiClient mGoogleApiClient;
private static final String TAG = "WEAR";
private TextView mTextView;
GoogleApiAvailability a;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_watch);
//Starten des Google API Clients zur kommunikation mit Smartphone
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Wearable.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
//Wenn Daten vom Handy abgesendet werden, werden sie hier empfangen ---> Derzeit nur bei Deinstallation der App
public void onDataChanged(DataEventBuffer dataEvent) {
for (DataEvent event : dataEvent) {
if (event.getType() == DataEvent.TYPE_CHANGED &&
event.getDataItem().getUri().getPath().equals("/Warning")) {
final DataMapItem dMI = DataMapItem.fromDataItem(event.getDataItem());
//Empfangbare Daten, zur weiterverarbeitung If states einbauen und Folge festlegen(externe Funktionen?)
String Text = dMI.getDataMap().getString("Text");
String Bild = dMI.getDataMap().getString("Bilddateiname");
Long Zeit = dMI.getDataMap().getLong("time");
//Teststring
TextView Testergebnis = (TextView) findViewById(R.id.text);
String s= Objects.toString(Zeit, null);
Testergebnis.setText(s);
}
}
}
@Override
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
//Startet die Listener
@Override
public void onConnected(Bundle bundle) {
Wearable.DataApi.addListener(mGoogleApiClient, this);
Wearable.MessageApi.addListener(mGoogleApiClient, this);
}
@Override
protected void onStop() {
if (null != mGoogleApiClient && mGoogleApiClient.isConnected()) {
Wearable.DataApi.removeListener(mGoogleApiClient, this);
mGoogleApiClient.disconnect();
}
super.onStop();
}
@Override
public void onConnectionSuspended(int i) {
Log.d(TAG, "Connection Suspended");
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.d(TAG, "Connection Failed");
}
@Override
public void onMessageReceived(MessageEvent messageEvent) {
}
}
着用マニフェスト:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.gruppe8.culturehelper">
<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=".Watch"
android:label="@string/app_name"
android:exported="true"
android:allowEmbedded="true"
android:taskAffinity=""
android:theme="@android:style/Theme.DeviceDefault.Light">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- ATTENTION: This was auto-generated to add Google Play services to your project for
App Indexing. See https://g.co/AppIndexing/AndroidStudio for more information. -->
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
</application>
電話マニフェスト:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Phone">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- ATTENTION: This was auto-generated to add Google Play services to your project for
App Indexing. See https://g.co/AppIndexing/AndroidStudio for more information. -->
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
</application>