множественное намерение в широковещательном приемнике

Итак, я делаю приложение, которое прослушивает активность Screen On в Android. У меня есть широковещательный приемник, который принимает Intent.ACTION_SCREEN_ON. Затем этот получатель начинает действие.

Все работает нормально, но активность начинается даже при включенном экране из-за входящего звонка.

Это мой код.

if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)){
    Intent i = new Intent(context, MainScreenActivity.class);
    i.putExtras(intent);
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);

    Log.e("receiver", "throwing in the lock screen");
}

Я не совсем уверен, как проверить текущее состояние телефона. У меня есть разрешение на чтение PHONE_STATE, но как мне узнать, был ли запущен сценарий действия из-за звонка?

Также есть задержка, когда экран фактически включается и отображается активность. Экран блокировки по умолчанию отображается в течение короткого времени, а затем появляется пользовательский. Можно ли что-то сделать, чтобы избежать этой задержки?


person Broncha    schedule 22.08.2013    source источник


Ответы (1)


Зарегистрируйте другой широковещательный приемник, который отвечает на состояние входящего вызова, установите один флаг, который вы можете проверить в своем приемнике Intent.ACTION_SCREEN_ON), ​​если флаг уже установлен, перейдите к началу действия и сбросьте флаг, иначе начните действие, например

if(action.equalsIgnoreCase("android.intent.action.PHONE_STATE"))
{
    if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
                              TelephonyManager.EXTRA_STATE_RINGING)) 
{
    incomingcall = true;
}
}

и проверить

if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)){
if(incomingcall ==true)
{
    //skip the reciver and reset flag incomingcall = false;
}
else{
Intent i = new Intent(context, MainScreenActivity.class);
i.putExtras(intent);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);

Log.e("receiver", "throwing in the lock screen");
}
}

для получения дополнительной информации об упорядоченной трансляции http://android-developers.blogspot.in/2011/01/processing-ordered-broadcasts.html

person CodingRat    schedule 22.08.2013
comment
Гаурав Я думаю, что ACTION_SCREEN_ON уволен раньше, чем PHONE_STATE. Вы знаете, в каком порядке их увольняют? - person Broncha; 22.08.2013
comment
вы не можете быть уверены, какое намерение сработает первым, максимум вы можете установить приоритет для своего намерения. Вы пробовали этот код, я думаю, он должен работать. - person CodingRat; 22.08.2013
comment
из документации на developer.android Заказные трансляции (отправленные с помощью Context.sendOrderedBroadcast) доставляются одному получателю за раз. Поскольку каждый получатель выполняется по очереди, он может передать результат следующему получателю или полностью прервать широковещательную рассылку, чтобы она не передавалась другим получателям. Запущенными получателями заказов можно управлять с помощью атрибута android:priority соответствующего фильтра намерений; приемники с одинаковым приоритетом будут запускаться в произвольном порядке. - person CodingRat; 22.08.2013
comment
Ну, кажется, проблема с входящим звонком решена. - person Broncha; 24.08.2013