2010-09-20 8 views
1

Я начинаю изучать развитие Android, поэтому мои знания в настоящее время ограничены. Я пытаюсь играть с трансляциями, но я застрял, и я не понимаю, что я делаю неправильно. То, что я пытаюсь сделать, это просто показать простой тост из широковещательного приемника.Intent & BroadcastReceiver

Намерение обычай намерение определено в манифесте:

<receiver android:name=".receiver.SendReceiver" android:enabled="true"> 
    <intent-filter> 
    <action android:name="com.android.terralink.sem.SOCCIA"></action> 
    </intent-filter> 
</receiver> 

Приемник определяется следующим образом:

public class SearchReceiver extends BroadcastReceiver { 
    public void onReceive(Context context, Intent intent){ 
    Toast.makeText(context, "asasa", Toast.LENGTH_SHORT).show(); 
    } 
} 

В первом действии вызывается из приложения, что я делаю это:

Intent i2 = new Intent(this, SearchReceiver.class); 
i2.setAction(CUSTOM_INTENT); 
sendBroadcast(i2); 

Я проверил, что код Тоста работает в Activity, но не в трансляции. Это потому, что Toast не может быть показан в контексте приемника?

Кроме того, еще один вопрос касается структуры приложения Android. Если из моей активации я разрешаю пользователю вставлять строку в текстовое поле и отправлять (привязка кнопки), и я хочу, чтобы приложение выполняло поиск в фоновом режиме и уведомляло пользователя, как только результат будет готов, правильно выполните следующие действия ? 1) Основная деятельность с окном поиска 2) запустить сервис, который извлекает данные, посылаю широковещательные 3) Приемник notofy пользователя и открыть активность, которая показывает результат

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

Thanks

ответ

2

я узнал, что проблема была в манифесте, когда я зарегистрировал приемник. На самом деле можно показать Toast в приемнике без каких-либо проблем. Приветствия

0

Вы не можете показать Тост в широковещательном приемнике. Android, как правило, отключает ваш процесс после завершения вызова onReceive() (для которого в настоящий момент разрешено принимать не более 10 секунд). Поскольку тост показан асинхронно, я думаю, что его контекст убит, прежде чем он будет отображаться.

В качестве альтернативы Toast вы можете взглянуть на концепцию RemoveViews для обновления интерфейса в другом процессе от приемника. Или запустите действие, которое показывает тост и немедленно закрывается.

Для вашего вопроса № 2, я предлагаю вам сохранить активность работает после того, как кнопка поиска нажата и начать AsyncTask для поиска, который обновляет результаты поиска по мере их поступления.

+0

да имеет смысл, что я должен был происходит, просто не был уверен на 100%. большое спасибо – CLod

0

Чтобы показать тост из вещательного приемника можно использовать следующий код:

public class ServiceReceiver extends BroadcastReceiver { 

    Context context; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     this.context = context; 
     MyPhoneStateListener phoneListener = new MyPhoneStateListener(); 
     TelephonyManager telephony = (TelephonyManager) context 
       .getSystemService(Context.TELEPHONY_SERVICE); 
     telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); 
    } 

    private class MyPhoneStateListener extends PhoneStateListener { 

     @Override 
     public void onCallStateChanged(int state, String incomingNumber) { 
      super.onCallStateChanged(state, incomingNumber); 
      switch (state) { 
      case TelephonyManager.CALL_STATE_IDLE: 
       Toast.makeText(context, "Idle call", Toast.LENGTH_LONG).show(); 
       Log.d("***************************DEBUG", "IDLE"); 
       break; 
      case TelephonyManager.CALL_STATE_OFFHOOK: 
       Log.d("***************************DEBUG", "OFFHOOK"); 
       break; 
      case TelephonyManager.CALL_STATE_RINGING: 
       Toast.makeText(context, "Ringing call", Toast.LENGTH_LONG) 
         .show(); 
       Log.d("***************************DEBUG", "RINGING"); 
       break; 
      } 
     } 
    } 
} 
Смежные вопросы