2016-05-26 2 views
1

Я пытаюсь отправить простое сообщение из моего изнашивания [Emulator] на мой телефон Android. Сообщение должно быть отправлено в соответствии с моими журналами на изнашивании, но он не запускает мой метод showToast на моем телефоне [он должен срабатывать при получении сообщения]. У кого-нибудь есть идея, что я могу делать неправильно?Сообщение не получено при отправке сообщения от Wear to Phone [MessageAPI]

Это моя одежда Manifest

<manifest package="georgikoemdzhiev.weartesttwo" 
     xmlns:android="http://schemas.android.com/apk/res/android"> 

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

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

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@android:style/Theme.DeviceDefault"> 
    <uses-library 
     android:name="com.google.android.wearable" 
     android:required="false"/> 

    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     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> 
</application> 

Это мой мобильный манифеста

<manifest package="georgikoemdzhiev.weartesttwo" 
     xmlns:android="http://schemas.android.com/apk/res/android"> 

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

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 

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

    <service android:name=".ReceiveMessageService"> 
     <intent-filter> 
      <action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" /> 
      <data android:scheme="wear" android:host="*" android:pathPrefix="/prefix" /> 
     </intent-filter> 
    </service> 
</application> 

Это моя Wear логика [У меня есть кнопка, которая отправляет showToast сообщение]

public class MainActivity extends WearableActivity { 
private static final long CONNECTION_TIME_OUT_MS = 2500; 
private static final String TAG = MainActivity.class.getSimpleName(); 
private CircularButton mSendButton; 
private List<Node> myNodes = new ArrayList<>(); 


private static final SimpleDateFormat AMBIENT_DATE_FORMAT = 
     new SimpleDateFormat("HH:mm", Locale.UK); 

private BoxInsetLayout mContainerView; 
private TextView mTextView; 
private TextView mClockView; 
private GoogleApiClient mClient; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    setAmbientEnabled(); 
    mSendButton = (CircularButton)findViewById(R.id.sendToast); 
    mSendButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      sendToastMessage(); 
     } 
    }); 
    mClient = new GoogleApiClient.Builder(this) 
      .addApiIfAvailable(Wearable.API) 
      .build(); 

    getNodes(); 

    mContainerView = (BoxInsetLayout) findViewById(R.id.container); 
    mTextView = (TextView) findViewById(R.id.text); 
    mClockView = (TextView) findViewById(R.id.clock); 
} 

private void sendToastMessage() { 
    Log.d(TAG,"Sending message... Nodes List size:" + myNodes.size()); 
    // send toast message logic... 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      for(Node n:myNodes) { 
       Log.d(TAG,"Sending message to node:"+n.getDisplayName()); 
       Wearable.MessageApi.sendMessage(mClient,n.getId(),"/showToast",null); 
      } 
     } 
    }); 
} 

private List<Node> getNodes(){ 
    new Thread(new Runnable() { 
     // 
     @Override 
     public void run() { 
      Log.d(TAG,"Getting nodes..."); 

      mClient.blockingConnect(CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS); 

      NodeApi.GetConnectedNodesResult result = Wearable.NodeApi.getConnectedNodes(mClient).await(); 
      List<Node> nodes = result.getNodes(); 

      for(Node n:nodes){ 
       Log.d(TAG,"Adding Node: "+n.getDisplayName()); 
       myNodes.add(n); 

      } 

      Log.d(TAG,"Getting nodes DONE!"); 
     } 
    }).start(); 


    return null; 
} 
} 

Это мой ReceiveMessageService в Mobile

public class ReceiveMessageService extends WearableListenerService { 


@Override 
public void onMessageReceived(MessageEvent messageEvent) { 
    Log.d("ReceiveMessageService","onMessageReceived"); 
    //if(messageEvent.getPath().equals("/showToast")) { 
     showToast(messageEvent.getPath()); 
    //} 
} 


private void showToast(String message) { 
    Toast.makeText(this, message, Toast.LENGTH_LONG).show(); 
} 
} 

Это мой MainActivity в Mobile

public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener{ 
private static final String TAG = MainActivity.class.getSimpleName(); 
private GoogleApiClient mGoogleApiClient; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addApi(Wearable.API) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .build(); 
    mGoogleApiClient.connect(); 

} 



@Override 
public void onConnected(@Nullable Bundle bundle) { 
    Log.d(TAG,"onConnected"); 
} 

@Override 
public void onConnectionSuspended(int i) { 
    Log.d(TAG,"onConnectionSuspended"); 
} 

@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
    Log.d(TAG,"onConnectionFailed"); 
} 

ответ

3

Похоже, что вы используете неправильный PATHPREFIX в вашем мобильном стороне AndroidManifest. Попробуйте заменить

<data android:scheme="wear" android:host="*" android:pathPrefix="/prefix" /> 

с

<data android:scheme="wear" android:host="*" android:pathPrefix="/showToast" /> 

Edit

Также имейте в виду, что MessageApi не гарантирует доставки сообщения, даже если она возвращает успешный код результата, как Google, document заявил :

Примечание: успешный код результата не гарантирует доставку сообщения. Если вашему приложению требуется надежность данных, используйте объекты DataItem или класс ChannelApi для отправки данных между устройствами.

+0

Привет! Спасибо за ваш ответ! Будет проверять это сейчас. Я никогда не понимал, зачем мне нужен этот путь. :) –

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