Из примеров это выглядело просто.Может быть, вы можете показать мне, что я сделал не так.Я не могу получить действие для получения широковещательной рассылки, отправленной из локальной службы.
У меня есть Activity1, которая запускает Service1:
startService(new Intent(Activity1.this, Service1.class));
Activity1, затем запускает Activity2:
startActivity(new Intent(Activity1.this, Activity2.class));
Service1, локальная служба, прослушивает загрузки:
protected final BroadcastReceiver service2DownloadBroadcastReceiver = new BroadcastReceiver()
{
public void onReceive(final Context context, final Intent intent)
{
...
broadcastDownloadFinished(Uri.fromFile(downloadedFile));
Затем широковещательный получатель Service1 передает свое собственное сообщение:
protected Intent broadcastDownloadFinished(final Uri uri)
{
final Intent intent = new Intent(ACTION_DOWNLOAD_FINISHED).setData(checkNotNull(uri));
sendBroadcast(intent);
Activity2, которое находится на переднем плане ввремя прослушивает намерение ACTION_DOWNLOAD_FINISHED, используя собственный широковещательный приемник:
private final BroadcastReceiver activity2DownloadBroadcastReceiver = new BroadcastReceiver()
{
public void onReceive(final Context context, final Intent intent)
{
Log.i(Activity2.class.getSimpleName(), "Received download event: " + intent.getAction() + " " + intent.getData());
Activity2, конечно, регистрирует получателя:
protected void onResume()
{
super.onResume();
final IntentFilter downloadIntentFilter = new IntentFilter();
downloadIntentFilter.addAction(ACTION_DOWNLOAD_FINISHED);
registerReceiver(activity2DownloadBroadcastReceiver, downloadIntentFilter);
В случае, если это имеет значение, ACTION_DOWNLOAD_FINISHED
это что-то вроде"com.example.intent.action.DOWNLOAD_FINISHED"
.
Служба 1 получает событие диспетчера загрузки в своем приемнике и, по-видимому, транслирует свое собственное пользовательское событие, но активность 2, похоже, никогда не получает его.Что я сделал не так?Это проблема для передачи намерения в середине обработки другого?(Я бы так не подумал - это асинхронно, верно?)
Обновление: Просто чтобы убедиться, что нет проблем с отправкой трансляции в середине приема трансляции,Я изменил свой широковещательный код, чтобы фактически выполнить трансляцию через три секунды в главном потоке:
Log.i(getClass().getSimpleName(), "...ready to broadcast");
final Intent intent = new Intent(ACTION_DOWNLOAD_FINISHED).setData(checkNotNull(uri));
mainThreadHandler.postDelayed(new Runnable()
{
public void run()
{
Log.i(getClass().getSimpleName(), "...broadcasting");
sendBroadcast(intent);
Log.i(getClass().getSimpleName(), "...broadcasted");
}
}, 3000);
Log.i(getClass().getSimpleName(), "...scheduled to broadcast");
Как и ожидалось, в журнале говорится:
...ready to broadcast
...scheduled to broadcast
...broadcasting
...broadcasted
Пока ничего не получено в действии,Пожалуйста, помогите.