0

シンプルな文字列だけをスマホからアンドロイドウェアに送りたい。私は前にこの質問を見ました: 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>

4

1 に答える 1

0

Play サービス 8.3以降、 DataApiを使用したデータ同期はバッチ処理され、特定の頻度で行われます。つまり、データの同期は最大 30 分遅れる可能性があります。すぐに同期する必要がある場合は、リクエストが緊急に設定されていることを確認する必要があります。補足として、ApiClient を使用しているときに接続を確認することをお勧めします。pushStringsToWear

于 2016-01-02T16:30:42.863 に答える