我通过另一个模拟器将数据短信发送到模拟器,我的数据短信发送到那里但我的BroadcastReceiver
没有被调用。
我尝试发送/接收文本短信,并且工作正常,但我需要指定一个端口,以便只有我的应用程序可以收听短信。
这个问题已被问过两次但从未回答:如果你知道解决方案,请帮助我
Receiver.java:
public class Receiver extends BroadcastReceiver{
// Declaration of Variable for getting the message in it
/*
*Called when The Message Received
*/
@Override
public void onReceive(Context context, Intent intent)
{
try{
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String str = "";
byte[] data = null;
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 frommm " + msgs[i].getOriginatingAddress();
str += " :";
data=msgs[i].getUserData();
for(int index=0; index<data.length; ++index)
{
str += Character.toString((char)data[index]);
}
}
//---display the new SMS message---
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
System.out.println("The message is "+ str);
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
清单文件代码:(仅相关代码)
&LT;接收器android:name =“。接收器”&gt;
< intent-filter >
< action android:name="android.intent.action.DATA_SMS_RECEIVED" / >
< data android:scheme="sms" / >
< data android:host="localhost"/ >
< data android:port="5009"/ >
< action android:name="android.intent.action.BOOT_COMPLETED" / >
<category android:name="android.intent.category.HOME" / >
< /intent-filter >
< /receiver >
权限: &LT; uses-permission android:name =“android.permission.SEND_SMS”/&gt;
< uses-permission android:name="android.permission.RECEIVE_SMS"/ >
< uses-permission android:name="android.permission.INTERNET" / >
< uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/ >
数据信息发送代码:
消息包含我要发送的字符串
byte []b=message.getBytes();
Short sObj2 = 5009;
SmsManager sms = SmsManager.getDefault();
sms.sendDataMessage(phoneNumber,null,sObj2,b,sentPI, deliveredPI)
答案 0 :(得分:0)
查看http://code.google.com/p/android/issues/detail?id=1576数据短信无法在模拟器上运行。您是否在真实设备上尝试了来自http://code.google.com/p/android/issues/detail?id=1576的评论#23?
答案 1 :(得分:0)
您是否注册了接收器?您需要注册BroadcastReceiver。创建一个IntentFilter并将其传递给registerReceiver。
您是否确认本机短信应用正在模拟器中接收短信?如果是这种情况,则表示您的短信实际上已收到。我从未在模拟器之间发送过短信,只用真实的设备完成了这项工作。我遇到的问题是,在注册接收器之前,我需要将其优先级设置为高于任何其他可能响应的应用程序,包括本机SMS应用程序。你可以这样做:
filterSMSReceived.setPriority(Integer.MAX_VALUE);
这将使其在任何其他应用程序之前得到通知。