0

У меня есть лицо Android Wear, созданное интерактивным способом. На лице у меня есть область сетки, где я слушаю для onTapCpmmand:Android Wear, передающие данные от Activity back to watchface

else if (x >= x6 & x <= x9 & y >= (y5 - (gridYUnit/2)) & y <= (y8 - (gridYUnit/2))) { 
      activityLaunched = new Intent(MyWatchFace.this, ActivityLaunched.class); 
      activityLaunched .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(activityLaunched); 
     } 

МОСОЙ активность затем берет на себя. В рамках этой деятельности, у меня есть три варианта, в основном ImageButtons, с соответствующим onClickHandlers:

optionOne.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      confirmationIntent = new Intent(ActivityLaunched.this, ConfirmationActivity.class); 
      confirmationIntent .putExtra(ConfirmationActivity.EXTRA_ANIMATION_TYPE, 
        ConfirmationActivity.SEARCH_SERVICE); 
      confirmationIntent .putExtra(ConfirmationActivity.EXTRA_MESSAGE, 
        getString(R.string.option_one)); 

      currentOption = "1"; 
      broadcastIntent(currentOption); 
      startActivity(confirmationIntent); 
      ActivityLaunched.this.finish(); 

     } 
    }); 

С broadcastIntent обработки радиопередачи:

public void broadcastIntent(String currentOption){ 


    Intent optionUpdated = new Intent(); 
    optionUpdated .setAction("com.example.packagename...."); 
    optionUpdated .putExtra("Option", currentOption); 
    sendBroadcast(optionUpdated); 
} 

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

Теперь, когда был выбран вариант, я настроил трансляцию для получения простого тоста. Тем не менее, я не могу делать больше с этими данными, кроме как показать тост.

В моей BroadcastReceiver:

public void onReceive(Context context, Intent intent) { 
    Toast.makeText(context, "Option Updated." + intent.getStringExtra("Option"), Toast.LENGTH_LONG).show(); 


    currentOption = intent.getStringExtra("Option"); 
    sendOption .setAction("com.example.packagename...."); 
    sendOption tion.putExtra("Option", currentOption); 
    context.sendBroadcast(sendOption); 
    Log.d(TAG, "THIS WORKS : " + currentOption); 
} 

В моей WatchFaceService я зарегистрировал приемник вместе с batteryinforeceivers, а также любые другие системы из них, как обычно. Я получаю сообщения в моем BroadcastReceiver

Назад снова к моему WatchFaceService, это где я получаю вопросы, я не получаю никаких обновлений:

optionUpdateReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       Bundle results = getResultExtras(true); 
       String option = results.getString("Option"); 
       Log.d(TAG, " NOTHING SHOWING HERE " + currentOption + option); 
      } 
     }; 

Я попытался с помощью сеттеров и добытчиками, которые потребовался второй запуск активности, чтобы получить реальную стоимость.

Любые идеи относительно того, что я делаю неправильно?

Я пробовал следовать другим ответам и идеям здесь, а также другим внешним источникам. Но поскольку это Android Wear, с которым я работаю, столь же изменчивым, как и у ОС, все, что я пробовал, было предложено для Android, похоже, неэффективно для Android Wear.

Спасибо, Эммет

+0

Там очень мало фундаментальный Android код (услуги, BroadcastReceivers и т.д.), которые не работают в Wear. Это просто Android под ним. Но вернемся к вашему вопросу ... Я не думаю, что вы вообще должны использовать BroadcastReceivers. Либо отправьте намерение от своей деятельности прямо к службе часовых служб, либо (возможно, проще) используйте такую ​​библиотеку, как https://github.com/greenrobot/EventBus – String

+0

@String, спасибо, я проверю это, я пытался отправьте данные с помощью намерения, но мне пришлось перезапустить активность для извлечения данных из предыдущего. Возможно, это был вопрос времени, но я не мог понять. Но, опять же, спасибо, я проверю вашу ссылку – mangledBadger

ответ

1

Ваши часы обслуживания лицо не гарантируется быть запущен, когда другая деятельность, поверх него. Он может быть сохранен, но в равной степени он может быть снесен. Вы можете попытаться зарегистрировать приемник в WatchFaceService.onCreate() и WatchFaceService.onDestroy(), но это не тот способ, который гарантированно будет работать.

Вместо этого внутри Activity сохраните информацию в SharedPreferences, а затем прочитайте информацию внутри вас. Когда ваше лицо будет создано, прочитайте значение из prefs (у вас также может быть слушатель для настроек, чтобы обновить их изменения, когда они меняются, когда циферблат уже запущен).

+0

Мне действительно удалось ее решить/обеспечить работу, которая в настоящее время в порядке, см. Сообщение ниже – mangledBadger

0

Мне действительно удалось это решить.

Я создал второй широковещательный приемник, передал его обратно на поверхность, а затем переопределил методы регистрации/отмены регистрации для обработки передачи.

Первоначально, когда я зарегистрировал второй приемник, он рассылал файлы журнала и разбивал часы. Причина, по которой мне пришлось переопределить, - обработать прохождение фильтра, который по какой-то странной причине не может быть выполнен из watchfacecanvas.engine.

Во всяком случае, сейчас работает хорошо, но спасибо за помощь

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