2013-05-22 2 views
0

Есть ли у нас опция в Android для проверки текстовых слов SMS перед отображением на экране пользователя? Могу ли я заблокировать это текстовое сообщение определенным текстом, управляя его кодом?Проверьте текстовое сообщение sms от приложения перед его отображением пользователю

Любые идеи или учебники об этой штуке?

+0

является то, что вы его ищут, когда получен sms должен быть проверен в вашем приложении, и если соответствует конкретному тексту, он не должен доходить до inbox – prvn

ответ

0

вы можете использовать BroadcastReceiver для получения входящего SMS

public class SmsReceiver extends BroadcastReceiver { 

private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 


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

    if (intent.getAction().equals(SMS_RECEIVED)) { 
     Bundle bundle = intent.getExtras(); 
     if (bundle != null) { 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      final SmsMessage[] messages = new SmsMessage[pdus.length]; 
      for (int i = 0; i < pdus.length; i++) { 
       messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
      } 
      if (messages.length > -1) {     

        String str=messages[0].getMessageBody(); 

        if(check for the text in the string str) 
        {      
         abortBroadcast();//stops msg from reaching inbox     
        } 

       } 
      } 
     } 
    } 
} 

добавить эти разрешения на свой манифест

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

Добавить приемник к манифесту

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

Странно, я установил точку останова после 'onReceive (контекст контекста, намерение намерения) {' Отправка sms себе, но никаких журналов и отладчика не останавливается – oleg

+0

ваше сообщение доставлено в ваш почтовый ящик? – prvn

+0

, конечно, сразу появляется окно сообщения clais и другие приложения (viber ...) – oleg

0

Создать широковещательный приемник, как показано ниже

public class SMSReceiver extends BroadcastReceiver { 

private List<NameValuePair> nameValuePairs; 
@Override 
public void onReceive(Context context, Intent intent) { 

Bundle extras = intent.getExtras(); 
if (extras == null) 
    return; 



    Object[] pdus = (Object[]) extras.get("pdus"); 
    for (int i = 0; i < pdus.length; i++) { 
     SmsMessage SMessage = SmsMessage 
       .createFromPdu((byte[]) pdus[i]); 
     String sender = SMessage.getOriginatingAddress(); 
     String body = SMessage.getMessageBody().toString(); 
     Log.e("message: ", body); 
     Log.e("Number", sender); 

     Intent in = new Intent("SmsMessage.intent.MAIN").putExtra(
       "get_msg", sender + ":" + body); 

     context.sendBroadcast(in); 

if (body.equals("your text") { 
    this.abortBroadcast();    
}  
    } 



} 

} 

В манифесте зарегистрировать приемник, как

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

Это будет делать трюк. Надеюсь это поможет. :)

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