2017-03-06 8 views
0

私はウェア・ウォッチからデータ、バイトを送信します。私は自分の電話機でバックグラウンドサービスでデータを受信したいが、onMesageReceivedは決して呼び出されない。私が間違っていることのアイデア?私の最初の試みは働いていたが実用的ではないアプリのアプリを使っていた。モバイル上のGoogle Message APIを使用してサービスでデータを受信する

サービス:AndroidManifestに追加

public class LampControlService extends Service implements MessageApi.MessageListener, GoogleApiClient.ConnectionCallbacks { 
     private static final String TAG = "test"; 
     private static final String WEAR_MESSAGE_PATH = "/message"; 
     private GoogleApiClient mGoogleApiClient; 
     private ArrayAdapter<String> mAdapter; 
     @Override 
     public void onCreate(){ 
      HandlerThread thread = new HandlerThread("test"); 
      thread.start(); 

      //---Build a new Google API client-- 
      mGoogleApiClient = new GoogleApiClient.Builder(this) 
        .addApi(Wearable.API) 
        .addConnectionCallbacks(this) 
        .build(); 

      if (mGoogleApiClient != null && !(mGoogleApiClient.isConnected() || 
        mGoogleApiClient.isConnecting())) 
        mGoogleApiClient.connect();  
     } 

     public int onStartCommand(Intent intent, int flags, int startId){ 
      return START_STICKY; 
     } 

     @Override 
     public void onDestroy() { 
     } 

     @Override 
     public IBinder onBind(Intent intent) { 
      return null; 
     } 

     @Override 
     public void onConnected(Bundle bundle) { 
      Wearable.MessageApi.addListener(mGoogleApiClient, this); 
      Log.d(TAG, "onConnected()"); 
     } 

     @Override 
     public void onMessageReceived(final MessageEvent messageEvent) { 
      Log.d(TAG, "onMessageReceived()"); 
      if (messageEvent.getPath().equalsIgnoreCase(WEAR_MESSAGE_PATH)) { 
       String lamp = new String(messageEvent.getData()); 
       sendLampCommand(lamp); 
      } 
      else { 
    //   super.onMessageReceived(messageEvent); 
      } 
     } 
     // @Override 
     public void onConnectionSuspended(int i) { 
     } 

     private static void sendLampCommand(String lamp){ 
      // Send lamp command to web server 
     } 
    } 

ライン:

<service 
    android:name=".LampControlService"> 
    <service android:name=".DataLayerListenerService"> 
     <intent-filter> 
      <action android:name="com.google.android.gms.wearable.BIND_LISTENER" /> 
     </intent-filter> 
    </service> 
</service> 

答えて

1

私は同じ問題に直面していました。 まず、Googleサービスライブラリをチェックしてください。あなたのデバイスをサポートする最も古いものを使用してください。

あなたのデバイスがスリープ状態かどうかを確認してください。一部のデバイスは正しく動作しません。 は私が意味する、このディレクトリを開きます。

.\Sdk\extras\google\m2repository\com\google\android\gms\play-services-wearable\

とバージョンを確認。 最後のバージョンは使用しないでください。 8.4.0\などを使用してください。

+0

良い提案! – Henrik

1

自分ですべてをやろうとするのではなく、WearableListenerServiceを拡張することをおすすめします。あなたのようなユースケースのための準備ができており、詳細について心配する必要なくすべての基本が確実にカバーされます。

詳しい説明はここにある:https://developer.android.com/training/wearables/data-layer/events.html#Listen(WearableListenerServiceセクションで中)

+0

私はあなたのアドバイスに従って、それは素晴らしい動作します! – Henrik

関連する問題