BroadcastReceivers и всплывающие окна

1

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

Я перехватываю вызов просто отлично, но когда я показываю всплывающее окно, он не накладывается поверх экрана входящих вызовов по умолчанию. Экран входящего вызова открывается, а затем заменяется моим приложением (он переходит к последнему активному открытому) и накладывает всплывающее окно.

Что я делаю неправильно?

My Call Reciver:

public class CallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
    if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
        Intent i = new Intent(context, IncomingCallPopup.class);
        i.putExtras(intent);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        context.startActivity(i);
    }
}}

My popup Activity:

public class IncomingCallPopup extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
        //getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.call_popup);

        String phoneNumber = getIntent().getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
        TextView text = (TextView)findViewById(R.id.text);

        text.setText("Incoming call from " + phoneNumber);
    }
}

Что мне не хватает?

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

2 ответа

0

An Activity, по дизайну, всегда берет на себя весь экран. Если вы хотите, чтобы ваш Activity отображался так, как будто это только частично препятствует экрану входящих вызовов, вы можете попытаться сделать тему Activity трансляционной, как обсуждалось здесь.

Вам также может понадобиться очистить стек Activity (Intent.FLAG_ACTIVITY_CLEAR_TOP), чтобы ваши ранее открытые Activites не висели под ним.

0

Try:

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_USER_ACTION);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню