我正在尝试为我现有的应用程序构建一个穿戴应用程序。我的手持应用程序中已经有一个 SQLite 数据库,现在我想尝试在我的穿戴应用程序中使用它们。
他们是否有可能将数据库发送到 Wear,或者我可以从 Wear 应用程序访问我掌上电脑上的数据库?
我目前的想法是通过Wearable.DataApi传输所有项目,但这听起来不是最好的解决方案。
例如,我不相信 Google Keep 会单独传输所有笔记。
任何人的另一个想法?
我正在尝试为我现有的应用程序构建一个穿戴应用程序。我的手持应用程序中已经有一个 SQLite 数据库,现在我想尝试在我的穿戴应用程序中使用它们。
他们是否有可能将数据库发送到 Wear,或者我可以从 Wear 应用程序访问我掌上电脑上的数据库?
我目前的想法是通过Wearable.DataApi传输所有项目,但这听起来不是最好的解决方案。
例如,我不相信 Google Keep 会单独传输所有笔记。
任何人的另一个想法?
我找到了将整个数据库从手机传输到 Smartwatch 的快速解决方案。
首先,我创建了一个帮助类,它将我的数据库内容转换为 json 字符串,可以使用 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(电话):
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(穿)
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);
}
}
添加到AndroidManifest.xml(穿)
<service android:name=".DataLayerListenerService" >
<intent-filter>
<action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
</intent-filter>
</service>
在您的衣服上收到 json 字符串后,您可以将它们保存在您的衣服上的数据库中,或者用它做其他事情......
我认为这是在手持设备和穿戴设备之间传输此类数据的最简单方法。
您可能不想将整个数据库发送到可穿戴设备。相反,您应该使用可用的消息传递协议 ( WearableListenerService ) 以便与手持设备上已经存在的数据库进行通信。
以下是相关文档:http: //developer.android.com/training/wearables/data-layer/events.html。