Android - может ли сервис сообщать о вызове активности со статусом - PullRequest
1 голос
/ 30 июня 2010

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

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

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

Спасибо Chris

Ответы [ 3 ]

2 голосов
/ 02 января 2013

Самый простой способ, который я нашел, это использовать 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
        }            
    }
};
0 голосов
/ 30 июня 2010

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

0 голосов
/ 30 июня 2010

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

...