Android SMS接收器不起作用

问题描述

| 我是android编程的新手,请帮助我解决问题。 我的接收短信的代码不起作用。 清单文件是     
    <receiver android:name=\".SMSReceiver\"> 
        <intent-filter> 
            <action android:name=
                \"android.provider.Telephony.SMS_RECEIVED\" /> 
        </intent-filter> 
    </receiver>

</application>
<uses-permission android:name=\"android.permission.SEND_SMS\">
</uses-permission>
<uses-permission android:name=\"android.permission.RECEIVE_SMS\">
</uses-permission>
而Java代码
package com.android.SMS;


import android.os.Bundle;

import android.content.broadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import  android.telephony.*;
import android.telephony.gsm.SmsMessage;
import android.util.Log;

import android.widget.Toast;

public class SMSReceiver extends broadcastReceiver
{

     public void onReceive(Context context,Intent intent) 
        {
            //---get the SMS message passed in---
            Bundle bundle = intent.getExtras();        
            SmsMessage[] msgs = null;
            String str = \"\";            
            if (bundle != null)
            {
                //---retrieve the SMS message received---
                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]);                
                    str += \"SMS from \" + msgs[i].getoriginatingAddress();                     
                    str += \" :\";
                    str += msgs[i].getMessageBody().toString();
                    str += \"\\n\";        
                }
                //---display the new SMS message---
                Toast.makeText(context,str,Toast.LENGTH_SHORT).show();
            }                         
        }


}
请帮助我解决问题。我从昨天开始就陷入了困境,我在代码中看不到任何问题。     

解决方法

        这是我目前为我工作的内容。 我提供的代码用于阻止传入的文本消息,但是您可以轻松地对其进行修改,使其仅包含仅在收到警报时会向您发出警报的区域,而不会对其进行进一步处理。 SmsReceiver.java
package com.android.SMS;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class SmsReceiver extends BroadcastReceiver {

public static int MSG_TPE=0;
private String getAddress;
public void onReceive(Context context,Intent intent) { 
    String MSG_TYPE=intent.getAction();
        if(MSG_TYPE.equals(\"android.provider.Telephony.SMS_RECEIVED\")) {
            Toast received = Toast.makeText(context,\"SMS Received: \"+MSG_TYPE,Toast.LENGTH_LONG);
            received.show();

                Bundle bundle = intent.getExtras();
                Object messages[] = (Object[]) bundle.get(\"pdus\");
                SmsMessage smsMessage[] = new SmsMessage[messages.length];
                for (int n = 0; n < messages.length; n++) {
                    smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
                }

                    getAddress = smsMessage[0].getOriginatingAddress();
                    // Filter incoming messages
                    if(getAddress.equals(\"APPROVEDPHONENUMBER\")) {
                        Toast approved = Toast.makeText(context,\"Approved SMS from: \" + smsMessage[0].getOriginatingAddress(),Toast.LENGTH_LONG);
                        approved.show();
                            // Message is approved and let through
                    } else {
                        Toast blocked = Toast.makeText(context,\"Blocked SMS from: \" + smsMessage[0].getOriginatingAddress(),Toast.LENGTH_LONG);
                        blocked.show();
                            // Message is blocked
                            abortBroadcast();
                    }
                    // End filter
                        for(int i=0;i<8;i++) {
                            System.out.println(\"Blocking SMS\");
                        }

        }

}

}
这是检测传入消息的代码
if(MSG_TYPE.equals(\"android.provider.Telephony.SMS_RECEIVED\")) {
        Toast received = Toast.makeText(context,Toast.LENGTH_LONG);
        received.show();
}
AndroidManifest.xml 权限:
<uses-feature android:name=\"android.hardware.telephony\" /> 
<uses-permission android:name=\"android.permission.READ_SMS\" />
<uses-permission android:name=\"android.permission.WRITE_SMS\" />
<uses-permission android:name=\"android.permission.SEND_SMS\" />
<uses-permission android:name=\"android.permission.RECEIVE_SMS\" />
应用程序块:
<application
    android:icon=\"@drawable/ic_launcher\"
    android:label=\"@string/app_name\" >


    <service android:name=\".MyService\" android:enabled=\"true\"/>
     <receiver android:name=\"SmsReceiver\">
            <intent-filter android:priority=\"2147483647\">
                <action android:name=\"android.provider.Telephony.SMS_SENT\"/>
            </intent-filter>
     </receiver>
    <service android:name=\".MyServiceSentReceived\" android:enabled=\"true\"/>
         <receiver android:name=\"SmsReceiver\">
                <intent-filter android:priority=\"2147483645\">
                    <action android:name=\"android.provider.Telephony.SMS_RECEIVED\"/>
                </intent-filter>
         </receiver>

</application>
如上面的代码所示,将服务和接收器块放置在主“应用程序”块中很重要。     ,        
package com.google.android;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class SMSReceiver extends BroadcastReceiver {    
    @Override /** This line is important,as you have not overriden the original method*/
    public void onReceive(Context context,Intent intent) {
        //---get the SMS message passed in---
        Bundle bundle = intent.getExtras();        
        SmsMessage[] msgs = null;
        String str = \"\";            
        if (bundle != null) {
            //---retrieve the SMS message received---
            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]);                
                str += \"SMS from \" + msgs[i].getOriginatingAddress();                     
                str += \" :\";
                str += msgs[i].getMessageBody().toString();
                str += \"\\n\";        
            }
            //---display the new SMS message---
            Toast.makeText(context,str,Toast.LENGTH_SHORT).show();
        }
    }
}
我希望这能帮到您。     ,        删除此行。 导入android.telephony.gsm.SmsMessage; 请确保SmsMessage是\“ android.telephony \”下的必选类。 这可能对您有帮助... :)