Android 阻止短信进入收件箱?

Android 阻止短信进入收件箱?,android,Android,我已经阅读了大部分关于阻止短信进入收件箱的问题。对我来说什么都不管用。所以,我现在有两个应用程序,一个是发送,另一个是接收器。接收方需要检查消息的前四个字符,如果它来自发送方应用程序。然后,阻止它进入收件箱。 他们说我必须提高应用程序的优先级。是的,这是我的舱单 <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <

我已经阅读了大部分关于阻止短信进入收件箱的问题。对我来说什么都不管用。所以,我现在有两个应用程序,一个是发送,另一个是接收器。接收方需要检查消息的前四个字符,如果它来自发送方应用程序。然后,阻止它进入收件箱。 他们说我必须提高应用程序的优先级。是的,这是我的舱单

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver android:name=".SmsReceiver"> 
        <intent-filter android:priority="100"> 
            <action android:name=
                "android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter> 
    </receiver>

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

为了清楚起见,这里是我检查信息的活动

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver android:name=".SmsReceiver"> 
        <intent-filter android:priority="100"> 
            <action android:name=
                "android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter> 
    </receiver>

</application>
    <uses-permission android:name="android.permission.READ_SMS"></uses-permission>
    <uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
 public void onReceive(Context context, Intent intent) 
 {

   //---get the SMS message passed in---
      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;
                    message = currentMessage.getDisplayMessageBody();

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

                    H = currentMessage.getMessageBody(); 
                   // Show Alert
                    int duration = Toast.LENGTH_LONG;
                    Toast toast = Toast.makeText(context, 
                                 "senderNum: "+ senderNum + ", message: " + message, duration);

                    toast.show();
                    if(i==0)
                        H = currentMessage.getMessageBody(); 


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

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

        }

        check_message = message_checked(H) ; 

       //---display the new SMS message---
        if(check_message)
        {
       Intent intentHome = new Intent(context,MainActivity.class);
       intentHome.putExtra("msgContent", message);

       intentHome.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
       context.startActivity(intentHome);
        }
        else 
            System.exit(0); 

   }                         

public boolean message_checked(String the_message)
{
String Code = new String("*%#&"); 
String four_char = "" ; 
for(int i = 0 ; i<4 ; i++)
{
    four_char += the_message.charAt(i) ; 

}
if(four_char.equals(Code))
{
    this.abortBroadcast();

    return true;
}
else 
    return false ; 



}
public void onReceive(上下文、意图)
{
//---获取传入的SMS消息---
final Bundle=intent.getExtras();
试一试{
if(bundle!=null){
最终对象[]pdusObj=(对象[])bundle.get(“pdus”);
对于(int i=0;i对于(int i=0;i这是我过去的做法,很抱歉,我的模拟器现在无法工作,因此我无法检查。希望它能有所帮助

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver android:name=".SmsReceiver"> 
        <intent-filter android:priority="100"> 
            <action android:name=
                "android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter> 
    </receiver>

</application>
    <uses-permission android:name="android.permission.READ_SMS"></uses-permission>
    <uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
  public void onReceive(Context context, Intent intent) {

                if(intent.getAction().equalsIgnoreCase("android.provider.Telephony.SMS_RECEIVED")){

                        // Check if the SMS matches our SOS message
                        SmsMessage[] messages = getMessagesFromIntent(intent);
                        if(messages != null){
                                for(int i = 0; i < messages.length; i++){
                                        SmsMessage message = messages[i];
                                        if(matchesMessage(context,message.getDisplayMessageBody())){
                                                Log.i(LOGNAME, "Received Test String! Abort Broadcast");
                                //put intent call or preferred code here

                                                this.abortBroadcast();
                                                break;
                                        }
                                }
                        }
                }

        }

    private boolean matchesMessage(Context context, String message){

            SharedPreferences preferences = context.getSharedPreferences(MainSetting.PREFERENCES, Context.MODE_PRIVATE);
            String testMessage = preferences.getString(MainSetting.PREFERENCES_TEST, MainSetting.PREFERENCES_STRING_DEFAULT); //this is a string stored in shared preferences
            return testMessage.equalsIgnoreCase(message); //ignorecase so that it is not case sensitive

    }


    private SmsMessage[] getMessagesFromIntent(Intent intent) {
            SmsMessage retMsgs[] = null;
            Bundle bdl = intent.getExtras();
            try {
                    Object pdus[] = (Object[]) bdl.get("pdus");
                    retMsgs = new SmsMessage[pdus.length];
                    for (int n = 0; n < pdus.length; n++) {
                            byte[] byteData = (byte[]) pdus[n];
                            retMsgs[n] = SmsMessage.createFromPdu(byteData);
                    }
            } catch (Exception e) {
                    Log.e(LOGNAME, "fail", e);
            }
            return retMsgs;
    }
public void onReceive(上下文、意图){
if(intent.getAction().equalsIgnoreCase(“android.provider.Telephony.SMS_RECEIVED”)){
//检查SMS是否与我们的SOS消息匹配
SmsMessage[]messages=getMessagesFromIntent(intent);
如果(消息!=null){
for(int i=0;i

}

试试这个
android:priority=“9999”
是的,我的应用程序在默认收件箱之前收到短信。但我仍然将其放在收件箱中。你想在应用程序读取短信后删除短信吗?是的,这正是我想要的。如果短信不是针对接收者的,就让它放在收件箱中。这正是我做的。不,你把this.abortbroadcast()放在收件箱中;已选中内部公共布尔消息,因此可能“this”指针不再指向onRecieve()?只是一个想法。。。
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver android:name=".SmsReceiver"> 
        <intent-filter android:priority="100"> 
            <action android:name=
                "android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter> 
    </receiver>

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