问题描述
|
我是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 \”下的必选类。
这可能对您有帮助... :)