2014-10-02 4 views
0

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

Вот мой файл активности

public class SMSBroadcastReceiver extends BroadcastReceiver { 

private static final String TAG = SMSBroadcastReceiver.class.getSimpleName(); 
public static final String SMS_CONTENT = "sms_content"; 

@Override 
public void onReceive(Context context, Intent intent) { 
    Log.i(TAG, "Intent recieved: " + intent.getAction()); 

    Cursor c = context.getContentResolver().query(Uri.parse("content://sms/inbox"), null, null, null, null); 
    c.moveToFirst(); 
    String smsBody = c.getString(12); 
    Toast.makeText(context, "SMS RECEIVED:", Toast.LENGTH_LONG).show(); 
    Toast.makeText(context, smsBody, Toast.LENGTH_LONG).show(); 
    } 
} 

Я также включил эти строки в моей Manifest

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

<receiver android:name=".SMSBroadcastReceiver"> 
<intent-filter> 
    <action android:name="android.provider.telephony.SMS_RECEIVED"/> 
</intent-filter> 
</receiver> 

Plz помочь мне, чтобы выяснить, что происходит не так, и я не в состоянии Тост входящих SMS ...

+0

«Телефония» должна быть заглавной в «android.provider.telephony.SMS_RECEIVED» в манифесте. То есть, это должен быть «android.provider.Telephony.SMS_RECEIVED». Также обратите внимание, что новое сообщение, возможно, не было отправлено Поставщику при получении этой трансляции. –

+0

Взгляните на этот проект: https://github.com/vivdub/DynamicSMSReceiver/commit/e807dfa0a2f02da553e4d68096a6842ad8351d06 –

ответ

-1

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

sendBroadcast(new Intent(MyActivity.this, SMSBroadcastReceiver.class)); 
0

В вашем методе onReceive вы должны сделать что-то вроде следующего кода, чтобы прочитать sms-контент:

if (intent != null && intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { 
    Bundle bundle = intent.getExtras(); 
    SmsMessage[] msgs; 
    String sender; 
    if (bundle != null) { 
     try { 
      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]); 
       // Here you have the sender(phone number) 
       sender = msgs[i].getOriginatingAddress(); 
       String msgBody = msgs[i].getMessageBody(); 
       // you have the sms content in the msgBody 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
    } 
} 

Помогает ли это?

+0

Эй, Майк! Я внес изменения в свой код, как вы сказали, но все равно это не сработает ... Кроме того, вы можете объяснить мне, как проверить, что новый messsage записывается в Провайдер на трансляции ??? –

+0

FYI 'createFromPdu()' устарел. Береги себя –

Смежные вопросы