Android Map开发(MrMap源代码)
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源代码)相关推荐
- Android Map 开发之高德地图
android Map 开发之google Map 可参考文档 链接 本文总结的是Android Map 开发之高德地图,以下是详细代码及注释: 如何把 API 添加到我的Android 工程中 ...
- Android面试题精选——再聊Android-Handler机制-2,android物联网开发李天祥源代码
mCallback = callback; mAsynchronous = async; } 在Handler的构造方法中,首先通过Looper.myLooper()方法获取当前线程的Looper对象 ...
- Android开发开源源代码
Android经典的开源项目其实非常多,把自己熟悉的一些开源项目整理起来,希望能对Android开发同学们有所帮助 项目篇: 1.Apollo音乐播放器 就一个很好的播放器,但是实现的特别好!!! 地 ...
- Android Google Map 开发指南(一)解决官方demo显示空白只展示google logo问题
这两天一直在做google map接入前的准备工作 特此在这里将自己在加载官方demo时出现的问题以及详细的接入步骤进行记录,已免后者踩坑 注:项目实际运行时不要使用虚拟机 因为电脑ip和虚拟机ip不 ...
- 《Android/OPhone 开发完全讲义》已出版,现提供源代码下载
<Android/OPhone 开发完全讲义>已出版. 购买: 互动网(China-pub) 样章下载 现将本书源代码完全公开 Android-OPhone-src.zip 目录 前言 ...
- Android特色开发(3):Google Map
Google Map(Google地图) 参考书籍:<Android应用开发揭秘>第9章 Google Map概述 Google Map是 Google 公司提供的电子地图服务,包括局部详 ...
- Android Google Map开发指南(三)百度地图、谷歌地图自如切换
如果你是刚开始接触谷歌地图的话,推荐你先看一下文章: Android Google Map 开发指南(一)解决官方demo显示空白只展示google logo问题 Android Google Map ...
- Android Studio系列(二)使用Android Studio开发/调试整个android系统源代码(不定时更新)
本文是以源码中development/tools/idegen/README作为指导文档,给出了使用Android Studio导入Android源码的方法步骤. 环境: Ubuntu 12.04,o ...
- Android菜鸟如何学习Android系统开发?
如何做好Android学习前的准备? 如果你已经确定了学习Android的目标,那么,应该提前做好哪些工作.先打下哪些基础呢? 首先,你最好先熟悉一门编程语言,现在大学里面和计算机相关的专业甚至理工类 ...
最新文章
- ubuntu修改主机名后无法解析主机
- Struts2 关于返回type=chain的用法.
- 关于libnmap 的一些应用
- 漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)
- 解决IE下textarea不识别maxlength属性的问题
- 适合STM32的三大嵌入式操作系统
- 4键电子手表说明书_数字S1系统7寸门口主机操作说明书
- 无法从“cstring”转换为“lpcstr”_U盘重装系统后,无法使用?
- 再见2G网络!中国联通开始全面退网
- 05-04 docker 搭建 Selenium Hub
- Kotlin中正则表达式分析
- php td背景颜色改变,JavaScript实现点击单元格改变背景色的方法
- 软件质量应该如何保证?针对不同情况,项目各部门人员应如何保证软件质量?
- Android6.0之AMS如何启动app中篇之Task的管理
- vue组件中使用预览ofd文件、上传预览ofd文件、下载ofd文件
- 【python爬虫】《中华诗词大会》诗词接龙代码实现
- 【MQTT基础篇(五)】发布、订阅和取消订阅
- 欧拉角中各种角度的名称
- 破解网络尖兵(真正对付限制ADSL路由共享的方法)
- SlickEdit 之windows 版本安装
热门文章
- “网络小偷”猖獗横行 探秘信息数据黑产链
- 360分拆计划生变,临时剥离四大业务
- 国务院:光伏发电指标开始向东北倾斜
- 敏捷结果30天练习即将开始
- mac terminal ssh client shuttle 免输密码
- LINUX系统一一CentOS6.5之固化Ip
- 删除MySql表中的大量记录后,文件不变小的解决方法
- 详解 ML2 Core Plugin(II) - 每天5分钟玩转 OpenStack(72)
- MySQL 5.5 日志管理
- 解决载入自定义视图时出现InflateException #8:Error inflating的错误