2016-06-21 7 views
0

2つの異なるAndroidスマートウォッチにメッセージを送信したいと思います。 モバイル側でWearable.MessageApi.sendMessageが呼び出され、sendMessageResult.getStatus().isSuccess()が真であるため、メッセージの送信が機能するはずです。 問題は、MyWearableListenerServiceonMessageReceivedメソッドが決してメッセージを受け取らないということです。私は間違って何をしていますか? これは私が使用しているコードです:Android Wearableにメッセージを送信

Android Appの主な活動

左/右の方法は、摩耗側に

public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener { 
private static final String TAG_CONNECTION = "Connection"; 
private static final String TAG_NODES = "Nodes"; 

private static final String START_ACTIVITY_PATH = "/start_MainActivity"; 

private String leftWatch; 
private String rightWatch; 
private GoogleApiClient mGoogleApiClient; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Setting up the Wearable API Client 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this, this) 
      .addApi(Wearable.API) 
      .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { 
       @Override 
       public void onConnected(@Nullable Bundle bundle) { 
        Log.e(TAG_CONNECTION, "Connection established"); 

       } 

       @Override 
       public void onConnectionSuspended(int i) { 
        Log.e(TAG_CONNECTION, "Connection suspended"); 
       } 
      }) 
      .build(); 

    mGoogleApiClient.connect(); 


    // Find the connected watches and store their UUIDs to distinguish at a later moment 
    Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() { 
     @Override 
     public void onResult(@NonNull NodeApi.GetConnectedNodesResult getConnectedNodesResult) { 
      List<Node> nodes = getConnectedNodesResult.getNodes(); 

      if (nodes.isEmpty()) { 
       Log.e(TAG_NODES, "No Nodes found"); 
       return; 
      } 

      rightWatch = nodes.get(0).getId(); 
      Log.e(TAG_NODES,"Node is nearby: "+nodes.get(0).isNearby()); 
      Log.e(TAG_NODES, rightWatch); 
      leftWatch = nodes.get(1).getId(); 
      Log.e(TAG_NODES,"Node is nearby: "+nodes.get(1).isNearby()); 
      Log.e(TAG_NODES, leftWatch); 

     } 
    }); 


} 

@Override 
public void onConnectionFailed(ConnectionResult result) { 

    // Executed upon failed connection to Wearable API 
    // e.g. when Android Wear App is missing 

    Log.e(TAG_CONNECTION, "Connection failed"); 
} 

public void left(View view) { 
    Log.e(TAG_CONNECTION, "Trying to send message to: " + leftWatch); 

    if (!mGoogleApiClient.isConnected()) mGoogleApiClient.connect(); 

    Wearable.MessageApi.sendMessage(mGoogleApiClient, leftWatch, START_ACTIVITY_PATH, new byte[0]).setResultCallback(new ResultCallback<MessageApi.SendMessageResult>() { 
     @Override 
     public void onResult(MessageApi.SendMessageResult sendMessageResult) { 
      if (!sendMessageResult.getStatus().isSuccess()) { 
       Log.e(TAG_CONNECTION, "Failed to send message with status code: " 
         + sendMessageResult.getStatus().getStatusCode()); 
       return; 
      } 
      Log.e(TAG_CONNECTION, "Message successfully sent"); 
     } 
    }); 

} 

public void right(View view) { 
    Log.e(TAG_CONNECTION, "Trying to send message to: " + rightWatch); 

    if (!mGoogleApiClient.isConnected()) mGoogleApiClient.connect(); 

    Wearable.MessageApi.sendMessage(mGoogleApiClient, rightWatch, START_ACTIVITY_PATH, new byte[0]).setResultCallback(new ResultCallback<MessageApi.SendMessageResult>() { 
     @Override 
     public void onResult(MessageApi.SendMessageResult sendMessageResult) { 
      if (!sendMessageResult.getStatus().isSuccess()) { 
       Log.e(TAG_CONNECTION, "Failed to send message with status code: " 
         + sendMessageResult.getStatus().getStatusCode()); 
       return; 
      } 
      Log.e(TAG_CONNECTION, "Message successfully sent"); 
     } 
    }); 


} 

public void both(View view) { 

    Log.e(TAG_CONNECTION, "Trying to send message to: All currently connected watches"); 

    Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() { 
     @Override 
     public void onResult(@NonNull NodeApi.GetConnectedNodesResult getConnectedNodesResult) { 
      List<Node> nodes = getConnectedNodesResult.getNodes(); 

      for (final Node node : nodes) { 
       Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), START_ACTIVITY_PATH, new byte[0]).setResultCallback(new ResultCallback<MessageApi.SendMessageResult>() { 
        @Override 
        public void onResult(MessageApi.SendMessageResult sendMessageResult) { 
         if (!sendMessageResult.getStatus().isSuccess()) { 
          Log.e(TAG_CONNECTION, "Failed to send message with status code: " 
            + sendMessageResult.getStatus().getStatusCode()); 
          return; 
         } 
         Log.e(TAG_CONNECTION, "Message successfully sent to: " + node.getId()); 
        } 
       }); 
      } 

     } 
    }); 

} 

@Override 
protected void onDestroy() { 
    mGoogleApiClient.disconnect(); 
    super.onDestroy(); 
} 
} 

MyWearableListenerService

public class MyWearableListenerService extends WearableListenerService { 

private static final String TAG_SIGNAL = "Signal"; 
private static final String TAG_CONNECTION = "Connection"; 
private static final String START_ACTIVITY_PATH = "/start_MainActivity"; 


@Override 
public void onMessageReceived(MessageEvent messageEvent) { 

    Log.e(TAG_SIGNAL, "Message received: " + messageEvent.getPath()); 

    if (messageEvent.getPath().equals(START_ACTIVITY_PATH)) { 
     Intent intent = new Intent(this, MainWearActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 

    } else super.onMessageReceived(messageEvent); 


} 


@Override 
public void onPeerConnected(Node node) { 
    Log.e(TAG_CONNECTION, "Peer connected: " + node.getId()); 
    super.onPeerConnected(node); 
} 

@Override 
public void onPeerDisconnected(Node node) { 
    Log.e(TAG_CONNECTION, "Peer disconnected: " + node.getId()); 
    super.onPeerDisconnected(node); 
} 
} 

AndroidManifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="laufnavigation.awp.hska.de.androidwearapp"> 

<uses-feature android:name="android.hardware.type.watch" /> 

<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 

<application 

    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 

    android:theme="@android:style/Theme.DeviceDefault"> 
    <uses-library 
     android:name="com.google.android.wearable" 
     android:required="false" /> 

    <activity android:name=".MainWearActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <service 
     android:name=".MyWearableListenerService" 
     android:exported="false"> 
     <intent-filter> 
      <action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" /> 
      <data android:scheme="wear" android:host="*" /> 
     </intent-filter> 
    </service> 

</application> 
</manifest> 

答えて

0

を、メッセージを送っている私はあなたがあなたにパスのプレフィックスを追加する必要があります信じていますインテントフィルタ。お使いのウェアラブルのアンドロイドマニフェストであなたのケース:

私はそれが動作すれば教えて!

関連する問題