无法将数据推送到Android Wear(模拟器)

我一直在试图将数据推送到Android穿戴模拟器。 但一切都是徒劳的。 我的模拟器听众没有收到任何电话。 如果其他人已经尝试磨损和推动数据穿请帮助。

这是我的接收器代码的样子

private GoogleApiClient mGoogleApiClient; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_qrcode_generation); mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(Wearable.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub); stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { @Override public void onLayoutInflated(WatchViewStub stub) { ivQrImage = (ImageView) stub.findViewById(R.id.ivQRImage); } }); } @Override public void onDataChanged(DataEventBuffer dataEvents) { for (DataEvent event : dataEvents) { if (event.getType() == DataEvent.TYPE_CHANGED && event.getDataItem().getUri().getPath().equals("/image")) { final DataMapItem dataMapItem = DataMapItem.fromDataItem(event.getDataItem()); final Asset profileAsset = dataMapItem.getDataMap().getAsset("profileImage"); final Bitmap bitmap = loadBitmapFromAsset(profileAsset); Log.d(TAG, ""+bitmap); if (null != bitmap) { ivQrImage.setImageBitmap(bitmap); bitmap.recycle(); } } } } @Override protected void onStart() { super.onStart(); mGoogleApiClient.connect(); } @Override protected void onStop() { if (null != mGoogleApiClient && mGoogleApiClient.isConnected()) { Wearable.DataApi.removeListener(mGoogleApiClient, this); mGoogleApiClient.disconnect(); } super.onStop(); } public Bitmap loadBitmapFromAsset(Asset asset) { if (asset == null) { throw new IllegalArgumentException("Asset must be non-null"); } ConnectionResult result = mGoogleApiClient.blockingConnect(TIMEOUT_MS, TimeUnit.MILLISECONDS); if (!result.isSuccess()) { return null; } // convert asset into a file descriptor and block until it's ready InputStream assetInputStream = Wearable.DataApi.getFdForAsset( mGoogleApiClient, asset).await().getInputStream(); mGoogleApiClient.disconnect(); if (assetInputStream == null) { Log.w(TAG, "Requested an unknown Asset."); return null; } // decode the stream into a bitmap return BitmapFactory.decodeStream(assetInputStream); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.d(TAG,"Connection Failed"); } @Override public void onConnected(Bundle bundle) { Wearable.DataApi.addListener(mGoogleApiClient, this); Wearable.MessageApi.addListener(mGoogleApiClient, this); } 

这就是我所推动的

 private void pushImageToWear() { Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.qr_code); Asset asset = createAssetFromBitmap(bitmap); PutDataMapRequest dataMap = PutDataMapRequest.create("/image"); dataMap.getDataMap().putAsset("profileImage", asset); PutDataRequest request = dataMap.asPutDataRequest(); PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi .putDataItem(mGoogleApiClient, request); } 

我在Android Wear活动的清单中也有以下内容

 <activity android:name=".QRCodeReceptionActivity" android:label="@string/app_name" android:exported="true" android:allowEmbedded="true" android:taskAffinity="" android:theme="@android:style/Theme.DeviceDefault.Light"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

PS我没有什么特别的。 只需按照开发人员网站上提供的教程 。

Solutions Collecting From Web of "无法将数据推送到Android Wear(模拟器)"

对不起,我使用的答案,但我需要声誉50评论:(

我有同样的问题在这里https://stackoverflow.com / … ,但现在我修好了。

好吧,我与你分享我遇到的所有问题:

首先在移动设备的AndroidManifest.xml文件中添加以下内容:

 <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 

第二个让我困惑的是,onDataChanged()只在内部的DataItem被真正“改变”时被调用。 所以它可能是第一次,但后来什么都不会发生。

我改变了手机上的代码,所以每次我尝试发送数据时,都有不同的时间戳:

 Asset asset = createAssetFromBitmap(bitmap); PutDataMapRequest request = PutDataMapRequest.create("/image"); DataMap map = request.getDataMap(); map.putLong("time", new Date().getTime()); // MOST IMPORTANT LINE FOR TIMESTAMP map.putAsset("profileImage", asset); Wearable.DataApi.putDataItem(mGoogleApiClient, request.asPutDataRequest()); 

我发现在这个IOvideo

其余的代码看起来像你的。 我希望这个帮助。

我也有这个问题,花了好几个小时才解决。 我的build议? 使用Android Studio创build一个新项目,然后selectAndroid Wear和Phone + Tablet作为项目types。 这将给你一个工作项目的骨架,然后它只是一个移交到现有的项目与自动生成的骨架的差异的问题。

对我来说,这个问题最终结合了以下几个方面:

  • 在您的defaultConfig构build条目中,applicationId对于可穿戴应用程序和移动应用程序都必须相同,例如: defaultConfig { applicationId "com.rukkus.app" ... }
  • 移动应用程序必须添加wearApp作为依赖项,如下所示: dependencies { ... wearApp project(':wear') }

另外(不可否认,我不知道这是必要的),在示例中,Google开发人员在WearableListenerService的onCreate(而不是如文档所示的onDataChanged方法)中连接到Google API。 所以我的onCreate在WearableListenerService看起来像这样:

 @Override public void onCreate() { super.onCreate(); // create Google Client GoogleApiClient googleApiClient = new GoogleApiClient.Builder(this.ctx) .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() { @Override public void onConnectionFailed(ConnectionResult result){ } }) .addApi(Wearable.API).build(); //connect the client googleApiClient.connect(); Log.i(TAG, "**creating google API client now**"); } 

这花了比我想承认工作更长的时间,所以希望这有助于一些未来的Google员工。

您的设备applicationId和可穿戴的applicationId必须匹配,正如@Bobby在他的回答中所述。 我不需要有可穿戴的应用程序作为依赖。

我发现另一个原因添加到清单。 可穿戴设备和移动应用程序必须使用相同版本的磨损库来构build。 检查你的gradle依赖关系中的版本。

 compile 'com.google.android.support:wearable:1.3.0' compile 'com.google.android.gms:play-services-wearable:8.1.0' 

(我没有足够的声望点评论)