Android - может ли служба сообщать о вызове Activity со статусом

Есть ли способ, с помощью которого Служба может сообщить о вызывающей активности, когда Служба достигла определенного этапа обработки?

Например: рассмотрим действие музыкального проигрывателя, которое инициирует фактическое воспроизведение музыки в фоновом режиме в качестве службы Android. Я хочу обнаружить и сообщить об активности, когда служба достигла медиаплеера onPrepared. Есть ли способ, с помощью которого Служба может сообщить вызывающему действию, когда вызывается onPrepared MediaPlayer, чтобы сообщить действию, что звук подготовлен и готов к воспроизведению?

В основном я смотрю, есть ли обходной путь, вместо того, чтобы иметь поток в действии, постоянно пингуя, чтобы проверить, достигла ли Служба onPrepared.

Спасибо Крис


person Chris    schedule 29.06.2010    source источник


Ответы (3)


Самый простой способ, который я нашел, — использовать LocalBroadcast, который доступен в библиотеке поддержки. Вот пример:

К вашим услугам:

String action = "status"; // arbitrary string
private void updateStatus(){
    Intent intent = new Intent(action);
    // fill the intent with other variables you want to pass
    LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
}

В вашей деятельности:

@Override
protected void onCreate(Bundle savedInstanceState) {
     LocalBroadcastManager.getInstance(context).registerReceiver(receiver,new IntentFilter(action));
}


@Override
protected void onResume() {
    LocalBroadcastManager.getInstance(context).registerReceiver(receiver,new IntentFilter(action));
}

@Override
protected void onPause() {
    LocalBroadcastManager.getInstance(context).unregisterReceiver(receiver);
}

String action = "status";
BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String intentAction = intent.getAction();
        if(intentAction.equals(action){
            // Process the status from the service
        }            
    }
};
person iTech    schedule 02.01.2013

Вы всегда можете использовать интерфейсы для связи между действиями и сервисом. Сразу после того, как вы подключились к службе, вы устанавливаете для нее свой интерфейс, и если служба переходит в какое-то состояние, в котором вы хотите, чтобы она сообщалась обратно активности, вы просто вызываете для нее соответствующий метод.

person Andres    schedule 30.06.2010

Вы можете передавать интерфейсы как parceables в своем намерении запуска. Проверьте источник приложение Google I/O 2010 лайкните этот вопрос.

person alexanderblom    schedule 30.06.2010