2016-03-30 38 views
0

私はAndroidアプリをダウンロードし、Android Wearプロジェクトのウォッチフェイスを実装しようとしています。目標は、電話機からウェアデバイスに温度情報を渡し、ウォッチフェイスを更新することです。Android Wear onDataChangedが呼び出されていません

私が試してみました:私の携帯電話側で 1.同じパッケージ名を 2.同じAPPLICATIONID 3.同じ依存関係のバージョン 4.同じ権限 5.私は(私のデータが毎回異なっていることを確かに知ってそう更新が行われなければなりません)

私はデータを同期させなければならないので、データ項目も使用します。

私はまず電話機でアプリケーションを実行し、正しく動作し、データ項目を更新してウェアデバイスに送信することを確認します。そして、私は自分のウェアモジュールを実行し、onDataChangedメソッドが呼び出されないので何も受け取りません。

@Override 
    public void onDataChanged(DataEventBuffer dataEvents) { 
     Log.v("SunshineWatchFace", "onDataChanged"); 
     try{ 
      for(DataEvent dataEvent: dataEvents){ 
       if(dataEvent.getType() != DataEvent.TYPE_CHANGED){ 
        continue; 
       } 

       DataItem dataItem = dataEvent.getDataItem(); 
       if(dataItem.getUri().getPath().compareTo("weather_update") == 0){ 
        DataMap dataMap = DataMapItem.fromDataItem(dataItem).getDataMap(); 
        minTemp = dataMap.getString("min-temp"); 
        maxTemp = dataMap.getString("max-temp"); 
        weatherImage = dataMap.getInt("weather-image"); 
        Log.v("SunshineWatchFace", minTemp); 
        Log.v("SunshineWatchFace", maxTemp); 
       } 
      } 
      dataEvents.release(); 
      if(!isInAmbientMode()){ 
       invalidate(); 
      } 
     }catch (Exception e){ 
      Log.v("SunshineWatchFace",e.getMessage()); 
     } 
    } 

が本当に任意のヘルプ

GitHub_Link

をお願い申し上げ、私はこの問題を解決しようとする多くの時間を費やしてきました。

答えて

1

訂正してGitHubでプルリクエストを送信しました。あなたは自分のGoogleのクライアント:)

mGoogleApiClient.connect(); 

そして、あなたのコード内のいくつかの追加の小さな変更(リファクタリング)を接続することを忘れよう は思えます。

0

変更されたイベントにリスナーとしてCanvasWatchFaceServiceを追加しましたか?

Wearable.DataApi.addListener(mGoogleApiClient, this); 
0

場合あなたは常にチェックする必要があります:あなたの携帯電話は、パッケージ名は、あなたがそれを利用している

  • 同じ摩耗
  • に接続されている

    1. onConnectedで必ず呼び出す作ります両方のアプリのGoogle Playサービスバージョン
    2. モバイルとウェアの両方に同じキーストアを使用して署名しています

    私は最後のものを見つけ出すまで、私は10日間GoUbiquitousに捕まってしまった: -

  • 1

    \あなたのウォッチフェイスクラスでBroadcastReceiverを作成し、registerReceiver()メソッドの下でそれを登録する必要があります。

    例えば、最初のBroadcastReceiverを作成します。

    final BroadcastReceiver mWeatherReceiver = new BroadcastReceiver() { 
         @Override 
         public void onReceive(Context context, Intent intent) { 
          // Get the data from the intent here 
          // and set the variables you're going to use in your onDraw method 
         } 
    }; 
    

    は次に受信機を登録し、例えば:

    private void registerReceiver() { 
    
         //This is where you have the default watch face receiver 
         // Register your new weather receiver 
         IntentFilter weatherFilter = new IntentFilter("ACTION_WEATHER_CHANGED"); 
         SunshineWatchFace.this.registerReceiver(mWeatherReceiver, weatherFilter); 
        } 
    

    最後に、あなたのonDataChanged WatchListenerService上にテントを介してデータを送信しますBroadcastReceiver。例:

     @Override 
          public void onDataChanged(DataEventBuffer dataEvents) { 
    
          // Check the data type 
            if (event.getType() == DataEvent.TYPE_CHANGED) { 
            // Get the data map 
            dataMap = DataMapItem.fromDataItem(event.getDataItem()).getDataMap(); 
            Log.i(LOG_TAG, "DataMap received on watch: " + dataMap); 
    
            // Get the data map items 
            String sunshine_temperature_high = dataMap.getString("sunshine_temperature_high"); 
            String sunshine_temperature_low = dataMap.getString("sunshine_temperature_low"); 
    
            // Create the intent 
            Intent send_weather = new Intent("ACTION_WEATHER_CHANGED"); 
            send_weather.putExtra("sunshine_temperature_high", sunshine_temperature_high); 
            send_weather.putExtra("sunshine_temperature_low", sunshine_temperature_low); 
            // Broadcast it 
            sendBroadcast(send_weather); 
    
           } 
           else if (event.getType() == DataEvent.TYPE_DELETED) { 
            // DataItem deleted 
           } 
        } 
    
    関連する問題