2016-10-19 2 views
1

Я хочу отправить сообщение на мой телефон в тот момент, когда я запускаю приложение на своих часах. Я не могу заставить это работать. Все наоборот работает каждый раз.Я хочу отправить сообщение с моего Android Watch на свой Android-телефон. Другой способ работает

Mobile манифеста:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="marcokreeft.domotica"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

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

     <service android:name=".ListenerService"> 
      <intent-filter> 
       <!--<action android:name="com.google.android.gms.wearable.BIND_LISTENER" />--> 
       <action android:name="com.google.android.gms.wearable.DATA_CHANGED" /> 
       <action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" /> 
       <data android:scheme="wear" android:host="*" android:pathPrefix="/message_path" /> 
      </intent-filter> 
     </service> 

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

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

</manifest> 

Часы манифеста:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="marcokreeft.domotica"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

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

     <service android:name=".ListenerService"> 
      <intent-filter> 
       <!--<action android:name="com.google.android.gms.wearable.BIND_LISTENER" />--> 
       <action android:name="com.google.android.gms.wearable.DATA_CHANGED" /> 
       <action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" /> 
       <data android:scheme="wear" android:host="*" android:pathPrefix="/message_path" /> 
      </intent-filter> 
     </service> 

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

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

</manifest> 

Mobile listenerservice:

public class ListenerService extends WearableListenerService { 

    @Override 
    public void onMessageReceived(MessageEvent messageEvent) { 

     if (messageEvent.getPath().equals("/message_path")) { 
      final String message = new String(messageEvent.getData()); 
      Log.v("myTag", "Message path received on watch is: " + messageEvent.getPath()); 
      Log.v("myTag", "Message received on watch is: " + message); 
     } 
     else { 
      super.onMessageReceived(messageEvent); 
     } 
    } 
} 

Wear mainactivity:

public class MainActivity extends Activity implements 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener { 

    GoogleApiClient googleClient; 
    private TextView mTextView; 

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

     // Build a new GoogleApiClient for the Wearable API 
     googleClient = 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) { 
       mTextView = (TextView) stub.findViewById(R.id.text); 
      } 
     }); 
    } 

    // Connect to the data layer when the Activity starts 
    @Override 
    protected void onStart() { 
     super.onStart(); 
     googleClient.connect(); 
    } 

    // Send a message when the data layer connection is successful. 
    @Override 
    public void onConnected(Bundle connectionHint) { 
     String message = "Hello mobile\n Via the data layer"; 
     //Requires a new thread to avoid blocking the UI 
     new SendToDataLayerThread("/message_path", message).start(); 
    } 

    // Disconnect from the data layer when the Activity stops 
    @Override 
    protected void onStop() { 
     if (null != googleClient && googleClient.isConnected()) { 
      googleClient.disconnect(); 
     } 
     super.onStop(); 
    } 

    // Placeholders for required connection callbacks 
    @Override 
    public void onConnectionSuspended(int cause) { } 

    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { } 

    class SendToDataLayerThread extends Thread { 
     String path; 
     String message; 

     // Constructor to send a message to the data layer 
     SendToDataLayerThread(String p, String msg) { 
      path = p; 
      message = msg; 
     } 

     public void run() { 
      NodeApi.GetConnectedNodesResult nodes = Wearable.NodeApi.getConnectedNodes(googleClient).await(); 
      for (Node node : nodes.getNodes()) { 
       MessageApi.SendMessageResult result = Wearable.MessageApi.sendMessage(googleClient, node.getId(), path, message.getBytes()).await(); 
       if (result.getStatus().isSuccess()) { 
        Log.v("myTag", "Message: {" + message + "} sent to: " + node.getDisplayName()); 
       } 
       else { 
        // Log an error 
        Log.v("myTag", "ERROR: failed to send Message"); 
       } 
      } 
     } 
    } 
} 

ответ

2
Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).setResultCallback(getConnectedNodesResult -> { 
      List<Node> nodes = getConnectedNodesResult.getNodes(); 
      if(nodes.size() == 0){ 
       Toast.makeText(this,"You are not connected to any mobile device",Toast.LENGTH_LONG).show(); 
       setButtonStatus(true); 
      } else { 
       for (Node node : nodes) { 
        Log.i(TAG, "WEAR sending " + message + " to " + node); 
        Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), message, payload).setResultCallback(new ResultCallback<MessageApi.SendMessageResult>() { 
         @Override 
         public void onResult(MessageApi.SendMessageResult sendMessageResult) { 
          Log.i(TAG, "WEAR Result " + sendMessageResult.getStatus()); 
         } 
        }); 
       } 
      } 

     }); 

Попробуйте этот код, чтобы отправить информацию с телефона на мобильный после установления соединения.

+0

Извините за позднюю реакцию. Этот код не работал для меня = (Отправка с моего телефона на мои часы работает нормально, но отправка чего-то назад не работает – marcokreeft

Смежные вопросы