Android Wear数据项

Fla*_*lyn 4 android android-wear-data-api wear-os

我正在试图弄清楚如何将一些数据从手机同步到Android Wear设备,我已经阅读了关于数据项的developer.android.com上的文章,但是我还不清楚如何使用它们.具体而言,每个代码段(GoogleApiClient,Sync和Listen)都应该在应用程序代码的流程中以及在哪个设备,电话或服装或两者上实现.

链接到developer.android.com页面

Mac*_*ęga 17

你看过API 20的样品了吗?在这里有一个很好的示例DataApi使用DataLayer示例:

{android-sdk-root}\samples\android-20\wearable\DataLayer
Run Code Online (Sandbox Code Playgroud)

另外,我在主持人的Android Wear Watchface设置的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();
    }
Run Code Online (Sandbox Code Playgroud)

每次要将新的配置与Android Wear设备同步时,您必须通过Wearable放置DataRequest DataApi:

    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());
    }
}
Run Code Online (Sandbox Code Playgroud)


在手表方面:

您需要创建一个扩展的类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");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并在你的声明中声明AndroidManifest:

<service android:name=".DataLayerListenerService" >
    <intent-filter>
        <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
    </intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)