android百度地图api实现短信接收定位资料.docx
《android百度地图api实现短信接收定位资料.docx》由会员分享,可在线阅读,更多相关《android百度地图api实现短信接收定位资料.docx(20页珍藏版)》请在冰豆网上搜索。
androidXX地图api实现短信接收定位资料
工程文件结构:
demoApplication.java
packagecom.gy.mymaps;
importandroid.app.Application;
importandroid.content.Context;
importandroid.widget.Toast;
importcom.baidu.mapapi.BMapManager;
importcom.baidu.mapapi.MKGeneralListener;
importcom.baidu.mapapi.map.MKEvent;
publicclassDemoApplicationextendsApplication{
privatestaticDemoApplicationmInstance=null;
publicbooleanm_bKeyRight=true;
BMapManagermBMapManager=null;
@Override
publicvoidonCreate(){
super.onCreate();
mInstance=this;
initEngineManager(this);
}
publicvoidinitEngineManager(Contextcontext){
if(mBMapManager==null){
mBMapManager=newBMapManager(context);
}
if(!
mBMapManager.init(newMyGeneralListener())){
Toast.makeText(DemoApplication.getInstance().getApplicationContext(),
"BMapManager初始化错误!
",Toast.LENGTH_LONG).show();
}
}
publicstaticDemoApplicationgetInstance(){
returnmInstance;
}
//常用事件监听,用来处理通常的网络错误,授权验证错误等
staticclassMyGeneralListenerimplementsMKGeneralListener{
publicvoidonGetNetworkState(intiError){
if(iError==MKEvent.ERROR_NETWORK_CONNECT){
Toast.makeText(DemoApplication.getInstance().getApplicationContext(),"您的网络出错啦!
",
Toast.LENGTH_LONG).show();
}
elseif(iError==MKEvent.ERROR_NETWORK_DATA){
Toast.makeText(DemoApplication.getInstance().getApplicationContext(),"输入正确的检索条件!
",
Toast.LENGTH_LONG).show();
}
//...
}
publicvoidonGetPermissionState(intiError){
//非零值表示key验证未通过
if(iError!
=0){
//鎺堟潈Key閿欒锛�
Toast.makeText(DemoApplication.getInstance().getApplicationContext(),
"请输入正确的授权Key,并检查您的网络连接是否正常!
error:
"+iError,Toast.LENGTH_LONG).show();
DemoApplication.getInstance().m_bKeyRight=false;
}
else{
DemoApplication.getInstance().m_bKeyRight=true;
Toast.makeText(DemoApplication.getInstance().getApplicationContext(),
"key认证成功",Toast.LENGTH_LONG).show();
}
}
}
}
Mainactivity.java:
packagecom.gy.mymaps;
importjava.util.List;
importandroid.annotation.SuppressLint;
importandroid.app.Activity;
importandroid.content.ContentValues;
importandroid.database.ContentObserver;
importandroid.database.Cursor;
importandroid.graphics.drawable.Drawable;
import.Uri;
importandroid.os.Build;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.telephony.SmsManager;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.EditText;
importandroid.widget.Toast;
importcom.baidu.mapapi.BMapManager;
importcom.baidu.mapapi.map.ItemizedOverlay;
importcom.baidu.mapapi.map.MapView;
importcom.baidu.mapapi.map.OverlayItem;
importcom.baidu.mapapi.search.MKAddrInfo;
importcom.baidu.mapapi.search.MKBusLineResult;
importcom.baidu.mapapi.search.MKDrivingRouteResult;
importcom.baidu.mapapi.search.MKPoiResult;
importcom.baidu.mapapi.search.MKSearch;
importcom.baidu.mapapi.search.MKSearchListener;
importcom.baidu.mapapi.search.MKShareUrlResult;
importcom.baidu.mapapi.search.MKSuggestionResult;
importcom.baidu.mapapi.search.MKTransitRouteResult;
importcom.baidu.mapapi.search.MKWalkingRouteResult;
importapi.basestruct.GeoPoint;
//importcom.gy.msmsend.R;
publicclassMainActivityextendsActivity{
//UI相关
ButtonmBtnReverseGeoCode=null;//将坐标反编码为地址
ButtonmBtnGeoCode=null;//将地址编码为坐标
ButtonmsmSend=null;//短信发送按钮
//地图相关
MapViewmMapView=null;//地图View
//搜索相关
MKSearchmSearch=null;//搜索模块,也可去掉地图模块独立使用
EditTextphoneText;
String[]as;
Stringcity=null;
Stringpos=null;
Drawablemarker;
intpng=0;
//
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
/*
*注册短信变化事件监听
*/
SmsContentcontent=newSmsContent(newHandler());
//注册短信变化监听
this.getContentResolver().registerContentObserver(Uri.parse("content:
//sms/"),true,content);
//注册短信变化监听
/**
*使用地图sdk前需先初始化BMapManager.
*BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创建,
*并在地图地图模块销毁后销毁,只要还有地图模块在使用,BMapManager就不应该销毁
*/
DemoApplicationapp=(DemoApplication)this.getApplication();
if(app.mBMapManager==null){
app.mBMapManager=newBMapManager(getApplicationContext());
/**
*如果BMapManager没有初始化则初始化BMapManager
*/
app.mBMapManager.init(newDemoApplication.MyGeneralListener());
}
setContentView(R.layout.activity_main);
CharSequencetitleLable="我的位置";
setTitle(titleLable);
//地图初始化
mMapView=(MapView)findViewById(R.id.bmapView);
mMapView.getController().enableClick(true);
mMapView.getController().setZoom(12);
//初始化搜索模块,注册事件监听
mSearch=newMKSearch();
mSearch.init(app.mBMapManager,newMKSearchListener(){
publicvoidonGetPoiDetailSearchResult(inttype,interror){
}
publicvoidonGetAddrResult(MKAddrInfores,interror){
if(error!
=0){
Stringstr=String.format("错误号:
%d",error);
Toast.makeText(MainActivity.this,str,Toast.LENGTH_LONG).show();
return;
}
//地图移动到该点
mMapView.getController().animateTo(res.geoPt);
if(res.type==MKAddrInfo.MK_GEOCODE){
//地理编码:
通过地址检索坐标点
StringstrInfo=String.format("纬度:
%f经度:
%f",res.geoPt.getLatitudeE6()/1e6,res.geoPt.getLongitudeE6()/1e6);
Toast.makeText(MainActivity.this,strInfo,Toast.LENGTH_LONG).show();
}
if(res.type==MKAddrInfo.MK_REVERSEGEOCODE){
//反地理编码:
通过坐标点检索详细地址及周边poi
StringstrInfo=res.strAddr;
Toast.makeText(MainActivity.this,strInfo,Toast.LENGTH_LONG).show();
EditTexteditGeoCodeKey=(EditText)findViewById(R.id.geocodekey);
//设置城市
editGeoCodeKey.setText(strInfo);
}
//生成ItemizedOverlay图层用来标注结果点
ItemizedOverlayitemOverlay=newItemizedOverlay(null,mMapView);
//生成Item
OverlayItemitem=newOverlayItem(res.geoPt,"",null);
//为maker定义位置和边界
marker.setBounds(0,0,marker.getIntrinsicWidth(),marker.getIntrinsicHeight());
//给item设置marker
item.setMarker(marker);
//在图层上添加item
itemOverlay.addItem(item);
//清除地图其他图层
mMapView.getOverlays().clear();
//添加一个标注ItemizedOverlay图层
mMapView.getOverlays().add(itemOverlay);
//执行刷新使生效
mMapView.refresh();
}
publicvoidonGetPoiResult(MKPoiResultres,inttype,interror){
}
publicvoidonGetDrivingRouteResult(MKDrivingRouteResultres,interror){
}
publicvoidonGetTransitRouteResult(MKTransitRouteResultres,interror){
}
publicvoidonGetWalkingRouteResult(MKWalkingRouteResultres,interror){
}
publicvoidonGetBusDetailResult(MKBusLineResultresult,intiError){
}
publicvoidonGetSuggestionResult(MKSuggestionResultres,intarg1){
}
publicvoidonGetShareUrlResult(MKShareUrlResultresult,inttype,
interror){
//TODOAuto-generatedmethodstub
}
});
//设定地理编码及反地理编码按钮的响应
mBtnReverseGeoCode=(Button)findViewById(R.id.reversegeocode);
mBtnGeoCode=(Button)findViewById(R.id.geocode);
msmSend=(Button)findViewById(R.id.sendButton);
OnClickListenerclickListener=newOnClickListener(){
publicvoidonClick(Viewv){
SearchButtonProcess(v);
}
};
mBtnReverseGeoCode.setOnClickListener(clickListener);
mBtnGeoCode.setOnClickListener(clickListener);
msmSend.setOnClickListener(clickListener);
}
/**
*发起搜索
*@paramv
*/
voidSearchButtonProcess(Viewv){
if(mBtnReverseGeoCode.equals(v)){
EditTextlat=(EditText)findViewById(R.id.lat);
EditTextlon=(EditText)findViewById(R.id.lon);
//得到需要标在地图上的资源
marker=getResources().getDrawable(R.drawable.ic_mark0);
GeoPointptCenter=newGeoPoint((int)(Float.valueOf(lat.getText().toString())*1e6),(int)(Float.valueOf(lon.getText().toString())*1e6));
//反Geo搜索
mSearch.reverseGeocode(ptCenter);
}elseif(mBtnGeoCode.equals(v)){
EditTexteditCity=(EditText)findViewById(R.id.city);
EditTexteditGeoCodeKey=(EditText)findViewById(R.id.geocodekey);
//得到需要标在地图上的资源
marker=getResources().getDrawable(R.drawable.ic_mark0);
//Geo搜索
mSearch.geocode(editGeoCodeKey.getText().toString(),editCity.getText().toString());
}elseif(msmSend.equals(v)){
phoneText=(EditText)findViewById(R.id.tel);
//发送短信
sendMessage();
}
}
@Override
protectedvoidonPause(){
mMapView.onPause();
super.onPause();
}
@Override
protectedvoidonResume(){
mMapView.onResume();
super.onResume();
}
@Override
protectedvoidonDestroy(){
mMapView.destroy();
mSearch.destory();
super.onDestroy();
}
@Override
protectedvoidonSaveInstanceState(BundleoutState){
super.onSaveInstanceState(outState);
mMapView.onSaveInstanceState(outState);
}
@Override
protectedvoidonRestoreInstanceState(BundlesavedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
mMapView.onRestoreInstanceState(savedInstanceState);
}
/**
*
*/
privatevoidsendMessage(){
//获取文本框中的内容
Stringphone_num=phoneText.getText().toString();
Stringcontent="QUERY";
SmsManagersmsMagager=SmsManager.getDefault();
if(content.length()>70){
Listsms=smsMagager.divideMessage(content);
for(Stringcon:
sms){
smsMagager.sendTextMessage(phone_num,null,con,null,null);
}
}else{
smsMagager.sendTextMessage(phone_num,null,content,null,null);
}
Toast.makeText(MainActivity.this,R.string.info,Toast.LENGTH_LONG).show();
}
/*
*监听短信数据库
*/
classSmsContentextendsContentObserver{
privateCursorcursor=null;
@SuppressLint("ShowToast")
publicSmsContent(Handlerhandler){
super(handler);
//TODOAuto-generatedconstructorstu
}
@SuppressWarnings("deprecation")
@Override
publicvoidonChange(booleanselfChange)