Приоритет в широковещательном приемнике для приема звонков - PullRequest
6 голосов
/ 28 апреля 2011

Мое намерение состоит в том, чтобы сделать широковещательный приемник , который выполняет действия при получении вызова.Возможно ли, чтобы приоритет был выше, чем у автоматического приема вызовов?моего приемника.

<!-- Receiver de llamadas -->
<receiver android:name=".PhoneCall">
    <intent-filter android:priority="2147483647">
        <action android:name="android.intent.action.PHONE_STATE"/>   
    </intent-filter>
</receiver>

Ответы [ 4 ]

9 голосов
/ 29 апреля 2011

Ответьте мне по этой ссылке:

http://developer.android.com/reference/android/content/BroadcastReceiver.html

Существует два основных класса трансляций:

  • Обычные трансляции (отправленные с Context.sendBroadcast) полностью асинхронные. Все приемники трансляции работают в неопределенном порядок, часто в то же время. Это более эффективно, но означает, что получатели не могут использовать API результатов или отмены, включенные здесь.

  • Заказанные рассылки (отправленные с Context.sendOrderedBroadcast) доставляются одному получателю за раз. Поскольку каждый получатель выполняет в в свою очередь, он может распространить результат на следующий получатель, или он может полностью прервать трансляцию, чтобы она не передавалась другим приемников. Приемники заказов могут управляться с помощью android: атрибут приоритета соответствующего фильтра намерений; приемники с тем же приоритетом будет выполняться в произвольном порядке.

Трансляция, например, PHONE_STATE, - «Обычная трансляция» Насколько я понимаю, невозможно определить приоритеты моей трансляции. Кто-нибудь что-нибудь думает?

2 голосов
/ 25 августа 2011

На самом деле, я не думаю, что 2147483647 является лучшим значением для использования, потому что Android не поймет это и проигнорирует это значение.Что вам нужно сделать, это попытаться установить приоритет 999, так как я думаю, 1000 является максимальным значением.

0 голосов
/ 10 января 2014

Мое решение - создание двух приемников вещания.Первый получатель используется для получения широковещательной рассылки, отправленной системой с действием: android.intent.action.PHONE_STATE.Второй получатель вызывается первым получателем.(Первый получатель отправит трансляцию, и я обнаружил, что эта трансляция будет получена вторым получателем после того, как все получатели получат android.intent.action.PHONE_STATE.)

Подробные коды приведены ниже: Первый получатель(CallReceiver.java):

public class CallReceiver extends BroadcastReceiver {   
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent newintent = new Intent(intent);
        newintent.setAction("");
        newintent.setClass(context, SecondReceiver.class);
        context.sendBroadcast(newintent);
    }
}

Второй получатель (SecondReceiver.java):

public class SecondReceiver extends BroadcastReceiver{  
    @Override
    public void onReceive(Context context, Intent intent) {
        String number = intent.getStringExtra(
        TelephonyManager.EXTRA_INCOMING_NUMBER);
        String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
    }
}

AndroidManifest.xml:

<receiver android:name=".CallReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>

<receiver android:name=".SecondReceiver" />
0 голосов
/ 24 июля 2013

Значение должно быть меньше 1000!

Документы для разработчиков Android:

Значение должно быть целым числом, например, "100".Более высокие числа имеют более высокий приоритет.Значение по умолчанию - 0. Значение должно быть больше -1000 и меньше 1000.

http://developer.android.com/guide/topics/manifest/intent-filter-element.html

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