Android Wear将数据发送到Android手机,但手机似乎永远不会收到它

前端之家收集整理的这篇文章主要介绍了Android Wear将数据发送到Android手机,但手机似乎永远不会收到它前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
简短摘要:我正在尝试使用PutDataRequest和GoogleApiClient将 Android Wear手表中的数据发送到Android手机.日志似乎表明数据已成功发送,但onDataChanged永远不会触发.我使用的是Android Studio 1.0.2.我没有使用任何模拟器,而是使用我自己的Android Wear手表 – 我已配对并通过手机上的Android Wear设备和Android Wear应用程序启用调试.在手机和Wear的AndroidManifest.xml上,我都包含了com.google.android.gms.version.

在Android手机(Android 4.4.4版本)上,我使用了一个侦听器服务,该服务通过AndroidManifest.xml绑定,并通过手机上的主要活动启动.从日志中,我可以确认在手机上成功创建了服务,但是没有收到任何数据(onDataChanged永远不会触发 – 准确地说).

  1. <!-- Phone manifest,registers the listener -->
  2. <service android:name=".DataLayerListenerService" >
  3. <intent-filter>
  4. <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
  5. </intent-filter>
  6. </service>

这是在手机上运行的监听服务:

  1. public class DataLayerListenerService extends WearableListenerService {
  2. private static final String TAG = DataLayerListenerService.class.getName();
  3. private GoogleApiClient mGoogleApiClient;
  4.  
  5. private static final String WEARABLE_DATA_PATH = "/audio";
  6.  
  7. @Override
  8. public void onCreate() {
  9. // I can see this fires properly on the Android mobile phone
  10. Logger.d(TAG,"onCreate");
  11. }
  12.  
  13. @Override
  14. public void onDataChanged(DataEventBuffer dataEvents) {
  15. // This never fires on the Android mobile phone,even though Wear says data was sent successfully
  16. Logger.d(TAG,"on change");
  17. }
  18. }

在Wear设备上,我有一个主要活动,可以创建一个Google API客户端.我使用UI按钮从音频生成输入(代码显示),我知道这是因为日志记录正常工作.然后我尝试将这些数据从磨损设备发送到手机.在日志中,我看到“结果可用.状态:状态{statusCode = SUCCESS,resolution = null}”(我使用结果回调来跟踪).

  1. public class MainActivity extends Activity implements
  2. GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener {
  3. private static final String TAG = MainActivity.class.getName();
  4. private static final int SPEECH_REQUEST_CODE = 1;
  5.  
  6. private static final int RECORDER_SAMPLERATE = 44100;
  7. private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_STEREO;
  8. private static final int RECORDER_AUdio_ENCODING = AudioFormat.ENCODING_PCM_16BIT;
  9.  
  10. private TextView mTextView;
  11. private AudioRecord recorder;
  12. private int bufferSize = 0;
  13. private Thread recordingThread = null;
  14. private GoogleApiClient mGoogleApiClient;
  15. private volatile boolean isRecording;
  16.  
  17. @Override
  18. protected void onCreate(Bundle savedInstanceState) {
  19. Log.d(TAG,"Creating MainActivity");
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.activity_main);
  22. final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
  23. stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
  24. @Override
  25. public void onLayoutInflated(WatchViewStub stub) {
  26. mTextView = (TextView) stub.findViewById(R.id.text);
  27. }
  28. });
  29.  
  30. mGoogleApiClient = new GoogleApiClient.Builder(this)
  31. .addApi(Wearable.API)
  32. .addConnectionCallbacks(this)
  33. .addOnConnectionFailedListener(this)
  34. .build();
  35. }
  36.  
  37. // Connect to the data layer when the Activity starts
  38. @Override
  39. protected void onStart() {
  40. super.onStart();
  41. mGoogleApiClient.connect();
  42. }
  43.  
  44. protected void onResume() {
  45. if (null != mGoogleApiClient && !mGoogleApiClient.isConnected()) {
  46. mGoogleApiClient.connect();
  47. }
  48. super.onResume();
  49. }
  50.  
  51. @Override
  52. protected void onStop() {
  53. if (null != mGoogleApiClient && mGoogleApiClient.isConnected()) {
  54. mGoogleApiClient.disconnect();
  55. }
  56. super.onStop();
  57. }
  58.  
  59. // Placeholders for required connection callbacks
  60. @Override
  61. public void onConnectionSuspended(int cause) {
  62. Log.d(TAG,"Connection suspended");
  63. }
  64.  
  65. @Override
  66. public void onConnectionFailed(ConnectionResult connectionResult) {
  67. Log.d(TAG,"Connection Failed");
  68. }
  69.  
  70. @Override
  71. public void onConnected(Bundle connectionHint) {
  72. Log.d(TAG,"Connected successfully");
  73. }
  74.  
  75. // This is invoked from the UI,via a helper method not shown. Logs show the method is invoked fine.
  76. private void processRawAudioData() {
  77. byte data[] = new byte[bufferSize];
  78. int read = 0;
  79. while(isRecording) {
  80. read = recorder.read(data,bufferSize);
  81.  
  82. if(AudioRecord.ERROR_INVALID_OPERATION != read) {
  83. Log.d(TAG,"Successfully read " + data.length + " bytes of audio");
  84. Log.d(TAG,"Initial ten bytes: " + data[0] + data[1] + data[2] + data[3]
  85. + data[4] + data[5] + data[6] + data[7] + data[8] + data[9] + data[10]);
  86.  
  87. Asset myAsset = Asset.createFromBytes(data);
  88. PutDataRequest request = PutDataRequest.create("/audio");
  89. // might need to change time each time for other end to see change.
  90. request.putAsset("profileImage",myAsset);
  91. PendingResult<DataApi.DataItemResult> result =
  92. Wearable.DataApi.putDataItem(mGoogleApiClient,request);
  93. result.setResultCallback(new ResultCallback<DataApi.DataItemResult>() {
  94. @Override
  95. public void onResult(DataApi.DataItemResult dataItemResult) {
  96. // LOGS SHOW STATUS "MainActivity﹕ result available. Status: Status{statusCode=SUCCESS,resolution=null}"
  97. Log.d(TAG,"result available. Status: " + dataItemResult.getStatus());
  98. }
  99. });
  100. }
  101. }
  102. }
  103. }

解决方法

为了让WearableListenerService触发’onDataChanged’事件,主应用程序和可穿戴应用程序中的applicationId必须匹配(build.gradle文件).

另外,你不能发送静态数据,数据必须改变.这意味着PutDataMapRequest对象中的数据必须更改.

猜你在找的Android相关文章