file:AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.mrsoft.mrmap.app.mr"android:versionCode="1"android:versionName="1.0"><uses-sdk android:minSdkVersion="3" /><uses-permission android:name="android.permission.RESTART_PACKAGES" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.INTERNET" /><application android:icon="@drawable/maps" android:label="@string/app_name"><activity android:name=".main"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><uses-library android:name="com.google.android.maps"/></application>
</manifest>

file:main.java

package com.mrsoft.mrmap.app.mr;import java.util.List;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class main extends MapActivity {private MapView map;private TextView tv;private MapController mc;private LocationManager lm;private Criteria criteria;private Location location;private GeoPoint loacl;private List<Overlay> listOfOverlays;private MapOverlay mapOverlay;private final static int MENU_TRA = Menu.FIRST;private final static int MENU_SAT = Menu.FIRST+1;private final static int MENU_STR = Menu.FIRST+2;private final static int MENU_ABOUT = Menu.FIRST+3;private final static int MENU_EXIT = Menu.FIRST+4;private final static int MENU_GPS = Menu.FIRST+5;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);map = (MapView)findViewById(R.id.map);tv = (TextView)findViewById(R.id.tv);// 设置缩放map.setBuiltInZoomControls(true);initMap(39, 116);listOfOverlays = map.getOverlays();listOfOverlays.clear();lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);if (!lm.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)){Toast.makeText(this, "GPS已关闭,请手动开启GPS后再试!", Toast.LENGTH_SHORT).show();return;}else{Toast.makeText(this, "GPS定位中...", Toast.LENGTH_SHORT).show();}criteria = new Criteria();criteria.setAccuracy(Criteria.ACCURACY_FINE);    // 设置精确度criteria.setAltitudeRequired(true);             // 设置请求海拔criteria.setBearingRequired(true);             // 设置请求方位criteria.setCostAllowed(true);                 // 设置允许运营商收费criteria.setPowerRequirement(Criteria.POWER_LOW); // 低功耗String provider = lm.getBestProvider(criteria, true);location = lm.getLastKnownLocation(provider);newLocalGPS(location);// 监听1秒一次 忽略位置变化lm.requestLocationUpdates(provider, 1*1000, 0, new locationListener());}class locationListener implements LocationListener{@Overridepublic void onLocationChanged(Location location) {// TODO Auto-generated method stubnewLocalGPS(location);}@Overridepublic void onProviderDisabled(String provider) {// TODO Auto-generated method stubnewLocalGPS(null);}@Overridepublic void onProviderEnabled(String provider) {// TODO Auto-generated method stub}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {// TODO Auto-generated method stub}}public void newLocalGPS(Location location){if (location!=null){double latitude = location.getLatitude(); //精度double longitude = location.getLongitude(); // 纬度double speed = location.getSpeed(); // 速度double altitude = location.getAltitude(); // 海拔tv.setText("精度"+latitude+'\n'+"纬度"+longitude+'\n'+"速度"+speed+"m/s"+'\n'+"海拔"+altitude+"m"+'\n');initMap((int)latitude, (int)longitude);MapOverlay mapOverlay = new MapOverlay(Color.GREEN, (int)latitude, (int)longitude);listOfOverlays.add(mapOverlay);}else{// 未获取地理信息位置tv.setBackgroundColor(Color.BLUE);tv.setText("位置未知或正在获取中...");}}public void initMap(int lat, int lon){// 设置初始地图的中心位置loacl = new GeoPoint(lat*1000000, lon*1000000);mc = map.getController();//mc.setCenter(loacl);mc.animateTo(loacl);mc.setZoom(10);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// TODO Auto-generated method stubmenu.add(0, MENU_TRA, 0, "交通视图");menu.add(0, MENU_SAT, 1, "街景视图");menu.add(0, MENU_STR, 2, "卫星视图");menu.add(1, MENU_GPS, 3, "定位");menu.add(1, MENU_ABOUT, 4, "关于");menu.add(1, MENU_EXIT, 5, "退出");return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onMenuItemSelected(int featureId, MenuItem item) {// TODO Auto-generated method stubswitch (item.getItemId()){case MENU_TRA:map.setTraffic(true);break;case MENU_SAT:map.setStreetView(true);break;case MENU_STR:map.setSatellite(true);break;case MENU_GPS:LayoutInflater inflater = LayoutInflater.from(this);//getLayoutInflater();View layout = inflater.inflate(R.layout.dg, null);final AlertDialog.Builder adb = new Builder(main.this); adb.setTitle("定位");adb.setView(layout);adb.setPositiveButton("确定", new OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubAlertDialog ad = (AlertDialog) dialog;EditText j_et = (EditText)ad.findViewById(R.id.j_et);EditText w_et = (EditText)ad.findViewById(R.id.w_et);int lat = Integer.parseInt(j_et.getText().toString());int lon = Integer.parseInt(w_et.getText().toString());loacl = new GeoPoint(lat*1000000, lon*1000000);MapOverlay mapOverlay = new MapOverlay(Color.RED, lat, lon);listOfOverlays.add(mapOverlay);mc.animateTo(loacl);//initMap(Integer.parseInt(j_et.getText().toString()), Integer.parseInt(w_et.getText().toString()));dialog.dismiss();}});adb.setNegativeButton("取消", new OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubdialog.dismiss();}});adb.create().show();break;case MENU_ABOUT:AlertDialog.Builder bd = new Builder(main.this);  bd.setMessage("mrMap.apk\n版本:1.0\n作者:mrandexe");  bd.setTitle("关于");  bd.setPositiveButton("确认", new OnClickListener(){  @Override  public void onClick(DialogInterface arg0, int arg1) {  // TODO Auto-generated method stub  arg0.dismiss();  }  });  bd.create().show(); break;case MENU_EXIT:exit();break;}return super.onMenuItemSelected(featureId, item);}private void exit()  {  AlertDialog.Builder builder = new Builder(main.this);  builder.setMessage("确认退出吗?");  builder.setTitle("提示");  builder.setPositiveButton("确认", new OnClickListener(){  @Override  public void onClick(DialogInterface arg0, int arg1) {  // TODO Auto-generated method stub  arg0.dismiss();ActivityManager actMgr = (ActivityManager)getSystemService(ACTIVITY_SERVICE);  actMgr.restartPackage(getPackageName());}  });  builder.setNegativeButton("取消", new OnClickListener(){  @Override  public void onClick(DialogInterface dialog, int which) {  // TODO Auto-generated method stub  dialog.dismiss();  }  });  builder.create().show();   }@Override  public boolean onKeyDown(int keyCode, KeyEvent event) {  // TODO Auto-generated method stub  if (keyCode==KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0)  {  exit();  return true;  }  return super.onKeyDown(keyCode, event);  }@Overrideprotected boolean isRouteDisplayed() {// TODO Auto-generated method stubreturn false;}// 标记class MapOverlay extends com.google.android.maps.Overlay{private int x = 0;private int y = 0;private int color;public MapOverlay(int color, int x, int y){this.color = color;this.x = x;this.y = y;}@Overridepublic boolean draw(Canvas canvas, MapView mapView, boolean shadow,long when) {// TODO Auto-generated method stubPoint screenPts = new Point();GeoPoint loacl = new GeoPoint(x*1000000, y*1000000);mapView.getProjection().toPixels(loacl, screenPts);Paint paint = new Paint();paint.setColor(color);canvas.drawCircle(screenPts.x, screenPts.y, 5, paint);return super.draw(canvas, mapView, shadow, when);}}}

file:layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/main"android:layout_width="fill_parent"android:layout_height="fill_parent"><com.google.android.maps.MapViewandroid:id="@+id/map"android:layout_width="fill_parent" android:layout_height="fill_parent"android:enabled="true"android:clickable="true"android:apiKey="076khi0v42LLy9gZ481gP9pAq9JXqOweGttgwHQ"/><TextView android:layout_height="wrap_content" android:id="@+id/tv" android:layout_width="wrap_content"/>
</RelativeLayout>

file:layout/dg.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/dg" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"><TextView android:id="@+id/textView1" android:text="经度" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"></TextView><EditText android:text="" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_weight="1" android:id="@+id/j_et"android:numeric="integer"/><TextView android:id="@+id/textView2" android:text="纬度" android:layout_width="wrap_content" android:layout_weight="1" android:layout_height="wrap_content"></TextView><EditText android:text="" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_weight="1" android:id="@+id/w_et"android:numeric="integer"/>/>
</LinearLayout>

Android Map开发(MrMap源代码)相关推荐

  1. Android Map 开发之高德地图

    android Map 开发之google Map 可参考文档    链接 本文总结的是Android Map 开发之高德地图,以下是详细代码及注释: 如何把 API 添加到我的Android 工程中 ...

  2. Android面试题精选——再聊Android-Handler机制-2,android物联网开发李天祥源代码

    mCallback = callback; mAsynchronous = async; } 在Handler的构造方法中,首先通过Looper.myLooper()方法获取当前线程的Looper对象 ...

  3. Android开发开源源代码

    Android经典的开源项目其实非常多,把自己熟悉的一些开源项目整理起来,希望能对Android开发同学们有所帮助 项目篇: 1.Apollo音乐播放器 就一个很好的播放器,但是实现的特别好!!! 地 ...

  4. Android Google Map 开发指南(一)解决官方demo显示空白只展示google logo问题

    这两天一直在做google map接入前的准备工作 特此在这里将自己在加载官方demo时出现的问题以及详细的接入步骤进行记录,已免后者踩坑 注:项目实际运行时不要使用虚拟机 因为电脑ip和虚拟机ip不 ...

  5. 《Android/OPhone 开发完全讲义》已出版,现提供源代码下载

    <Android/OPhone 开发完全讲义>已出版. 购买: 互动网(China-pub) 样章下载 现将本书源代码完全公开   Android-OPhone-src.zip 目录 前言 ...

  6. Android特色开发(3):Google Map

    Google Map(Google地图) 参考书籍:<Android应用开发揭秘>第9章 Google Map概述 Google Map是 Google 公司提供的电子地图服务,包括局部详 ...

  7. Android Google Map开发指南(三)百度地图、谷歌地图自如切换

    如果你是刚开始接触谷歌地图的话,推荐你先看一下文章: Android Google Map 开发指南(一)解决官方demo显示空白只展示google logo问题 Android Google Map ...

  8. Android Studio系列(二)使用Android Studio开发/调试整个android系统源代码(不定时更新)

    本文是以源码中development/tools/idegen/README作为指导文档,给出了使用Android Studio导入Android源码的方法步骤. 环境: Ubuntu 12.04,o ...

  9. Android菜鸟如何学习Android系统开发?

    如何做好Android学习前的准备? 如果你已经确定了学习Android的目标,那么,应该提前做好哪些工作.先打下哪些基础呢? 首先,你最好先熟悉一门编程语言,现在大学里面和计算机相关的专业甚至理工类 ...

最新文章

  1. ubuntu修改主机名后无法解析主机
  2. Struts2 关于返回type=chain的用法.
  3. 关于libnmap 的一些应用
  4. 漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)
  5. 解决IE下textarea不识别maxlength属性的问题
  6. 适合STM32的三大嵌入式操作系统
  7. 4键电子手表说明书_数字S1系统7寸门口主机操作说明书
  8. 无法从“cstring”转换为“lpcstr”_U盘重装系统后,无法使用?
  9. 再见2G网络!中国联通开始全面退网
  10. 05-04 docker 搭建 Selenium Hub
  11. Kotlin中正则表达式分析
  12. php td背景颜色改变,JavaScript实现点击单元格改变背景色的方法
  13. 软件质量应该如何保证?针对不同情况,项目各部门人员应如何保证软件质量?
  14. Android6.0之AMS如何启动app中篇之Task的管理
  15. vue组件中使用预览ofd文件、上传预览ofd文件、下载ofd文件
  16. 【python爬虫】《中华诗词大会》诗词接龙代码实现
  17. 【MQTT基础篇(五)】发布、订阅和取消订阅
  18. 欧拉角中各种角度的名称
  19. 破解网络尖兵(真正对付限制ADSL路由共享的方法)
  20. SlickEdit 之windows 版本安装

热门文章

  1. “网络小偷”猖獗横行 探秘信息数据黑产链
  2. 360分拆计划生变,临时剥离四大业务
  3. 国务院:光伏发电指标开始向东北倾斜
  4. 敏捷结果30天练习即将开始
  5. mac terminal ssh client shuttle 免输密码
  6. LINUX系统一一CentOS6.5之固化Ip
  7. 删除MySql表中的大量记录后,文件不变小的解决方法
  8. 详解 ML2 Core Plugin(II) - 每天5分钟玩转 OpenStack(72)
  9. MySQL 5.5 日志管理
  10. 解决载入自定义视图时出现InflateException #8:Error inflating的错误