вызывать широковещательный приемник при получении смс в андроид - PullRequest
0 голосов
/ 27 мая 2011

Я отправляю смс с данными на эмулятор через другой эмулятор, Мои смс с данными отправлены туда, но мой BroadcastReceiver не вызывается.Я попытался отправить / получить текстовое СМС, и это работает абсолютно нормально, но мне нужно указать порт, чтобы только мое приложение могло прослушивать СМС.

Этот вопрос задавался дважды, но никогда не отвечал: любезно помогите мне, еслиВы знаете решение

Receiver.java:

public class Receiver extends BroadcastReceiver{

// Declaration of Variable for getting the message in it    


/*
*Called when The Message Received
*/
    @Override
    public void onReceive(Context context, Intent intent) 
    { 
        try{


        Bundle bundle = intent.getExtras();        
        SmsMessage[] msgs = null;
        String str = "";   
        byte[] data = null;

        if (bundle != null)
        {
            //---retrieve the SMS message received---
            Object[] pdus = (Object[]) bundle.get("pdus");
            msgs = new SmsMessage[pdus.length];            
            for (int i=0; i<msgs.length; i++){
                msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);                
                str += "SMS frommm " + msgs[i].getOriginatingAddress();                     
                str += " :";

                data=msgs[i].getUserData();

                for(int index=0; index<data.length; ++index)
                {
                       str += Character.toString((char)data[index]);


                }




            }
            //---display the new SMS message---
            Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
            System.out.println("The message is "+ str);


        }    
    }catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }

    }

Код файла манифеста: (только соответствующий код)

<получатель android: name = ". Получатель">

   <  intent-filter  > 

      <  action android:name="android.intent.action.DATA_SMS_RECEIVED" /  >

      <  data android:scheme="sms" /  >

      <  data android:host="localhost"/  >

      <  data android:port="5009"/  >

      <  action android:name="android.intent.action.BOOT_COMPLETED" /  >

            <category android:name="android.intent.category.HOME" /  >  

        <  /intent-filter  > 

    <  /receiver  >

права доступа: <использует-разрешение android: name = "android.permission.SEND_SMS" />

<   uses-permission android:name="android.permission.RECEIVE_SMS"/  >

<  uses-permission android:name="android.permission.INTERNET" /     >

<  uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/  >

Код отправки сообщения данных:

message содержит строку, которую я хочу отправить

byte []b=message.getBytes();
Short sObj2 = 5009;

SmsManager sms = SmsManager.getDefault();
sms.sendDataMessage(phoneNumber,null,sObj2,b,sentPI, deliveredPI)

Ответы [ 2 ]

0 голосов
/ 11 мая 2013

Вы зарегистрировали свой приемник?Вам необходимо зарегистрировать свой BroadcastReceiver.Создайте IntentFilter и передайте его в registerReceiver.

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

filterSMSReceived.setPriority(Integer.MAX_VALUE);

Это позволит получать уведомление раньше, чем любое другое приложение.

0 голосов
/ 27 мая 2011

Глядя на http://code.google.com/p/android/issues/detail?id=1576, не видно, что данные SMS работают на эмуляторе.Вы пробовали комментарий № 23 от http://code.google.com/p/android/issues/detail?id=1576 на реальном устройстве?

...