我正在试图弄清楚如何将一些数据从手机同步到Android Wear设备,我已经阅读了关于数据项的developer.android.com上的文章,但是我还不清楚如何使用它们。具体而言,每个代码段(GoogleApiClient,Sync和Listen)都应该在应用程序代码的流程中以及在哪个设备,电话或服装或两者上实现。
Link到developer.android.com页面
答案 0 :(得分:17)
你看过API 20的样品了吗? DataApi
示例中的DataLayer
用法很好地展示了这里:
{android-sdk-root}\samples\android-20\wearable\DataLayer
我也在Android Wear Watchface Settings on host的答案中发布了DataApi
的使用示例。
但可能由于该问题的标题,与DataApi
没有简单的关系。所以也许这里是再次发布它的好地方 - 希望更多的用户会发现这个例子。请参阅以下代码:
推送到DataApi
的所有内容都在设备之间共享,并且可以同时使用。您可以双方更改此数据,另一方将立即通知此类更改(当设备相互连接时)。您也可以随时阅读保存的数据。以下是通过几个简单步骤实现DataApi
的示例代码。
public class WatchfaceConfigActivity extends Activity {
private GoogleApiClient mGoogleApiClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(new ConnectionCallbacks() {
@Override
public void onConnected(Bundle connectionHint) {
}
@Override
public void onConnectionSuspended(int cause) {
}
})
.addOnConnectionFailedListener(new OnConnectionFailedListener() {
@Override
public void onConnectionFailed(ConnectionResult result) {
}
})
.addApi(Wearable.API)
.build();
mGoogleApiClient.connect();
}
每当您想要将新配置与Android Wear设备同步时,您必须通过可穿戴设备DataApi
放置DataRequest:
private void syncSampleDataItem() {
if(mGoogleApiClient==null)
return;
final PutDataMapRequest putRequest = PutDataMapRequest.create("/SAMPLE");
final DataMap map = putRequest.getDataMap();
map.putInt("color", Color.RED);
map.putString("string_example", "Sample String");
Wearable.DataApi.putDataItem(mGoogleApiClient, putRequest.asPutDataRequest());
}
}
您需要创建一个扩展WearableListenerService
的类:
public class DataLayerListenerService extends WearableListenerService {
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
super.onDataChanged(dataEvents);
final List<DataEvent> events = FreezableUtils.freezeIterable(dataEvents);
for(DataEvent event : events) {
final Uri uri = event.getDataItem().getUri();
final String path = uri!=null ? uri.getPath() : null;
if("/SAMPLE".equals(path)) {
final DataMap map = DataMapItem.fromDataItem(event.getDataItem()).getDataMap();
// read your values from map:
int color = map.getInt("color");
String stringExample = map.getString("string_example");
}
}
}
}
并在AndroidManifest
:
<service android:name=".DataLayerListenerService" >
<intent-filter>
<action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
</intent-filter>
</service>