Android: переопределить экран входящего вызова

Я хочу добавить некоторую дополнительную информацию на экран входящего вызова. Для этого в моем приложении я проверяю PHONE_STATE и при ЗВОНКЕ вызываю действие. В этом упражнении я устанавливаю текстовое представление, как показано ниже.

Он работает, как и ожидалось. Текст добавляется на экран входящего вызова ПРОБЛЕМА:

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

Пожалуйста, объясните это поведение. Как я могу это исправить?

super.onCreate(savedInstanceState);
Log.i(TAG,"oncreate");
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.incomingcallscreen);
TextView name = (TextView)findViewById(R.id.textView1);
name.setText(getIntent().getExtras().getString("NAME"));
incomingCallActivityContext = this;

и макет

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="250dip"
        android:src="@drawable/icon"
        android:text="CALLER NAME"
        android:textSize="35sp"
        android:textColor="@color/WHITE"
        android:layout_gravity="center_horizontal"
        android:windowAnimationStyle="@android:style/Animation.Translucent"
        android:windowBackground="@android:color/transparent"
        android:windowIsTranslucent="true" />

</LinearLayout>

person png    schedule 06.06.2012    source источник
comment
Я считаю, что у меня была эта проблема раньше. Это может быть одно из двух. Во-первых, попробуйте добавить задержку в 1000 мс перед отображением наложения на случай, если окно входящего вызова появится с опозданием. Если это не сработает, посмотрите ответ здесь: stackoverflow.com/a/5512519/653362 Я думаю, что в конце концов я использовал метод тостов после обновления до имбирных пряников.   -  person Guykun    schedule 06.06.2012
comment
Привет, спасибо за ответ. Моя проблема не связана с состоянием MODIFY_PHONE. Я получаю правильное поведение, если я не в своем приложении. Если в моем приложении экран переопределения переопределяет мой собственный экран активности и отодвигает номеронабиратель назад. Вы сталкивались с этой проблемой? Вы помните, как это было исправлено. У меня уже есть временная задержка. Сначала приходит мой номеронабиратель, затем, когда всплывает мой экран переопределения, также появляется моя текущая активность   -  person png    schedule 07.06.2012


Ответы (1)


Поместите android:launchMode="singleInstance" в свой манифест Activity.
Объяснение(немного)
Режимы "singleTask" и "singleInstance" также отличаются друг от друга только в одном отношении: действие "singleTask" позволяет другим действиям быть частью его задачи. Он всегда находится в корне своей задачи, но другие действия (обязательно «стандартные» и «singleTop» действия) могут быть запущены в этой задаче. С другой стороны, действие "singleInstance" не позволяет никаким другим действиям быть частью его задачи. Это единственное действие в задаче. Если оно запускает другое действие, оно назначается другой задаче, как если бы в намерении был FLAG_ACTIVITY_NEW_TASK.

Полное объяснение можно найти здесь

person Dharmik    schedule 20.06.2013