2014-03-28 73 views
2

我正在開發一個應用程序,我想阻止一些特定數字的短信。爲了測試我從那個號碼中獲取短信,我在中條件但是此代碼不阻止該號碼短信。我盡力而爲,但沒有解決。任何一個可以幫助me.Here是我的代碼
Sms.java在android中阻止短信

public class Sms extends BroadcastReceiver { 
      final SmsManager sms = SmsManager.getDefault(); 

      @Override 
      public void onReceive(Context context, Intent intent) { 

       // Retrieves a map of extended data from the intent. 
       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; 
          String message = currentMessage.getDisplayMessageBody(); 

          Log.i("SmsReceiver", "senderNum: " + senderNum 
            + "; message: " + message); 


          // Show Alert 
          int duration = Toast.LENGTH_SHORT; 
          Toast toast = Toast.makeText(context, "senderNum: " 
            + senderNum + ", message: " + message, duration); 
          toast.show(); 
          if(senderNum=="+923215619915"){ 
           Toast.makeText(context, "You r in if condition", Toast.LENGTH_LONG).show(); 
           abortBroadcast(); 
          } 



         } // end for loop 
        } // bundle is null 

       } catch (Exception e) { 
        Log.e("SmsReceiver", "Exception smsReceiver" + e); 

       } 
      } 
     } 

的Manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.example.tesingworkspace" 
     android:versionCode="1" 
     android:versionName="1.0" > 

     <uses-sdk android:minSdkVersion="7" 
      android:targetSdkVersion="19" 
      /> 
     <uses-permission android:name="android.permission.SEND_SMS" > 
     </uses-permission> 
     <uses-permission android:name="android.permission.READ_CONTACTS" /> 
     <uses-permission android:name="android.permission.RECEIVE_SMS" > 
     </uses-permission> 
     <uses-permission android:name="android.permission.READ_SMS"/> 

     <application 
      android:allowBackup="true" 
      android:icon="@drawable/ic_launcher" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme" > 
      <activity 
       android:name="com.example.tesingworkspace.BroadCastSms" 
       android:label="@string/app_name" > 
       <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 

        <category android:name="android.intent.category.LAUNCHER" /> 
       </intent-filter> 
      </activity> 

      <receiver android:name="com.example.tesingworkspace.Sms"> 
       <intent-filter> 
        <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
       </intent-filter> 
      </receiver> 

     </application> 



    </manifest> 

回答

3

你需要做的是調試代碼的最好的事情,你有硬編碼的電話號碼採用可能發生或可能不發生的格式,請確保接收方電話號碼以何種格式出現?當我正在處理它時,我通過0333xxx-xxxx號碼發送消息,並且我收到的號碼是+92xxx。但它不知道所有的,不同的電信公司可能會使用不同的格式,你應該使用

if(number.equals("+92333xxx-xxxxx"))或更好的使用contains,這實際上使之更適合匹配號碼,並移除格式錯誤

的可能性
if(number.contains("333xxx-xxxxx")){ 
    // Your code to abort message 
} 

希望這有助於

+0

好吧,先生,我檢查並感謝回覆。 –

+0

我檢查了代碼,但沒有解決問題。代碼中放棄消息時是否存在問題? –

+0

你有調試嗎?你得到了什麼號碼?何時收到消息? – Saqib

1

的Equals僅用於比較的對象。 嘗試使用if(senderNum.equalsIngnorecase(「+ 923215619915」))或if(senderNum.indexOf(「+ 923215619915」)!= -1)。