2014-09-24 9 views
6

Ich versuche eine Wear-App für meine vorhandene App zu erstellen. Ich habe bereits eine SQLite-Datenbank in meiner Handheld-App, jetzt möchte ich versuchen, sie in meiner Wear-App zu verwenden.Verwenden der vorhandenen Datenbank in Android Wear

Gibt es eine Möglichkeit, die Datenbank an die Wear zu senden oder kann ich von der Wear-App auf die Datenbank auf meinem Handheld zugreifen?

Meine aktuelle Idee ist es, alle Elemente über Wearable.DataApi zu übertragen, aber das klingt nicht wie die beste Lösung.

Zum Beispiel glaube ich nicht, dass Google Keep alle Notizen separat übertragen.

Wer eine andere Idee?

Antwort

8

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.

+0

Gute Lösung, hat sehr gut für mich gearbeitet;) – Mauker

0

Sie möchten wahrscheinlich keine gesamte Datenbank an das Wearable senden. Stattdessen sollten Sie die verfügbaren Messaging-Protokolle (WearableListenerService) verwenden, um mit der Datenbank zu kommunizieren, die sich bereits auf dem Handheld befindet.

Hier sind die Dokumente auf: http://developer.android.com/training/wearables/data-layer/events.html.

+4

Aber wenn man die Wear-App offline (ohne Handy) nutzen möchte, kann dies eine gute Lösung sein. – riper

Verwandte Themen