Связь между деятельностью / услугой и поставщиком виджетов? - PullRequest
0 голосов
/ 30 апреля 2018

Мое приложение имеет один виджет, оно имеет 4 кнопки, когда пользователь нажимает кнопки на виджете. Я должен отправить некоторый код на подключенный Bluetooth. В классе обслуживания Bluetooth я передаю Bluetooth-адрес Mac для подключения к внешним устройствам Bluetooth. Как я могу общаться между сервисом и виджетом или виджетом для активности в Android. Если я использую getService, мой Bluetooth отключится. Есть ли способ вызвать методы службы или методы деятельности в классе appWidgetProvider

1 Ответ

0 голосов
/ 30 апреля 2018

Лучшее, что вы можете сделать в appWidgetProvider, - это отправлять сообщения вашей службе / деятельности через намерения. Вы можете использовать LocalBroadcastManager в библиотеке поддержки v4 для внутренней трансляции сообщений только в ваше приложение. Пример:

@Override
public void onCreate(Bundle savedInstanceState) {

  ...

  // Register to receive messages.
  // We are registering an observer (mMessageReceiver) to receive Intents
  // with actions named "custom-event-name".
  LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
      new IntentFilter("custom-event-name"));
}

// Our handler for received Intents. This will be called whenever an Intent
// with an action named "custom-event-name" is broadcasted.
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
    // Get extra data included in the Intent
    String message = intent.getStringExtra("message");
    Log.d("receiver", "Got message: " + message);
  }
};

@Override
protected void onDestroy() {
  // Unregister since the activity is about to be closed.
  LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
  super.onDestroy();
}

А у вашего провайдера виджетов:

private void sendMessage() {
  Log.d("sender", "Broadcasting message");
  Intent intent = new Intent("custom-event-name");
  // You can also include some extra data.
  intent.putExtra("message", "This is my message!");
  LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
...