Как программно увеличить приоритет IntentFilter

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

<receiver android:name=".MySmsReceiver" > 
<intent-filter> 
        <action android:name="android.provider.Telephony.SMS_RECEIVED"
            android:priority="999"
             /> 
</intent-filter> 
</receiver>

это метод onReceive() моего приемника

public void onReceive(final Context context, Intent intent) {

    Bundle extras = intent.getExtras();
    abortBroadcast();
             ....
 }

person aneela    schedule 18.12.2012    source источник


Ответы (1)


Попробуйте объявить получателя таким образом:

<receiver android:name=".MySmsReceiver">
    <intent-filter android:priority="999">
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

Вместо :

<receiver android:name=".MySmsReceiver" > 
<intent-filter> 
        <action android:name="android.provider.Telephony.SMS_RECEIVED"
            android:priority="999"
             /> 
</intent-filter> 
</receiver>

Также попробуйте проверить следующее условие, прежде чем прерывать трансляцию:

ОТРЕДАКТИРОВАНО:

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(SMS_RECEIVED)) {
        Bundle extras = intent.getExtras();
        if(extras != null)
          // doBroadcast();
        else
           abortBroadcast();
    }
}

Надеюсь, это поможет вам.

Спасибо.

person Pratik Sharma    schedule 18.12.2012
comment
вы можете использовать это условие, как указано выше if (intent.getAction().equals(SMS_RECEIVED)), это будет прослушивать только указанного приемника с именем SMS_RECEIVED. - person Pratik Sharma; 18.12.2012
comment
Я хочу получить данные только из намерения, а затем прервать трансляцию. Но то, что я делаю сейчас с этим условием, родное приложение также получает намерение, прежде чем я прерву трансляцию, и notificationbar снова показывает контент. Есть ли какие-либо временной интервал с orderbroadcast, о котором мне нужно позаботиться?? - person aneela; 18.12.2012
comment
@aneelasafdar Посмотрите опубликованное мной отредактированное решение. Надеюсь, это решит вашу проблему. - person Pratik Sharma; 18.12.2012
comment
С этим условием, если дополнительные функции не равны нулю, что в большинстве случаев, вы не прерываете трансляцию. Следовательно, родное приложение будет получать сообщения. Пожалуйста, поправьте меня, если я ошибаюсь. Спасибо - person aneela; 18.12.2012
comment
вы можете использовать то же условие и выполнить abortBroadcast();, когда дополнительные функции не равны нулю, что означает, что вы получили дополнительные функции с помощью Intent. - person Pratik Sharma; 18.12.2012
comment
Идя таким образом, база данных content://sms/inbox не обновляется новыми полученными сообщениями. Следовательно, ни родное приложение, ни мое не могут получать новые входящие сообщения... - person aneela; 18.12.2012
comment
Требуется ли добавление permission в Manifest file ? - person Pratik Sharma; 18.12.2012
comment
Я добавил разрешение для RECEIVE_SMS..нужны ли они какие-либо другие? - person aneela; 18.12.2012
comment
см. эту справочную ссылку. надеюсь, вы найдете что-то полезное из него. [anddev.org/recognize-react_on_incoming_sms-t295.html] и [mobiforge.com/developing/story/sms-messaging-android]. - person Pratik Sharma; 18.12.2012
comment
@aneelasafdar, если мое решение каким-то образом полезно, вы можете принять его / проголосовать за него. Спасибо. - person Pratik Sharma; 07.01.2013