2016-06-21 6 views
0

Я использую BroadcastReceiver в приложении для Android, чтобы получить сообщение OTP автоматически. Но BroadcastReceiver не работает и не находит ошибку, поэтому, пожалуйста, помогите мне. Я положил Log.d ("onReciver", "on ") в onReceive() проверить, но не работает.BroadcastReceiver не работает

IncomingMessage.java

public class IncomingMessage extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     Log.d("onReciver","on"); 
     final Bundle bundle = intent.getExtras(); 
     try { 
      if (bundle != null) 
      { 
       final Object[] pdusObj = (Object[]) bundle.get("pdus"); 
       for (int i = 0; i < pdusObj .length; i++) 
       { 
        SmsMessage currentMessage = SmsMessage.createFromPdu((byte[])                         pdusObj[i]); 
        String phoneNumber = currentMessage.getDisplayOriginatingAddress(); 
        String senderNum = phoneNumber ; 
        Log.d("sender NUm",senderNum); 
        String message = currentMessage .getDisplayMessageBody(); 
        try 
        { 
         if (senderNum.equals("(727)594-3351")) 
         { 
          OtpVarificationActivity Sms = new OtpVarificationActivity(); 
          Sms.recivedSms(message); 
         } 
        } 
        catch(Exception e){ 
         Log.e("BR error",e.toString()); 
        } 

       } 
      } 

     } catch (Exception e) 
     { 
      Log.e("BR error1",e.toString()); 

     } 

    } 
} 

Manifest.xml

<uses-permission android:name="android.permission.SEND_SMS" /> 
    <uses-permission android:name="android.permission.READ_SMS" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
... 
... 
... 
<receiver android:name="com.appsprotocol.dcntv.broadcast.IncomingMessage"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
      </intent-filter> 
     </receiver> 
+0

Как вы запускаете ресивер? –

+0

Создание объекта входящего сообщения класса –

+0

Ваш код запускался при получении сообщения? –

ответ

0

Вот мой рабочий пример

Регистрация приемника в AndoridMenifest.xml:

  <receiver android:name="com.example.tosc185.readincommingsmsdemo.SmsListener"> 
       <intent-filter> 
        <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
       </intent-filter> 
      </receiver> 

приемник Класс:

public class SmsListener extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

     if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { 
      Bundle bundle = intent.getExtras();   //---get the SMS message passed in--- 
      SmsMessage[] msgs = null; 
      String msg_from; 
      if (bundle != null) { 
       //---retrieve the SMS message received--- 
       try { 
        Object[] pdus = (Object[]) bundle.get("pdus"); 
        msgs = new SmsMessage[pdus.length]; 
        for (int i = 0; i < msgs.length; i++) { 
         if(Build.VERSION.SDK_INT <= 22) { 
          msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
         } 
         else { 
          msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i], String.format(Locale.US, null)); 
         } 
         msg_from = msgs[i].getOriginatingAddress(); 
         String msgBody = msgs[i].getMessageBody(); 
         Toast.makeText(context, "From -" + msg_from + " : Body- " + msgBody, Toast.LENGTH_LONG).show(); 
         if (msg_from.equalsIgnoreCase("5555")) { 
          MainActivity.insertCode(msgBody); 
         } 
        } 
       } catch (Exception e) { 
//       Log.d("Exception caught",e.getMessage()); 
       } 
      } 
     } 
    } 
} 
+0

okk, но мой запрос мой BroadcastReceiver не звонит, когда я запускаю приложение. Если его вызов, то я могу видеть сообщение журнала, которое я вставляю onReceive() –

0

Попробуйте добавить приоритет вашего приемника в манифесте. Это сработало для меня.

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

не работает и что такое android: priority please Расскажи мне? –

+0

см. Эту ссылку для получения информации о приоритете https://developer.android.com/guide/topics/manifest/intent-filter-element.html –

0

Добавить включен и экспортирован в файл манифеста. Ниже вы можете найти образец кода для манифеста.

<receiver 
      android:name=".SmsReceiver" 
      android:enabled="true" 
      android:exported="true"> 
      <intent-filter android:priority="999"> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 
+0

Я стараюсь, но не работает –

+0

@RahulDev :: Вы используете зефир? и убедитесь, что вы внедрили разрешение [BRAODCAST_SMS] (https://developer.android.com/reference/android/Manifest.permission.html#BROADCAST_SMS). – Jeevanandhan

+0

Да, я использую его и пытаюсь использовать разрешение BROADCAST_SMS, но через него ошибка «разрешение предоставляется только системным приложениям» .whats среднее значение этой ошибки? –