2014-09-24 15 views
6

Sto provando a creare un'app per l'usura per la mia app esistente. Ho già un database SQLite nella mia app palmare, ora voglio provare a usarli nella mia app di usura.Utilizzo del database esistente in Android Wear

È possibile inviare il database a Wear o accedere al database sul palmare dall'app Wear?

La mia idea attuale è di trasferire tutti gli articoli tramite Wearable.DataApi, ma non sembra la soluzione migliore.

Ad esempio, non credo che Google Keep trasferisca tutte le note separatamente.

Qualcuno ha un'altra idea?

risposta

8

Ho trovato una soluzione rapida per trasferire l'intero database dal telefono a Smartwatch.

primo a creare una classe di supporto che converte il contenuto del database in un JSON-string, che possono essere inviate al SmartWatch utilizzando il Wearable.DataApi:

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;  
} } 

DemoActivity.java (Phone):

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 (usura)

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); 
} 
} 

Aggiungi a AndroidManifest.xml (usura)

<service android:name=".DataLayerListenerService" > 
     <intent-filter> 
      <action android:name="com.google.android.gms.wearable.BIND_LISTENER" /> 
     </intent-filter> 
    </service> 

Dopo aver ricevuto il JSON-corda sul vostro abbigliamento è possibile salvarli all'interno di un database su il tuo abbigliamento o fai qualcos'altro con questo ...

Penso che sia il modo più semplice per trasferire tali dati tra palmare e dispositivo di usura.

+0

Buona soluzione, ha funzionato molto bene per me;) – Mauker

0

Probabilmente non si vorrebbe inviare un intero database al dispositivo indossabile. Piuttosto, è necessario utilizzare i protocolli di messaggistica disponibili (WearableListenerService) per comunicare con il database già presente sul palmare.

Ecco i documenti al riguardo: http://developer.android.com/training/wearables/data-layer/events.html.

+4

Ma se si vuole essere in grado di utilizzare l'app Wear offline (senza dispositivo mobile), questa potrebbe essere una buona soluzione. – riper

Problemi correlati