вызывать широковещательный приемник при получении данных sms в Android

#android #sms #broadcastreceiver

#Android #sms #broadcastreceiver

Вопрос:

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

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

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();
    }

    }
  

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

<android-приемник: имя=».Receiver»>

    <  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:имя=»android.разрешение.ОТПРАВИТЬ 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"/  >
  

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

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

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

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

Ответ №1:

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

Комментарии:

1. спасибо большое за ответ, я это уже сделал, но мой широковещательный приемник не вызывается ..: (

2. Ах, если вы отредактируете свой вопрос и добавите код для вашего широковещательного приемника, где вы генерируете уведомление и ваш AndroidManifest.xml возможно, мы сможем найти файл, который не работает.

Ответ №2:

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

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

 filterSMSReceived.setPriority(Integer.MAX_VALUE);
  

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