2016-12-24 2 views

ответ

1

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

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

private BroadcastReceiver receiver; 

@Override 
public void onCreate(Bundle savedInstanceState){ 

    IntentFilter filter = new IntentFilter(); 
    filter.addAction("BROADCAST_ZIP_CODE"); 

    receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     //get data from the intent and display it 
     String zipCode = intent.getStringExtra("ZIP_CODE"); 
     //do something with the zipCode 
    } 
    }; 
    registerReceiver(receiver, filter); 
} 


@Override 
protected void onDestroy() { 
    if (receiver != null) { 
    unregisterReceiver(receiver); 
    receiver = null; 
    } 
    super.onDestroy(); 
} 

В вашей службы:

public class ZipCodeService extends Service { 

    @Override 
    public void onCreate() { 
     String zipCode = "your_zip_code"; 
     Intent intent = new Intent(); 
     intent.setAction("BROADCAST_ZIP_CODE"); 
     intent.putExtra("ZIP_CODE",zipCode); 
     sendBroadcast(intent); 
    } 

}

+0

Что добавить на метод onReceive? для получения данных – user3218829

+0

@ user3218829, пожалуйста, ознакомьтесь с документацией на Android о том, как извлекать данные из намерений. – aashrey99

+0

извините мой bad - адрес = aim.getStringExtra ("ZIP"); – user3218829

0

Вы можете достичь двумя способами.

  1. Использование службы Bound и регистрация вашей деятельности в качестве объекта-слушателя с помощью Службы, если ваша деятельность реализует интерфейс прослушивателя. Документы here.

  2. Отправка локальной трансляции с Сервиса на вашу деятельность. (См. Ответ JackD)

В зависимости от того, как вы создали свое приложение, вы можете предпочесть одно решение больше, чем другое. Документы Android помогут лучше всего.

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