2013-12-23 4 views
0

Я запускаю действие при получении звонка с телефона, однако это не заканчивается (или закрывается) после того, как вызов будет отвечать или отменен. Мне нужно закончить деятельность в моем другом, если не уверен, как это сделать? Какой был бы лучший метод?Завершить работу Android в BroadcastReceiver?

public class CallReceiver extends BroadcastReceiver { 
    Intent i; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
     assert state != null; 
     if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
      i = new Intent(context, IncomingCall.class); 
      i.putExtras(intent); 
      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_USER_ACTION); 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      context.startActivity(i); 
     } 
     else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) { 
      // WHAT GOES HERE? 
     } 
    } 
} 

ответ

3

Вы можете использовать LocalBroadcast Manager для отправки локального широковещательного сообщения внутри else заявления внутри onReceive. В действии (которое вы хотите закрыть) вы можете зарегистрировать приемник для получения местных трансляций. Всякий раз, когда будет вызываться часть else, вы можете отправить местную трансляцию, которая будет получена вашей деятельностью. Затем в вашей деятельности вы можете позвонить finish().

Для LocalBroadcastManager, документы говорят:

Это помощник для регистрации и отправки трансляции местных намерений объектов в рамках процесса. Это имеет ряд преимуществ перед отправкой глобальных передач с помощью sendBroadcast (Intent). Один из них заключается в том, что данные, которые вы передаете, не покидают ваше приложение, поэтому не нужно беспокоиться о утечке конфиденциальных данных. `

Эта трансляция является только локальной для вашего приложения. Так же безопасно. Вы можете посмотреть здесь, как его использовать: how to use LocalBroadcastManager?. Надеюсь, это поможет вам.

+0

Спасибо, что это было очень интересно читать и помогло добиться того, что мне было нужно :-) – Apqu

0

Вы можете поместить объект активности в качестве параметра в конструктор вашего BroadcastReceiver. Затем вызовите функцию activity.finish(), чтобы завершить действие.

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