Ich habe eine schnelle Lösung für die Übertragung der gesamten Datenbank vom Telefon zu Smartwatch gefunden.
DatabaseToJSON.java:
public class DatabaseToJSON {
DatabaseHandler dbhandler;
public DatabaseToJSON(Context context) {
dbhandler = new DatabaseHandler(context);
}
public JSONObject getJSON() throws JSONException{
Item[] item = null;
JSONObject pl = new JSONObject();
item = dbhandler.getItems();
dbhandler.close();
JSONArray jsonArray = new JSONArray();
for(int i=0;i<item.length;i++){
JSONObject val = new JSONObject();
try {
val.put("id", item[i].getID());
val.put("name", item[i].getName());
...
jsonArray.put(val);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pl.put(String.valueOf(j), jsonArray);
}
if(jsonArray.length()<1){
pl.put(String.valueOf(j),new JSONArray());
}
}
JSONObject result = new JSONObject();
result.put("data",pl);
return result;
} }
Zuerst habe ich eine Hilfsklasse erstellen, die meine Datenbankinhalten in einem json-String umwandelt, kann diese unter Verwendung der Wearable.DataApi zu Smartwatch ist senden DemoActivity.java (Telefon):
public class DemoActivity extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
/** Android Wear **/
GoogleApiClient googleClient;
@Override
public void onStart(){
super.onStart();
googleClient.connect();
}
@Override
public void onStop(){
if (null != googleClient && googleClient.isConnected()) {
googleClient.disconnect();
}
super.onStop();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
googleClient = new GoogleApiClient.Builder(this)
.addApi(Wearable.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
...
}
@Override
public void onConnected(Bundle bundle) {
DatabaseToJSON dbJson = new DatabaseToJSON(DemoActivity.this);
try {
JSONObject json = dbJson.getJSON();
new SendToDataLayerThread("/path", json.toString()).start();
} catch (JSONException e) {
e.printStackTrace();
}
}
class SendToDataLayerThread extends Thread {
String path;
String message;
SendToDataLayerThread(String p, String msg) {
path = p;
message = msg;
}
public void run() {
NodeApi.GetConnectedNodesResult nodes = Wearable.NodeApi.getConnectedNodes(googleClient).await();
for (Node node : nodes.getNodes()) {
MessageApi.SendMessageResult result = Wearable.MessageApi.sendMessage(googleClient, node.getId(), path, message.getBytes()).await();
if (result.getStatus().isSuccess()) {
Log.v("myTag", "Message: {" + message + "} sent to: " + node.getDisplayName());
}
else {
Log.v("myTag", "ERROR: failed to send Message");
}
}
}
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
}
DataLayerListenerService.java (Verschleiß)
public class DataLayerListenerService extends WearableListenerService {
@Override
public void onMessageReceived(MessageEvent messageEvent) {
if (messageEvent.getPath().equals("/path")) {
final String message = new String(messageEvent.getData());
// do what you want with the json-string
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor edit = pref.edit();
edit.putString("demo_json",message).apply();
}
else {
super.onMessageReceived(messageEvent);
}
}
In den AndroidManifest.xml (Verschleiß)
<service android:name=".DataLayerListenerService" >
<intent-filter>
<action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
</intent-filter>
</service>
Nach der json-string auf Ihrem Verschleiß empfangen Sie sie in einer Datenbank speichern können auf Sie tragen oder etwas anderes damit zu tun ...
Ich denke, das ist der einfachste Weg, um solche Daten zwischen Handheld und Verschleiß-Gerät zu übertragen.
Gute Lösung, hat sehr gut für mich gearbeitet;) – Mauker