Создание BroadcastReceiver динамически в Android - PullRequest
1 голос
/ 18 августа 2011

Я создаю приложение для Android, которое работает, предоставляя пользователям информацию через SMS. Пользователи отправляют SMS на заранее определенный номер, жестко закодированный в приложении, и, в свою очередь, получают ответ.

Для этого яиспользование широковещательного приемника в моем манифесте Android

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

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

Я узнал о методе Context.registerReciever, но как мне указать приоритет для получателя?Если получатель не имеет более высокого приоритета, приложение обмена сообщениями может остановить трансляцию от моего приложения.Кто-нибудь сталкивался с решением для чего-то подобного?

Ответы [ 3 ]

4 голосов
/ 22 августа 2011

Я использовал следующий код для достижения того, что искал!

IntentFilter fp = new IntentFilter();
fp.addAction("android.provider.Telephony.SMS_RECEIVED");
fp.setPriority(18);

//--- when the sms is received ---
registerReceiver(new BroadcastReceiver(){
    @Override
    public void onReceive(Context arg0, Intent arg1) { 
        //Processing for received broadcast happens here              
    }
}, fp);
1 голос
/ 18 августа 2011

Я не проверял это сам, но сделал быстрый поиск по исходному коду Android.

Приоритет анализируется и сохраняется в IntentFilter (см. код ). Таким образом, вы можете создать IntentFilter и использовать его функцию setPriority(), чтобы установить приоритет вашего широковещательного приемника.

 IntentFilter filter = new IntentFilter(...);
 filter.setPriority(receiverPriority);// <-----
 context.registerReceiver(filter, mBroadcastReceiver);
0 голосов
/ 18 августа 2011

Я бы решил эту проблему, используя пользовательское намеренное действие, такое как com.example.intent.VERIFICATION_RECEIVED и передавая это из SMSReciever, а затем попросив Activity прослушать его с BroadcastReceiver.

IntentFilter filter = new IntentFilter(PageFragment.ACTION_LOADING_DONE);
registerReceiver(new MyReceiver(), filter);

Используя этот подход, вы можете сохранить обработку SMS в SMSReciever, а вашему Activity не нужно заботиться о том, как обрабатывать SMS.

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