首先说下,这个系列的博文基本上是针对一些新人或者说是业余的但对安卓开发有一定兴趣的人,所以会对使用说的比较细但对一些基本原理的方面说的比较笼统,只讲个大概意思。
这个安卓工程是在eclipse中建立的,所以需要您配置安卓的开发环境,其中分别为Eclipse、JDK、Android SDK、ADT,具体环境搭建可以在网上查找,资源是很多的。
该程序实现的功能是,监听短信,当短信符合要求,就将自己的坐标位置发送给保存好的手机号。
首先打开eclipse,在软件中打开工程文件,在工程中可以在左侧看到文件资源,对于新手来说,本程序只要关注src文件夹,layout文件夹中的文件就可以了。
src中的文件里面放的是代码,layout中放的布局文件。
MainActivity是安卓程序的入口代码,只要打开程序,首先要执行的就是该文件里面的onCreate方法,所以,一般对于变量,控件等初始化还有对按钮的监听都是放到这个方法中,同时,我在这个方法中写了按钮的监听事件,也就是当按钮被按的时候,就执行onClick(View v)方法,对号码进行保存并显示保存好的号码。
因为要获得经纬度,所以直接调用LocationManager来管理位置信息,然后Location获得最后坐标位置。LocationManager.NETWORK_PROVIDER就是代表用的网络定位,如果用gps的话就是LocationManager.GPS_PROVIDER。
//初始化
locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
location=locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
showinfor = (TextView) findViewById(R.id.show);
numberedit = (EditText)findViewById(R.id.number);
smsManager = SmsManager.getDefault();
paIntent = PendingIntent.getBroadcast(this, 0, new Intent(), 0);
smsManager = SmsManager.getDefault();
SMS_INBOX = Uri.parse("content://sms/inbox");
sp = getSharedPreferences("User", Context.MODE_PRIVATE);
Button btn = (Button) findViewById(R.id.enter);
showinfor.setText("");;//清除当前显示
showinfor.setText("当前电话为:"+sp.getString("number", "")+"\n");
//按键响应监听
btn.setOnClickListener(new View.OnClickListener() {
//按键响应方法
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//获得输入的电话号码
number=numberedit.getText().toString();
//将电话号码保存
Editor editor = sp.edit();
editor.putString("number", number);
editor.commit();
//显示保存成功
showinfor.setText("");;
showinfor.append("电话保存成功:"+number+"\n");
}
});
因为需要监听短信,所以要写一个类ReceiverSms继承BroadcastReceiver广播,这样,当短信来的时候,就可以监听,执行该类,将获得的短信内容,放到意图intent里传回MainActivity,传回来后还是要执行onCreate,所以,我们还要在onCreate中对传回来的intent进行解析,获得短信的手机号码和内容,然后对号码进行判断是否符合要求,比如号码是你设置好的电话号码吗?短信内容是你设定的关键字吗?如果符合要求,就对设置好的号码发送短信。
//获得意图
intent = getIntent();
//判断是否为空
if (intent != null) {
//获得短信的号码和内容
address = intent.getStringExtra("sms_address");
bodyString = intent.getStringExtra("sms_body");
if (address != null && bodyString != null) {
showinfor.setText("当前电话为:"+sp.getString("number", ""));
number = sp.getString("number", "");//从保存的电话里取出电话号码
//判断电话号码和内容是否和要求的一致
//后面的位置可以自己更改
//输出的信息也可以改
if ((address.equalsIgnoreCase(number)||
address.equalsIgnoreCase("+86"+number)) &&
bodyString.equalsIgnoreCase("位置")) {
smsManager.sendTextMessage(number, null,
"纬度:" + location.getLatitude() + ",经度:" + location.getLongitude(), paIntent, null);
}
}
}
程序的工程和apk上传到百度云:百度网盘
好对于新手,知道上面这些就可以了,但是对于已经会安卓编程的人来说,有下面需要注意的:
1、使用定位功能和短信功能,要有相应的权限,所以配置权限:
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
2、有时候location会返回null,经过网络上的资料整理发现有几种情况,会造成这样的结果,首先就是有部分手机没有谷歌框架,需要安装谷歌框架和服务,这个我没遇到,没经过测试,然后就是没用LocationListener对其监听,有个可能会拿不到经纬度,用LocationListener监听位置改变,然后就可以拿到新的经纬度,最后一种情况是我遇到的,经过上两个都没有成功,发现是手机设置的问题,如下图,需要勾选网络定位: