安卓开发笔记①:利用高德地图API进行定位、开发电子围栏、天气预报、轨迹记录、搜索周边(位置)

时间:2024-08-09 14:33:44

高德地图开发时需要导入的包在下面的网盘链接中:(由于高德地图api更新得太快,官网上最新的包使用起来没有之前的方便,所以以下提供最全面的原始包)

链接:http://pan.baidu.com/s/1eR8Nchc 密码:be1v

其中armeabi这个文件夹和其他4个jar是必要导入的,另外两个文件夹确保兼容性。

安卓开发笔记①:利用高德地图API进行定位、开发电子围栏、天气预报、轨迹记录、搜索周边(位置)

①首先登陆高德lbs开放平台获取Key,下面是官方详细教程:

http://lbs.amap.com/dev/ticket#/faqcat/1

(本人使用的是eclipse,所以获取安全码SHA1的方法为Windows->preferences->Android->build,如下图所示的SHA1 fingerprint)

安卓开发笔记①:利用高德地图API进行定位、开发电子围栏、天气预报、轨迹记录、搜索周边(位置)

然后你要设置你所开发的app的包,即在下面的Package中输入你的app包名(这点不能输错)

安卓开发笔记①:利用高德地图API进行定位、开发电子围栏、天气预报、轨迹记录、搜索周边(位置)

②申请到key之后,修改安卓项目的AndroidManifest.xml文件,即获取相关的权限和导入key(才能正常启动高德地图)

11个<uses-permission....>就是相关权限的设置,把代码写进去

还有加一个<meta-data....>把你的key导入进去,需要记住android:name="com.amap.api.v2.apikey"

安卓开发笔记①:利用高德地图API进行定位、开发电子围栏、天气预报、轨迹记录、搜索周边(位置)

下面的代码都是调试所用,所有信息都将在logcat栏目里面显示。

③进行定位:

  1. package (你的包名);
  2. import com.amap.api.location.AMapLocation;
  3. import com.amap.api.location.AMapLocationListener;
  4. import com.amap.api.location.LocationManagerProxy;
  5. import com.amap.api.location.LocationProviderProxy;
  6. import com.amap.api.maps.model.MyLocationStyle;
  7. import android.app.Activity;
  8. import android.location.Location;
  9. import android.os.Bundle;
  10. import android.util.Log;
  11. import android.view.Menu;
  12. import android.view.MenuItem;
  13. public class MainActivity extends Activity implements AMapLocationListener {
  14. LocationManagerProxy mLocationManagerProxy;
  15. @Override
  16. protected void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.activity_main);
  19. mLocationManagerProxy=LocationManagerProxy.getInstance(this);
  20. mLocationManagerProxy.requestLocationData(LocationProviderProxy.AMapNetwork, 2000, 15, this);
  21. }
  22. @Override
  23. public boolean onCreateOptionsMenu(Menu menu) {
  24. // Inflate the menu; this adds items to the action bar if it is present.
  25. getMenuInflater().inflate(R.menu.main, menu);
  26. return true;
  27. }
  28. @Override
  29. public boolean onOptionsItemSelected(MenuItem item) {
  30. // Handle action bar item clicks here. The action bar will
  31. // automatically handle clicks on the Home/Up button, so long
  32. // as you specify a parent activity in AndroidManifest.xml.
  33. int id = item.getItemId();
  34. if (id == R.id.action_settings) {
  35. return true;
  36. }
  37. return super.onOptionsItemSelected(item);
  38. }
  39. @Override
  40. public void onLocationChanged(Location location) {
  41. // TODO Auto-generated method stub
  42. }
  43. @Override
  44. public void onStatusChanged(String provider, int status, Bundle extras) {
  45. // TODO Auto-generated method stub
  46. }
  47. @Override
  48. public void onProviderEnabled(String provider) {
  49. // TODO Auto-generated method stub
  50. }
  51. @Override
  52. public void onProviderDisabled(String provider) {
  53. // TODO Auto-generated method stub
  54. }
  55. @Override
  56. protected void onDestroy() {
  57. // TODO Auto-generated method stub
  58. super.onDestroy();
  59. mLocationManagerProxy.destroy();
  60. }
  61. @Override
  62. public void onLocationChanged(AMapLocation arg0) {
  63. // TODO Auto-generated method stub
  64. if(arg0!=null&&arg0.getAMapException().getErrorCode()==0){
  65. Log.i("helloworld", arg0.toString());
  66. }
  67. }

④开发电子围栏(也就是设置一个点,可以设置半径,可以监控自己的位置是在圈内还是圈外)

  1. package (你的包名);
  2. import com.amap.api.maps.AMap.OnMapClickListener;
  3. import com.amap.api.location.AMapLocation;
  4. import com.amap.api.location.AMapLocationListener;
  5. import com.amap.api.location.LocationManagerProxy;
  6. import com.amap.api.maps.MapView;
  7. import com.amap.api.maps.model.CircleOptions;
  8. import com.amap.api.maps.model.LatLng;
  9. import android.app.Activity;
  10. import android.app.PendingIntent;
  11. import android.content.BroadcastReceiver;
  12. import android.content.Context;
  13. import android.content.Intent;
  14. import android.content.IntentFilter;
  15. import android.location.Location;
  16. import android.location.LocationManager;
  17. import android.os.Bundle;
  18. import android.util.Log;
  19. public class GeoFenceActivity extends Activity implements OnMapClickListener,AMapLocationListener{
  20. LocationManagerProxy mLocationManagerProxy;
  21. MapView mapView;
  22. String GEOFENCE_BROADCAST_ACTION="com.example.helloworld";
  23. PendingIntent mPendingIntent;
  24. @Override
  25. protected void onCreate(Bundle savedInstanceState) {
  26. // TODO Auto-generated method stub
  27. super.onCreate(savedInstanceState);
  28. setContentView(R.layout.activity_main);
  29. mLocationManagerProxy=LocationManagerProxy.getInstance(this);
  30. mapView=(MapView)findViewById(R.id.main_mapView);
  31. mapView.onCreate(savedInstanceState);
  32. mapView.getMap().setOnMapClickListener(this);
  33. Intent intent=new Intent(GEOFENCE_BROADCAST_ACTION);
  34. mPendingIntent=PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
  35. IntentFilter intentfilter=new IntentFilter();
  36. intentfilter.addAction(GEOFENCE_BROADCAST_ACTION);
  37. this.registerReceiver(mGeoFenceReceiver, intentfilter);
  38. mLocationManagerProxy.requestLocationData(LocationManager.GPS_PROVIDER,2000,15, this);
  39. }
  40. private BroadcastReceiver mGeoFenceReceiver=new BroadcastReceiver(){
  41. @Override
  42. public void onReceive(Context context, Intent intent) {
  43. // TODO Auto-generated method stub
  44. Log.e("helloworld", "收到广播");
  45. int i= intent.getIntExtra("status", -1);
  46. if(i==1){
  47. Log.e("helloworld", "在地理围栏内部");
  48. }
  49. if(i==0){
  50. Log.e("helloworld", "在地理围栏外部");
  51. }
  52. }
  53. };
  54. @Override
  55. protected void onResume() {
  56. // TODO Auto-generated method stub
  57. super.onResume();
  58. mapView.onResume();
  59. }
  60. @Override
  61. protected void onDestroy() {
  62. // TODO Auto-generated method stub
  63. super.onDestroy();
  64. }
  65. @Override
  66. public void onMapClick(LatLng arg0) {
  67. // TODO Auto-generated method stub
  68. Log.e("helloworld", "lat ="+arg0.latitude);
  69. Log.e("helloworld", "lon ="+arg0.longitude);
  70. mapView.getMap().addCircle(new CircleOptions().center(arg0).radius(1000));
  71. mLocationManagerProxy.addGeoFenceAlert(arg0.latitude, arg0.longitude, 1000, 1000*60*30, mPendingIntent);
  72. }
  73. @Override
  74. public void onLocationChanged(Location location) {
  75. // TODO Auto-generated method stub
  76. }
  77. @Override
  78. public void onStatusChanged(String provider, int status, Bundle extras) {
  79. // TODO Auto-generated method stub
  80. }
  81. @Override
  82. public void onProviderEnabled(String provider) {
  83. // TODO Auto-generated method stub
  84. }
  85. @Override
  86. public void onProviderDisabled(String provider) {
  87. // TODO Auto-generated method stub
  88. }
  89. @Override
  90. public void onLocationChanged(AMapLocation arg0) {
  91. // TODO Auto-generated method stub
  92. }
  93. }

安卓开发笔记①:利用高德地图API进行定位、开发电子围栏、天气预报、轨迹记录、搜索周边(位置)

⑤天气预报(现在或未来的):

  1. package (你的包名);
  2. import java.util.List;
  3. import com.amap.api.location.AMapLocalDayWeatherForecast;
  4. import com.amap.api.location.AMapLocalWeatherForecast;
  5. import com.amap.api.location.AMapLocalWeatherListener;
  6. import com.amap.api.location.AMapLocalWeatherLive;
  7. import com.amap.api.location.LocationManagerProxy;
  8. import android.app.Activity;
  9. import android.os.Bundle;
  10. import android.util.Log;
  11. public class WeatherActivity extends Activity implements AMapLocalWeatherListener{
  12. LocationManagerProxy mLocationManagerProxy;
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. // TODO Auto-generated method stub
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.activity_main);
  18. mLocationManagerProxy=LocationManagerProxy.getInstance(this);
  19. mLocationManagerProxy.requestWeatherUpdates(LocationManagerProxy.WEATHER_TYPE_FORECAST,this);
  20. }
  21. @Override
  22. protected void onDestroy() {
  23. // TODO Auto-generated method stub
  24. super.onDestroy();
  25. }
  26. @Override
  27. public void onWeatherForecaseSearched(AMapLocalWeatherForecast arg0) {
  28. // TODO Auto-generated method stub
  29. //未来天气
  30. List<AMapLocalDayWeatherForecast> list=arg0.getWeatherForecast();
  31. for(int i=0;i<list.size();i++){
  32. AMapLocalDayWeatherForecast dayweather=list.get(i);
  33. Log.i("helloworld", "城市"+dayweather.getCity());
  34. Log.i("helloworld", "时间"+dayweather.getDate());
  35. Log.i("helloworld", "温度"+dayweather.getDayTemp());
  36. Log.i("helloworld", "风力"+dayweather.getDayWindPower());
  37. }
  38. }
  39. @Override
  40. public void onWeatherLiveSearched(AMapLocalWeatherLive arg0) {
  41. // TODO Auto-generated method stub
  42. //当天天气
  43. Log.i("helloworld", "城市"+arg0.getCity());
  44. Log.i("helloworld", "湿度"+arg0.getHumidity());
  45. Log.i("helloworld", "风力"+arg0.getWindPower());
  46. }
  47. }

安卓开发笔记①:利用高德地图API进行定位、开发电子围栏、天气预报、轨迹记录、搜索周边(位置)

⑥轨迹记录(这里是有模拟轨迹数据,如果是真正的设备的话可以把每次定位的数据放入容器中再读取轨迹)

  1. package com.example.maptest;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.amap.api.location.AMapLocation;
  5. import com.amap.api.location.AMapLocationListener;
  6. import com.amap.api.maps.AMap.OnMapLoadedListener;
  7. import com.amap.api.maps.MapView;
  8. import com.amap.api.maps.model.LatLng;
  9. import com.amap.api.maps.model.PolygonOptions;
  10. import android.app.Activity;
  11. import android.location.Location;
  12. import android.os.Bundle;
  13. import android.os.Trace;
  14. public class TrackActivity extends Activity implements OnMapLoadedListener{
  15. MapView mapview;
  16. double Trace[]={
  17. 40.03833763826341,116.44161604271481,
  18. 40.038120,116.441789,
  19. 40.0378823754,116.441780,
  20. 40.037589,116.441768,
  21. 40.03744051,116.44175,
  22. 40.036884,116.441722,
  23. 40.03663242,116.441705466};
  24. List<LatLng>list;
  25. @Override
  26. protected void onCreate(Bundle savedInstanceState) {
  27. // TODO Auto-generated method stub
  28. super.onCreate(savedInstanceState);
  29. setContentView(R.layout.activity_main);
  30. mapview=(MapView)findViewById(R.id.main_mapView);
  31. mapview.onCreate(savedInstanceState);
  32. mapview.getMap().setOnMapLoadedListener(this);
  33. list=new ArrayList<LatLng>();
  34. for(int i=0;i<Trace.length-1;i++){
  35. LatLng latlng=new LatLng(Trace[i], Trace[++i]);
  36. list.add(latlng);
  37. }
  38. }
  39. @Override
  40. protected void onResume() {
  41. // TODO Auto-generated method stub
  42. super.onResume();
  43. mapview.onResume();
  44. }
  45. @Override
  46. protected void onDestroy() {
  47. // TODO Auto-generated method stub
  48. super.onDestroy();
  49. }
  50. @Override
  51. public void onMapLoaded() {
  52. // TODO Auto-generated method stub
  53. mapview.getMap().addPolygon(new PolygonOptions().addAll(list));
  54. }
  55. }

安卓开发笔记①:利用高德地图API进行定位、开发电子围栏、天气预报、轨迹记录、搜索周边(位置)

⑦搜索周边位置(以下例子是将搜索范围确定在“杨小贤”,“餐饮”,“广州市”)并且是以自己所在大学城位置为中心半径为200000m范围内搜索:

  1. package (你的包名);
  2. import java.util.List;
  3. import com.amap.api.location.AMapLocation;
  4. import com.amap.api.location.AMapLocationListener;
  5. import com.amap.api.location.LocationManagerProxy;
  6. import com.amap.api.location.LocationProviderProxy;
  7. import com.amap.api.maps.MapView;
  8. import com.amap.api.services.core.LatLonPoint;
  9. import com.amap.api.services.core.PoiItem;
  10. import com.amap.api.services.poisearch.PoiItemDetail;
  11. import com.amap.api.services.poisearch.PoiResult;
  12. import com.amap.api.services.poisearch.PoiSearch;
  13. import com.amap.api.services.poisearch.PoiSearch.OnPoiSearchListener;
  14. import com.amap.api.services.poisearch.PoiSearch.SearchBound;
  15. import android.app.Activity;
  16. import android.location.Location;
  17. import android.os.Bundle;
  18. import android.util.Log;
  19. import android.view.View;
  20. import android.view.View.OnClickListener;
  21. import android.widget.Button;
  22. public class SearchActivity extends Activity implements AMapLocationListener,OnPoiSearchListener,OnClickListener {
  23. LocationManagerProxy mLocationManagerProxy;
  24. MapView mapView;
  25. @Override
  26. protected void onCreate(Bundle savedInstanceState) {
  27. // TODO Auto-generated method stub
  28. super.onCreate(savedInstanceState);
  29. setContentView(R.layout.activity_main);
  30. mapView=(MapView)findViewById(R.id.main_mapView);
  31. mapView.onCreate(savedInstanceState);
  32. mLocationManagerProxy=LocationManagerProxy.getInstance(this);
  33. mLocationManagerProxy.requestLocationData(LocationProviderProxy.AMapNetwork, 2000, 15, this);
  34. Button button=(Button)findViewById(R.id.button);
  35. button.setOnClickListener(this);
  36. }
  37. @Override
  38. public void onLocationChanged(Location location) {
  39. // TODO Auto-generated method stub
  40. }
  41. @Override
  42. public void onStatusChanged(String provider, int status, Bundle extras) {
  43. // TODO Auto-generated method stub
  44. }
  45. @Override
  46. protected void onDestroy() {
  47. // TODO Auto-generated method stub
  48. super.onDestroy();
  49. }
  50. @Override
  51. protected void onResume() {
  52. // TODO Auto-generated method stub
  53. super.onResume();
  54. }
  55. @Override
  56. public void onProviderEnabled(String provider) {
  57. // TODO Auto-generated method stub
  58. }
  59. @Override
  60. public void onProviderDisabled(String provider) {
  61. // TODO Auto-generated method stub
  62. }
  63. AMapLocation location;
  64. @Override
  65. public void onLocationChanged(AMapLocation arg0) {
  66. // TODO Auto-generated method stub
  67. location=arg0;
  68. Log.e("helloworld", arg0.toString());
  69. }
  70. @Override
  71. public void onPoiItemDetailSearched(PoiItemDetail arg0, int arg1) {
  72. // TODO Auto-generated method stub
  73. }
  74. @Override
  75. public void onPoiSearched(PoiResult arg0, int arg1) {
  76. // TODO Auto-generated method stub
  77. if(arg1==0){
  78. List<PoiItem>list=arg0.getPois();
  79. for(int i=0;i<list.size();i++){
  80. PoiItem item=list.get(i);
  81. Log.e("helloworld", item.toString());
  82. }
  83. }
  84. }
  85. public void search(){
  86. PoiSearch.Query query=new PoiSearch.Query("杨小贤", "餐饮", "广州市");
  87. query.setPageSize(10);//每页显示多少个poiitem
  88. query.setPageNum(0);
  89. PoiSearch poiSearch=new PoiSearch(this, query);
  90. poiSearch.setOnPoiSearchListener(this);
  91. LatLonPoint poinot=new LatLonPoint(location.getLatitude(), location.getLongitude());
  92. poiSearch.setBound(new SearchBound(poinot, 200000, true));
  93. poiSearch.searchPOIAsyn();
  94. }
  95. @Override
  96. public void onClick(View v) {
  97. // TODO Auto-generated method stub
  98. search();
  99. }
  100. }

安卓开发笔记①:利用高德地图API进行定位、开发电子围栏、天气预报、轨迹记录、搜索周边(位置)

版权声明:Copyright©All right reserved 一捆好葱版权所有,转载请说明出处。

http://blog.****.NET/****568302203/article/details/52403706