在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → android 百度地图定位SDK实例源码下载(geosdk实例)

android 百度地图定位SDK实例源码下载(geosdk实例)

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:1.94M
  • 下载次数:30
  • 浏览次数:359
  • 发布时间:2014-05-24
  • 实例类别:Android平台开发
  • 发 布 人:crazycode
  • 文件格式:.zip
  • 所需积分:2
 相关标签: Android 地图 实例 下载 百度

实例介绍

【实例简介】百度地图定位sdk 实例源码

【实例截图】

【核心代码】

package baidulocationsdk.demo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import com.baidu.location.BDGeofence;
import com.baidu.location.BDLocationStatusCodes;
import com.baidu.location.GeofenceClient;
import com.baidu.location.GeofenceClient.OnAddBDGeofencesResultListener;
import com.baidu.location.GeofenceClient.OnGeofenceTriggerListener;
import com.baidu.location.GeofenceClient.OnRemoveBDGeofencesResultListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;

/**
 * 百度定位SDK产品Demo功能主页
 */
public class MainActivity extends Activity implements OnItemClickListener, OnClickListener{
	private ListView mListView;
	private Button mTestLocBtn;
	private MainAdapter mAdapter;
	private SharedPreferences mSharedPreferences;
	private LocationClient mLocClient;
	
	private boolean mLocationInit;
	private boolean mGeofenceInit;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mLocClient = ((MyApplication)getApplication()).mLocationClient;
		
		mSharedPreferences = getSharedPreferences(Constants.PREF_FILE_NAME, MODE_PRIVATE);
		
		mListView = (ListView) findViewById(R.id.function_list);
		mTestLocBtn = (Button) findViewById(R.id.test_demo);
		mListView.setOnItemClickListener(this);
		mTestLocBtn.setOnClickListener(this);
	}
	
	@Override
	protected void onStart() {
		super.onStart();
		initAdapter();
	}
	
	//初始化主界面List
	private void initAdapter() {
		String[] mainTitle = this.getResources().getStringArray(R.array.main_title);
		String[] secondTitle = this.getResources().getStringArray(R.array.second_title);
		List<Map<String, Object>> list = new ArrayList<Map<String,Object>>(5);
		for (int i = 0; i < 5; i  ) {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put(MainAdapter.PARAM_MAIN_TITLE, mainTitle[i]);
			map.put(MainAdapter.PARAM_SECOND_TITLE, secondTitle[i]);
			map.put(MainAdapter.PARAM_SETTING_TITLE, getCurrentSetting(i));
			list.add(map);
		}
		mAdapter = new MainAdapter(this, list);
		mListView.setAdapter(mAdapter);
	}
	
	//各设置项是否进行设置
	private String getCurrentSetting(int index) {
		int setting = 0;
		switch (index) {
		case 0:
			setting = mSharedPreferences.getInt(Constants.BASE_LOCATION_FUNCTION, 0);
			break;
		case 1:
			setting = mSharedPreferences.getInt(Constants.GEOCODING_LOCATION_FUNCTION, 0);
			break;
		case 2:
			setting = mSharedPreferences.getInt(Constants.GEOFENCE_LOCATION_FUNCTION, 0);
			break;
		case 3:
			setting = mSharedPreferences.getInt(Constants.OTHRER_LOCATION_FUNCTION, 0);
			break;
		case 4:
			setting = Integer.MAX_VALUE;
			break;

		default:
			break;
		}
		
		return setting == 0 ? "未设置" : (setting == 1 ? "设置完毕" : "");
	}

	@Override
	public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
		Intent i ;
		switch (arg2) {
		case 0:
			//基础定位功能
			i = new Intent(MainActivity.this, BaseLocationActivity.class);
			startActivity(i);
			break;
		case 1:
			//反地理编码功能
			i = new Intent(MainActivity.this, GeocodeingActivity.class);
			startActivity(i);
			break;
		case 2:
			//地理围栏功能
			i = new Intent(MainActivity.this, GeofenceActivity.class);
			startActivity(i);
			break;
		case 3:
			//其他功能
			i = new Intent(MainActivity.this, OtherActivity.class);
			startActivity(i);
			break;
		case 4:
			//其他功能
			i = new Intent(MainActivity.this, QuestActivity.class);
			startActivity(i);
			break;

		default:
			break;
		}
	}

	
	private LocationMode mLocationMode;
	private boolean mLocationSequency;
	private int mScanSpan;
	private boolean mIsNeedAddress;
	private String mCoordType;
	private boolean mIsNeedDirection;
	
	private int mGeofenceType;
	
	private GeofenceClient mGeofenceClient;
	private String mSavingFenceName;
	private String mSavingFenceLongitude;
	private String mSavingFenceLaitude;
	private String mSavingFenceRadius;
	private String mSavingFenceCoordType;
	private Long mSavingFenceExpirationTime;
	
	private String mHightAccuracyLongitude;
	private String mHightAccuracyLaitude;
	private String mHightAccuracyRadius;
	private String mHightAccuracyCoordType;
	
	@Override
	public void onClick(View v) {
		getLocationParams();
		setLocationOption();
		//开始定位
		if (mLocationInit) {
			mLocClient.start();
		} else {
			Toast.makeText(this, "请设置定位相关的参数", Toast.LENGTH_SHORT).show();
			return;
		}
		
		if (!mLocationSequency && mLocClient.isStarted()) {
			//单次请求定位
			mLocClient.requestLocation();
		} 
		
		if (mGeofenceInit) {
			//地理围栏实现
			if (mGeofenceType == 0) {
				//高精度
				//4个参数代表要位置提醒的点的坐标,具体含义依次为:纬度,经度,距离范围,坐标系类型(gcj02,gps,bd09,bd09ll)
				((MyApplication)getApplication()).mNotifyLister.SetNotifyLocation(Double.valueOf(mHightAccuracyLaitude),
						Double.valueOf(mHightAccuracyLongitude), Float.valueOf(mHightAccuracyRadius), 
						mHightAccuracyCoordType);
				mLocClient.registerNotify(((MyApplication)getApplication()).mNotifyLister);
			} else if (mGeofenceType == 1) {
				//低功耗
				mGeofenceClient = ((MyApplication)getApplication()).mGeofenceClient;
				mGeofenceClient.registerGeofenceTriggerListener(new GeofenceTriggerListener());
				addGeofenceBySaving();
			}
		}
		
		Intent i = new Intent(MainActivity.this, LocationResultActivity.class);
		startActivity(i);
	}
	
	//添加一个低功耗围栏
	private void addGeofenceBySaving() {
		BDGeofence fence = new BDGeofence.Builder().setGeofenceId(mSavingFenceName).
				setCircularRegion(Double.valueOf(mSavingFenceLongitude), Double.valueOf(mSavingFenceLaitude), Integer.valueOf(mSavingFenceRadius)).
				setExpirationDruation(mSavingFenceExpirationTime).
				setCoordType(mSavingFenceCoordType).
				build();
		
		mGeofenceClient.addBDGeofence(fence, new AddGeofenceListener());
	}
	
	//获取定位参数数据
	private void getLocationParams() {
		//定位精度
		int locationMode = mSharedPreferences.getInt(Constants.LOCATION_MODE, 0);
		switch (locationMode) {
		case R.id.location_mode_height_accuracy:
			mLocationMode = LocationMode.Hight_Accuracy;
			break;
		case R.id.location_mode_saving_battery:
			mLocationMode = LocationMode.Battery_Saving;
			break;
		case R.id.location_mode_device_sensor:
			mLocationMode = LocationMode.Device_Sensors;
			break;
		default:
			break;
		}
		
		//定位模式及间隔时间
		int locationSequence = mSharedPreferences.getInt(Constants.LOCATION_SEQUENCE, 0);
		switch (locationSequence) {
		case R.id.continuous_location:
			mLocationSequency = true;
			mScanSpan = mSharedPreferences.getInt(Constants.LOCATION_SCAN_TIME, 1000);
			break;
		case R.id.single_location:
			mLocationSequency = false;
			break;

		default:
			break;
		}
		
		//地址信息
		int geocoding = mSharedPreferences.getInt(Constants.GEOCODING_TYPE, 0);
		switch (geocoding) {
		case R.id.use_geocode:
			mIsNeedAddress = false;
			break;
		case R.id.no_use_geocode:
			mIsNeedAddress = true;
			break;

		default:
			break;
		}
		
		//定位坐标类型
		int coord = mSharedPreferences.getInt(Constants.LOCATION_COORD_TYPE_FOR_OTHER, 1);
		switch (coord) {
		case R.id.location_coord_type_gcj:
			mCoordType = "gcj02";
			break;
		case R.id.location_coord_type_bd09ll:
			mCoordType = "bd09ll";
			break;
		case R.id.location_coord_type_bd09:
			mCoordType = "bd09";
			break;

		default:
			break;
		}
		
		//是否需要方向
		int direction = mSharedPreferences.getInt(Constants.LOCATION_DIRECTION, 1);
		switch (direction) {
		case R.id.is_need_direction_yes:
			mIsNeedDirection = true;
			break;
		case R.id.is_need_direction_no:
			mIsNeedDirection = false;
			break;

		default:
			break;
		}
		
		
		try {
			//地理围栏选项
			mGeofenceType = mSharedPreferences.getInt(Constants.GEOFENCE_TYPE, R.id.saving_battery);
			switch (mGeofenceType) {
			case R.id.hight_accuracy:
				//高精度
				mHightAccuracyLongitude = mSharedPreferences.getString(Constants.GEOFENCE_LONGITUDEE, "116.30677");
				mHightAccuracyLaitude = mSharedPreferences.getString(Constants.GEOFENCE_LATITUDE, "40.04173");
				mHightAccuracyRadius = mSharedPreferences.getString(Constants.GEOFENCE_RADIUS, "3000");
				mHightAccuracyCoordType = mSharedPreferences.getString(Constants.LOCATION_COORD_TYPE, "gps");
				mGeofenceInit = true;
				break;
			case R.id.saving_battery:
				//低功耗
				mSavingFenceName = mSharedPreferences.getString(Constants.BATTERYSAVE_GEOFENCE_NAME, "fence_name");
				mSavingFenceLongitude = mSharedPreferences.getString(Constants.BATTERYSAVE_GEOFENCE_LONGITUDEE, "116.30677");
				mSavingFenceLaitude = mSharedPreferences.getString(Constants.BATTERYSAVE_GEOFENCE_LATITUDE, "40.04173");
				mSavingFenceRadius = mSharedPreferences.getString(Constants.BATTERYSAVE_GEOFENCE_NAME, "1");
				mSavingFenceCoordType = mSharedPreferences.getString(Constants.BATTERYSAVE_GEOFENCE_COORD_TYPE, BDGeofence.COORD_TYPE_BD09LL);
				mSavingFenceExpirationTime = mSharedPreferences.getLong(Constants.BATTERYSAVE_GEOFENCE_VALITATE_TIME, 10L * (3600 * 1000));
				mGeofenceInit = true;
				break;
			default:
				break;
			}
		} catch (Exception e) {
			mGeofenceInit = false;
		}
	}
	
	//设置Option
	private void setLocationOption() {
		try {
			LocationClientOption option = new LocationClientOption();
			option.setLocationMode(mLocationMode);
			option.setCoorType(mCoordType);
			option.setScanSpan(mScanSpan);
			option.setNeedDeviceDirect(mIsNeedDirection);
			option.setIsNeedAddress(mIsNeedAddress);
			mLocClient.setLocOption(option);
			mLocationInit = true;
		} catch (Exception e) {
			e.printStackTrace();
			mLocationInit = false;
		}
	}
	
	
	/**
	 * 实现添加围栏监听器
	 *
	 */
	public class AddGeofenceListener implements OnAddBDGeofencesResultListener {

		@Override
		public void onAddBDGeofencesResult(int statusCode, String geofenceId) {
			try {
				if (statusCode == BDLocationStatusCodes.SUCCESS) {
					//开发者实现创建围栏成功的功能逻辑
					
					Toast.makeText(MainActivity.this, "围栏"   geofenceId   "添加成功", Toast.LENGTH_SHORT).show();
					
					if (mGeofenceClient != null) {
						//在添加地理围栏成功后,开启地理围栏服务,对本次创建成功且已进入的地理围栏,可以实时的提醒
						mGeofenceClient.start();
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * 实现删除围栏监听器
	 *
	 */
	public class RemoveGeofenceListener implements OnRemoveBDGeofencesResultListener {

		@Override
		public void onRemoveBDGeofencesByRequestIdsResult(int statusCode, String[] geofenceIds) {
			if (statusCode == BDLocationStatusCodes.SUCCESS) {
				//开发者实现删除围栏成功的功能逻辑

				Toast.makeText(MainActivity.this, "围栏删除成功", Toast.LENGTH_SHORT).show();
			}
		}
	}
	
	/**
	 * 实现进行围栏监听器
	 *
	 */
	public class GeofenceTriggerListener implements OnGeofenceTriggerListener {

		@Override
		public void onGeofenceTrigger(String geofenceId) {
			//开发者实现进入围栏的功能逻辑
			try {
				((Vibrator)MainActivity.this.getApplication().getSystemService(Service.VIBRATOR_SERVICE)).vibrate(3000);
				Toast.makeText(MainActivity.this, "已进入围栏"   geofenceId, Toast.LENGTH_SHORT).show();
			} catch (Exception e) {
				
			}
		}
	}
	
}


实例下载地址

android 百度地图定位SDK实例源码下载(geosdk实例)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警