基于地图的短信追踪小练习(3)短信的接收与发送

来源:互联网 发布:苹果网络不可用 编辑:程序博客网 时间:2024/05/20 03:05

注:本篇文章中代码关于短信收发部分部分参考自《第一行代码》

我们要实现的功能是,点击一个按钮,向朋友发送短信,内容为"where are you?",朋友收到之后,发还一个经纬度信息,这里面的逻辑很好想,设置好要发送的信息之后发送,接收到之后判断,再获取到想要的信息,根据获取到的发送方,发送经纬度给它。

所以关键还是发送和接受本身的实现逻辑。

注意,接收短信可以在模拟器中,我们可以用ddms来发送短信,但是发送短信就必须在真机中了。

我们设置点击事件,发送短信,发送短信的逻辑其实就两行代码

    botton2 = (Button)findViewById(R.id.refresh);   botton2.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View view){SmsManager smsManager = SmsManager.getDefault();   //发送短信的逻辑smsManager.sendTextMessage(friends,null,"where are you?",null,null);}   });

注意sendTextMessage的第一个参数是手机号,第三个参数是短信内容。
我们设置接收短信的逻辑是要定义类继承BroadcastReceiver,它能在广播接收器里监听系统的广播,当收到短信的时候会执行。

 class MessageReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent)  //  onReceive(){Bundle bundle = intent.getExtras();Object[] pdus = (Object[])bundle.get("pdus");SmsMessage[] messages = new SmsMessage[pdus.length];for(int i = 0; i<messages.length; i++){messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);}String address = messages[0].getOriginatingAddress();String fullMessage = " ";for(SmsMessage message : messages){fullMessage += message.getMessageBody();}  //收取处理短信字符串   ->  address  fullmessage//Toast.makeText(getApplicationContext(), address, Toast.LENGTH_SHORT).show();//Toast.makeText(getApplicationContext(), fullMessage, Toast.LENGTH_SHORT).show();//Toast.makeText(getApplicationContext(),address.substring(3, address.length()), Toast.LENGTH_SHORT).show();//System.out.println(address);//System.out.println(fullMessage);//System.out.println(address.substring(3, address.length()-1));if(fullMessage.trim().equals("where are you?")){//Toast.makeText(getApplicationContext(),address.substring(3, address.length()), Toast.LENGTH_SHORT).show();SmsManager smsManager = SmsManager.getDefault(); //address.substring(3)smsManager.sendTextMessage(address.substring(3, address.length()),null,String.valueOf(location.getLatitude())+"/"+String.valueOf(location.getLongitude()),null,null);}}}   MessageReceiver messageReceiver = new MessageReceiver();   registerReceiver(messageReceiver, receiveFilter);

我们用bundle接收到短信,转化为smsmessage对象,再进行处理,获取到发送方号码和短信内容(address和content)

再判断,如果收到的是where are you?那么就发还经纬度给发送方。

发送方有+86所以用substring处理了一下。

经纬度的获取并转为string:

String.valueOf(location.getLatitude())+"/"+String.valueOf(location.getLongitude()

遇到问题:
if(fullMessage.trim().equals("where are you?"))

不执行,但是toast出来的字符串又是相等的。

最后用system输出,在Logcat中观察到其实是有空格的,用trim处理了一下,成功完成功能。

0 0