注:本篇文章中代码关于短信收发部分部分参考自《第一行代码》
我们要实现的功能是,点击一个按钮,向朋友发送短信,内容为"where are you?",朋友收到之后,发还一个经纬度信息,这里面的逻辑很好想,设置好要发送的信息之后发送,接收到之后判断,再获取到想要的信息,根据获取到的发送方,发送经纬度给它。
所以关键还是发送和接受本身的实现逻辑。
注意,接收短信可以在模拟器中,我们可以用ddms来发送短信,但是发送短信就必须在真机中了。
我们设置点击事件,发送短信,发送短信的逻辑其实就两行代码
botton2 = (Button)findViewById(R.id.refresh);
botton2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View view)
{
SmsManager smsManager = SmsManager.getDefault(); //发送短信的逻辑
smsManager.sendTextMessage(friends,null,"where are you?",null,null);
}
});
注意sendTextMessage的第一个参数是手机号,第三个参数是短信内容。
我们设置接收短信的逻辑是要定义类继承BroadcastReceiver,它能在广播接收器里监听系统的广播,当收到短信的时候会执行。
class MessageReceiver extends BroadcastReceiver
{
@Override
public 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 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);
再判断,如果收到的是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处理了一下,成功完成功能。