是从andr0id电子市场中获取游戏url失败的游戏。

为了安全起见,你的手机已设置为禁止安装不是从Android的电子市场中获取的应用程序_百度知道
为了安全起见,你的手机已设置为禁止安装不是从Android的电子市场中获取的应用程序
手机没未知源项
提问者采纳
未知源勾选
提问者评价
其他类似问题
android的相关知识
按默认排序
其他1条回答
您,进入设置-通用-应用程序-未知源-启.
应用程序里面没有“未知程序”这一项
您好,您可以将手机恢复出厂设置试试。您进入设置-通用-恢复出厂设置-还原所有设置就可以了,还原所有设置不会丢失手机中的数据的。如果还是不可以,建议您带上手机到售后服务中心进行检测处理。您好售后服务中心地址在设置-通用-售后服务菜单中查询到。也可以到步步高官方网站查询售后服务中心地址:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁你的位置:
&& 详细内容
Android手机平台下开发旅游景点位置查询应用程序
热度2票&&浏览88次
时间:日 14:09
Android 台下开发旅游景点位置查询
吴亚峰 索依娜
摘 要:详细介绍在Android智~gq-K4 台下,用Java开发基于GoogleMap地图服务的旅游景点位
置查询应用。通过实际案例,介绍了如何使用Java在Android平台下,进行GoogleMap地图应用的
开发. 同时也介绍了一些控件的使用技巧及Android平台下应用开发技巧。
关键词:Ajax;GoogleMap:Flickr;MushUp
1 背景知识
随着Google及其OHA (Open Handset Alliance— — 开放手
机联盟)其他成员的大力推进,Android平台的智能手机市场
占有率与日俱增。
由于Android的发起者是Google, 因此Android平台对
Google很多互联网服务的支持也优于很多其他手机平台,这当
然也包括非常著名的Google地图服务。
Android中为Google地图应用的开发提供了很多方便的辅助
类,如MapAetivity、MapView等。通过这些类可以非常方便地开
发出丰富多彩的地图应用程序,如位置查询、行车路线查询等。
2 案例功能
将结合旅游景点位置查询应用的开发来介绍Android平台
下Google地图应用开发所需要用到的各种知识与技术。在正
式介绍开发之前,首先对本Android应用的功能、界面进行简
单的介绍。
2.1 主界面
童 一 霜囝 堡
圜I故誊 蕊量筵
@ 10.~e T。gg
警 篓枣蹩誊 审 _
; 。唑 ng 京
_ 璇;§ § j
图1 主界面
本应用主要包含一个主界面,其中分成两个区域,每个区
域有不同的功能,如图l所示。
(1)上面的操纵区域中从左至右依次为景点名称输入文本
框、景点位置查询按钮 、历史记录查询按钮 、地图模式选
择按钮函。
(2)下面的地图显示区域用来以气球霉来标识要查询的景
2.2 主要功能
(1)用户可以在文本框中输入要查询的景点名称,如“故
宫”.然后按下景点位置查询按钮 ,则应用程序会从网络上
查询到景点的经纬度并在地图上用气球标识出来。
(2)用户可以通过点击气球来打开信息窗口,信息窗口中
会显示气球对应景点的经纬度信息。再次点击气球,就可以关
闭信息窗口。
图2 查询历史选择界面 图3 地图模式选择界面
(3)点击历史记录查询按钮 , 系统会弹出历史记录选择
对话框,如图2所示。用户可以在对话框中选择查询过的景
点,不用再次输入了。
(4)点击地图模式选择按钮图,系统会弹出地图模式选
择对话框。用户可以根据需要选择普通地图模式或卫星照片
模式.通过卫星照片模式可以看到更为真实的情况,如图3
⋯ ⋯ GRAPHICS AND IMAGE PROCESSING⋯⋯⋯⋯⋯⋯ ⋯ ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ ⋯⋯⋯⋯ ⋯⋯⋯⋯
3 应用界面的搭建
开发应用的各项业务功能之前,首先要进行界面的搭建。
在Android平台下搭建界面一般都是使用XML文档. 这样更
方便,效率更高。
编写界面XML文档前,首先需要将界面中要使用的一些
文字、颜色资源对应的XML文档组织好。本应用中主要用到
了两个资源XML文档:strings.xm]、colors.xml。
(1)strings.xml文档的内容
&?xml version= 1.0 encoding= utf一8“7&
&resoUrces&
&string name= app_ name’。&TourGuide&/string&
&string name=”list“&景点历史记录&/string&
&string name= mode”&地图模式&/string&
&/resOurces&
从上述代码中可以看出界面中的一些文字内容都在此xml
文档中组织好了。
(2)colors.xml文档的内容
&?xml version= 1.0”encoding= utf-8“7&
& resoIurces&
&color name=“red“&新d8d8d&/cotor&
&color name=“green &撑8OO5O5O5&/color&
&color name=‘‘blue。 &#8d9dfd&/color&
&color name=‘‘white’。&#FFFFFF&/color&
&color name=“black &#000000&:/color&
&/resOurces&
上述代码中把应用中要用到的一些颜色数值都组织好了,
这样在使用时就很方便了。
完成了strings.xml与colors.xml文档后.就可以正式开始
开发主界面对应的xml文档main.xml了,其代码如下:
&?xml version= 1.0“encoding=“utf一8“7&
&LinearLavout xmlns:android=”http://schemas.android.com/
apk/res/android ‘
andrOld:OrientatiOn=“vertica
android:layou idth= fil—l parent
andrOid:IavOut height= fill parent
&&!一一主界面的总LinearLayout 一一&
&LinearLa,t out
andrOid:0rientation=“horizontal”
android:layout_ width= 俐一parent“
android:layout— height= wrap_ content”
&&!一一操控区域的LinearLayout一一&
&lmageView
android:id=“@+id/ImageViewO1.I
android:layout width=‘,wrap content
androi ayout_ height= wrap— content“
android:src=”@drawable4dmc“
andrO d:padd ngTOp= 4dip“
andr0id:paddingRlght= 3dip
&&!一一“景点名称”标题图片一一&
&/ImageView&
android:text=“故宫“
android:id=“@+id/EditText01”
android:layout_ width=“1 50dip
andrOid:textSize=”1 6dip“
android:scrollHo r izontally=。。true
android:singleLine=”true
andr0id:paddlngRight=“4diP”
android:layout
height=”wrap
content“&
&/EditText& &!一一景点名称输入文本框一一&
&lmageButton
android:id= @+id/ImageButton01
android:src=”@drawable/go。。
android:layout
width= 45dip’
andrOid:Javout height= 45dip”&
&/ImageButton&&!一一景点位置查询按钮一一&
&lmageButton
android:id=“@ d/ImageButton02
android:srcE'@drawable/history
android:layout_ width=”45dip
andro d:ayout_ height= 45dip。。&
&/ImageButton&&!一历史记录查询按钮一一&
&ImageButton
android:id= @ d/ImageButtOnO3
android:src=!'@drawable/mode 。
androjd:layout_width=“45dip”
andfOld:IavOut height=“45dip &
&/ImageButton&&!一地图模式选择按钮一一&
&/LinearLayout&
&com.google.android.maps.MapView
android:id= @+id/myMapView”
android:layout,width="fill—parent”
android:layout_
height=”400px
andrOid:c ckable=”true"
android:apiKey = “OhLdP9fwX —FpZKIIRFjumCcKHelH4g7mHNvrFcg”,&&!
一一地图显示用的MaIpView 一-&
&/LinearLayout&
上述XML代码使用LinearLayout嵌套进行了整体界面的布
局,使用了图片(hnageView)、文本框(EditText)、图片按钮
(ImageButton)、地图View (MapView)等控件。
要特别交代的是, 使用MapView时.需要首先去Google
的网站上申请一个key,将申请的key拷贝到MapView的an—
droid:apiKey属性中,如上述代码最后几行所示。
从上述开发过程中读者可能会发现.在Android平台下开
发应用程序很多地用到了XML文档,这是因为XML是描述性
的, 易于开发,易于维护。将程序中一些基本固定的内容用
⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
实用第一 智慧密集
⋯ ⋯ ! !
XML文档来完成也是Android应用开发的一大特色,这与传统
的JavaME开发手机应用有很大的不同。
界面搭建完成后,还需要将应用中需要用到的一些图片准
备好,如图4所示。
从前面的开发中读者可以感觉到,一个Android应用程序
需要很多的资源,这些资源的组织是有规定的,本应用中用到
的资源组织结构如图5所示。
l 鬟i i 鬟 黧
i e T 筮 銎
Ic。n p越,h《pM
T~arCcaiae
融 ■卵m Ⅻ脚”l jm
瓣 Tom~$eaid*~:tivity。J ‘
黼≤渗 转 e 破 J§ 娃$ 3
攒 6。e t J~l'ls[~ droid 2 I】
露≤》 ¨·缱 h如i
巍 i》打Ⅻm l如i
誉珏担 ·酲g 如i
。 癌b.1l p瓤‘
: 麓 d婚9 P
his~.ory p
黪J函c 弛g
: mode prig
≤ ltlnaat
簿穗 v~lues
一 strip s met
Androi~ i~est m l
&le~t~It.properties
图4 应用中用到的图片图5 资源文件组织结构
从图5中可以看出.图片资源都在res目录下的drawable—
mdpi目录中, 主界面布局文件main.xml位于res目录下的lay—
out目录中,颜色、文本资源XML文件位于res目录下的val—
ues目录中.Java源代码位于src目录下。
4 自定义气球Overlay的开发
由于Android的API中并没有直接提供气球、信息窗口等
地图二次开发中必备控件的实现, 因此在正式开发业务功能
前,首先要开发带信息窗口的气球实现类,其代码框架如下:
package wyf.wpf;
import com.google.android,maps.Overlay;
∥此处省略了一些不重要的import语句
import android.graphics. :
class MyBa[IonOverlay extends Overlay{
∥常量的声明
final static int picWidth=20;//气球图的宽度
final static int picHeight=34;//气球图的高度
final static int arcR=8;/gR息窗口的圆角半径
∥成员变量的声明
//表示当前选中的气球
static Mv8affonOve rIav currentBaffOn=nu『I:
7 20 11.瞄01与鑫
String msg; //k~气球对应的文字信息
String jdmc //此气球对应的景点名称
∥是否显示文字信息窗口的标志位,true显示文字信息窗口
boolean showW indow=false;
GeoPoint gp;//~气球对应的经纬度
public MyBa}IonOvertay fGeoPoint gP,String msg,String
{//构造器
this:gp=gp; this.msg=msg; this.idmc=jdmc;
@Override//重写点击事件处理方法
public boolean onTouchEvent(MotionEvent event
MapVjew my) 此处未来开发屏幕触控事件处理代码)
@Override//~制自定义Overlay的方法
Public Void draw(Canvas canvas,MapView mapView,
boolean shadow) 未来开发代码}
∥将经纬度翻译成屏幕上XY坐标的方法
public Point getPoint(MapView mapView){//未来开发代码}
∥绘制信息窗口的方法
public void drawWindow(Canvas canvas,Point P,
int winWidth){//未来开发代码}
上述代码给出了自定义气球Overlay类MyBallonOverlay的
代码框架。还留了很多功能丰富要后面逐步实现。
从上述代码框架中可以看出自定义的Overlay需要继承系
统提供的COrn.google.android.maps.0verlay类, 其实Overlay就
是可以进行自定义绘制的覆盖在地图上面的一个层。
Android下Google地图应用的开发中,经常需要通过开发
自定义的Overlay来往地图上添加自己应用需要的东西, 如:
气球、信息窗口、导航指示箭头等等。
下面就逐步实现各个功能,首先实现onTouchEvent,其代
public boolean onTouchEvent(MotionEvent event MapView
if(currentBallon!=null&¤tBallo =this)
{//若当前气球不为空且不是自己,什么都不做
return false;}
∥若在气球上按下则设置当前气球为自己,
//且当前状态为在气球上
if(event.getAction0= Motio Event.ACTION_ DOW N){
int x=(int)event.getX()_,/获取点击的X坐标
int y=(int)event。getY0;//~取点击的Y坐标
,,将此气球的经纬度翻译成屏幕上的xy坐标
Point p=getPoint(mv):
int xb=0.x-picWidth/2;,/计算气球左上侧点的X坐标
int yb=p.y-picHeigl1t //计算气球左上侧点的y坐标
if(x&=xb&&x&xb+picW idth&&y&=yb&&y&yb+picHeight)
若在自己这个气球上按下则设置自己为当前气球
currentBallon=this;
return true;}}
⋯ ⋯ GRitIPHICS AND瑚^GE PROCESSING⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
多动事件返回当前气球状态若当前在气球上则 )
/,返回true屏蔽其他移动事件 上述dra 方法完成的工作是在指定的位置绘制气球图片
else f(event-getAction0==M0t onEvent·ACTION— MOVE) 并根据气球的信息窗口显示标志值为tr
ue还是为false决定是
return currentBallon!:nu ) 否调用drawWind。w方法来绘制此气球对应的信息窗口。
else if(event.getAction0: MotionEvent。ACTION UP){ 完成了draw方法的开发后就应该开发绘制信息窗口的
_nt x=(int)event。getX0;//获取点击的X坐标drawWindow方法了,其代码如下:
im y=(int)event.getY();f~取点击的Y坐标public void drawWindow (Canvas canvas Point P,int win一
∥将此气球的经纬度翻译成屏幕上的xv坐标 Width){
Point p=getPoint(mv); int charSize=1 5://字体宽度像素值
int xb=p.x'picW idth/2;//计算气球左上侧点的X坐标 _nt textSize=16;//Android字体大小
int yb=p.y-picHeight;∥计算气球左上侧点的Y坐标 int leftRightPadding=2 ∥信息窗口每行左右侧留白
//若当前气球为自己且在当前气球上抬起触控则一 //将此气球的信息字符串根据信息窗口宽度自动分行
∥显示当前气球内容 int lineW idth=winWidth-leftRightPadding 2:∥每行的宽度
if(currentBaIlon==this&&x&=xb&&×&×b+picWidth int lineCharCount=lineWidth/(charSize);//@行字符数
&&y&=yb&&y&yb+picHeight){ //$B录所有行的ArrayList
currentBalIon=n uIl://显示完内容后清空当前气球引用 ArrayList《St g&alRows=new ArrayList&String&();
showWindow=!showWindow;f置反信息窗El显示标志 String currentRow= ;//当前行的字符串
List&Overlay&overlays mv.getOverlays0; for(int i=0;i&msg.1ength0; +){
overlays.remove(this);//~lj除此气球再添加 char c=msg.charAt(i);//).~.信息字符串中取出一个字符
overlays.add(this);//~i:气球就位于最上面了 if(c!=、n’ 若当前字符不为换行符则加入到当前行中
for(Overlay ol:overlays) currentRow=currentRow+c;
清除其他气球的showWindow标记 )else 若当前字符为换行符则检查当前行长度,若当前行
if(ol instanceof MvBallonOverlav)( ∥长度大于零则将当前行加入记录所有行的ArrayList
if(ol!=this){//~u果不是自己这个气球,关闭信息窗口 lf(currentRow.tength0&O){alRows.add(currentRow);}
((MyBallonOveday)o1).showWindow=false; currentRow="":∥清空当前行
return true: if(currentRow.1ength()==tineCharCount)
) {/,若当前行的长度达到一行规定的字符数则将当前行加
//若当前气球为自己但抬起触控不再自己上则 //入记录所有行的ArrayList
∥清空气球状态并返回true alRows:add(cu~rentRow);
else if(currentBallon==this){ currentRow=”“_//清空当前行
currentBallon=null; ))
return true;}】 if(CurrentRow.1ength0&0){//;~ 当前行长度大于零则将当前行
return falseI//若不符合上述任一情况则返回faIse //力口入记录所有行的ArrayList
) aIRows.add(cutrentRow);}
上述代码实现了触控事件的处理逻辑,包括移动地图、点 int jineCount=atRows.size():∥获得总行数
搴 手丁开黄 信息窗哺完 了此方法的开发后就可以 t win计H算eig信h星 囊 (charslZe)+2*arcR:
着手开发绘制气球Overlay的draw方法了,其代码如下: Paint palnt:new Paint()
;]/ 建pajn 对象
public void draw(Canvas canvas MapView mapView, paint
。setAntiAlias(true);//~r开抗锯齿
boolean shadow)i paint
.setTextSlze(teXtSize):臌置文字大小
此气球经纬度翻译成屏幕上的XY坐标供绘制气球//绘制信息窗体圆角矩形
Point p getPoint(mapView); paint.
setARGB(255;255,251,239)://{殳置画笔颜色
//在坐标指定位置绘制气球图片 intx1_p
. × winW _dth/2: ,{十算圆角矩形外接矩形左上侧点
canvas.drawBitmap(TourGuideActivity.bitmap, int y1:p
,y-picHeight—winHeight,1:∥的XY坐标
P.x—picWidth/2,p.y—picHeight,nul1); int x2:xl+wInWldth:∥计算圆角矩形外接矩形右下侧点
tt(showWindow){ _nt y2=yl~winHeight;//的×Y坐标
//女Ⅱ果showWindow为true则显示信息窗口 RectF r:new RectF(xl,
yl x2,y2)_//创建圆角矩形对象
drawWindow(canvas,P,180) 制信息窗口 caSvas drawRoundRect(r,arcR. arcR.paint);//~=~$1j圆角矩形
) 一 ,/绘制信息窗体圆角矩形边框
super.draw(canvas,mapView,shadow);∥调用父类绘制paint. setARGB(255,198,195,198)://{殳置画笔颜色
⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
实用第一 智慧密集
⋯ ⋯ 。 ⋯ ⋯ . ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
paint.setStyle(Paint.Style.STROKE);∥设置绘制线形
paint.setStrokeW idth(2);//设置线的宽度
canvas.drawR0un cfRect(r,arcR,arcR,palnt): 绘制圆角矩形
,/循环绘制每行文字
paint.setStrokeW idth(0):
paint.setARGB(255,10,1O.1O)://{殳置画笔颜色
int lineY=yl+arcR+charSize;#计算第一行的Y坐标
for(String lineStr:aIRows){//~每一行进行循环
{or(int j=0;j&lineStr.1ength0;j++){//对一行中的每个字循环
//从当前行取出一个字符
String coIChar=¨neStr.charAt(j)+ :
canvas.drawText(coIChar,xl+}eftRj9htPaddjng
+j charSize,lineY,paint):∥绘制此字符
lineY=lineY+charSize;//y坐标移向下一行
上述drawWindow方法的功能为根据调用时提供的信息窗
体宽度, 自动将气球对应的文字信息分行,根据行数自动计算
出信息窗口的高度,绘制信息窗口对应的圆角矩形及边框.最
后将每行内容绘制到信息窗口中。
上述很多方法都调用了辅助方法getPoint将气球的经纬度
换算为屏幕上的XY坐标,其代码如下:
public Point getPoint(MapView mapView)
将经纬度翻译成屏幕上的XY坐标
∥获取投影对象
Projection projettion=mapView.getProjection();
Point P=new Po nt();//l~fJ建用于存储XY坐标的point对象
projettion.toPixels(gp,pJ:∥调用toPixels方法进行换算
return p://返回结果
完成了上述所有工作后, 自定义气球Overlay的开发就完
成了它可以在很多应用程序中重用的,并不只是服务于本文的
应用程序,笔者就在很多应用程序中都使用了这个自定义气球
5 业务功能Activity的开发
自定义气球Overlay的开发完成后,就应该着手开发实现
本应用业务功能的Activity了.其代码框架如下:
package wyf.wpf;
impoR java.io。IOException:
//此处省略了一些不重要的impo~语句
import android.widget.AdapterView.OnltemClickListener;
public class T0urGuideAc Vity extends MapActivity{
//常量的声明
finaIint HISTORY— DIALOG=0;//历史对话框的/D
final int MODE— DIALOG=I:/,模式选择对话框的ID
//A 员变量的声明
9 20络1挺1. 01与蛙
static Bitmap bitmap;忾球图片
MapController mc;/地图控制器
String jdmcArray[J;f~点名称数组
Dialog historyDialog;//历史对话框的引用
@Override //activity的创建、初始化方法
public void OnCreate(Bundle savedlnstanceS韬te)
//[1卜一些初始化工作
,,I2】给查询按钮添加监听器
//[31给历史按钮添加监听器
//[4]给模式按钮添加监听器
@Override 话框的创建方法
public Dialog onCreateDialog(int id){ )
@Override//每次弹出对话框时被回调以动态更新对话框内
.”蓉髑方法
public void onPrepareDiaIog“nt id,D}alog dialog){ }
@Override//重写父类的方法
protected boolean isRouteD spIayed0{return faIse;}
从上述代码框架中可以看出,还有很多功能方法有待实
现,首先应该实现onCreate方法。其主要有4项工作需要完
成,首先是一些初始化的代码:
super.onCreate(savedInstanceState)
∥调用父类onCreate方法
setContentView(R.1ayout main);/设置当前view 为main
//幸刀始化气球图片
bitmap=BitmapFactory.decodeResource(this.getResourCes0
R.drawable.balIon):
∥对地图进行初始化
MapView mv=(MapView)findViewByld(R id.myMapView):
mv.setBuiltlnZoomContrOIs(true);//设置地图上要缩放控制条
mc=mv,getControllerO;E~取地图控制器
mc.setZoom(1 4)://设嚣地图缩放比例
GeoPoint gP=new GeoPoint
创建包含地图中心点经纬度的GeoPoint对象
(int)(39.), 纬度
fint)(1 1 6.) 经度
mc.animateTo(gp);//设置地图中心点经纬度
接着需要做的工作是为查询按钮添加监听器.此监听器的
功能为根据用户输入的景点名称通过网络查询景点的经纬度信
息,得到经纬度信息后创建携带经纬度文本信息的气球,并将
气球添加到地图上的指定位置,具体代码如下:
ImageButton ib=∥获取查询按钮
(1mageButton)t}1is.f ndV ewBy d(R.id.ImageButton01):
ib.setOnClickLlstener(new OnCiickListenerO{
@Override //重写onCIick方法
public void onClick(Vjew v)(
∥获取输入的景点名称
⋯ ⋯ G眦PHICS^ND珊AGE PROCESSING⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯
EditText et=(EditText)findViewByld(R。id.EditText01);
String jdmcStr=et。getText0:toString0:
Geocoder gc=//通过Geocoder查找指定名称景点的经纬度
new Geocoder(TourGuideActivity.this,Locale.getDefault0)
try 通过Geocoder查找指定名称景点的经纬度列表
List&Address&addressList=∥获取景点经纬度列表
gc.getFromLocationName(jdmcStr 1):
if(addressList.size()&Ol{
∥如果成功获取了经纬度取列表中的第一条记录
Address tempa=addressList.get(O):
.nt latE6=(int)(tempa。getLatitude0 1000000); 取纬度
int IongE6=(int)(tempa.getLongitude0*1 000000);,/获取经度
GeoPoint gp=new GeoPoint(1atE6,IongE6);
String latStr= //纬度字符串
Mathlround(gp.getLatitudeE60/1 000,00)/1 000.0+ :
String IongStr=,/经度字符串
Math.round(gP。getLongitudeE60/1 o00。00)/1 ooo.O+ :
//在地图的对应位置显示气球
MapView mv=(MaIpView)findViewById(R.id.myMapVi}ew):
List&Overlay&overlays=my.getOverlays0;
bootean isExisted=false; MyBallonOverlay curr=nuH
for(Overlay ol:overlays){J/~ 所有的Overlay循环处理
if(o instanceof MyBallonOverlay) Ⅱ果是气球Oveday
MyBaIlonOverlay tempMbo=(MyBalIonOveday)ol;
//关闭已经存在景点的信息提示窗圈
tempMbo.showWindow =false;if (gP.getLa~itudeE6 ()==
tempMbo.gP.getLatitudeE60&&
gP.getLongitudeE60==tempMbo.gP.getLongitudeE60)
景点已经存在
isExisted=true;
//丰丁开要查询景点的信息提示窗口
tempM bo.showW indow=true;
curr=tempMbo;
isExisted){//~13果景点不存在则添加新气球
lit点击位置添加新气球
MyBallonOverlay mbo=new MyBallonOverlay(
gP //气球的坐标 --
jdmcStr+ 的地理坐标为:\n经度: +longStr
+ 纬度:。+latStr,,/气球的信息
jdmcStr 点名称
mbo.showWindow=true;//设置新气球的信息窗圈打开
overlays.add(mbo);,/将新气球添加到地图上
)e碴e Ⅱ果已经存在气球则将此气球移动到最上层
overlays.remove(curr);overlays.add(curr) )
mc animateTo(gp);//设置地图中央经纬度
)else 若没有查询到景点经纬度贝I报错 _
Toast.makeText(TourGuideActiv V this,,/上下文
。对不起,您要找的景点没有找到! , 艮错信息
ToaSt.LENGTH— SHORT //显示时长
).show0;}}catch(IOException e){e:printStackTrace0;)
从上述代码中可以看出.提供给GeoPoint类构造器的经纬
度都是整数(int型),但实际的经纬度是肯定带小数的,否则
精度就太低了。其实这里的整数并不是说经纬度只是精确到整
数度,而是把经纬度扩大100万倍的整数,实际是精确到小数
onCreate方法的最后两项工作是给历史按钮、模式按钮添
加监听器,其代码如下:
//给历史按钮添加监听器
ib=(ImageBu~on)this.findViewByld(R.id.ImageButton02);
ib.setOnClickListener《 new OnClickListener() {
Public void onCIick(View v) 重写onCI.ck 方法
MapView mv=(MapView)findViewByld( id.myMapView);
Ust&Overlay&overtays=mv.getOverlays();
if(overlays.size()}=O)
若当前有历史记录则显示历史记录对话框
showDialog《HISTORY_DIALOG);
)else 若当前没有历史记录则提示
Toast.makeText(TourGuideActivity.this,//上下文
对不起,目前没有历史记录!”, ∥提示信息
Toast。LENGTH_ SHORT //显示时长
) show0=))))
//给模式按钮添加监听器
ib=(ImageButton)this.findViewBYI d(R._d-ImageButton03);
ib.setOnCIickListe-ner(new OnClickListener0{
@Override //重写onClick方法
public void onC日ick(View v){,/显示地图模式选择对话框
showDialog(MODE_DtALOG):∥显示模式选择对话框
完成了onCreate方法的开发后,就可以开发对话框的创建
方法onCreateDialog了.其代码如下:
@Override //重写对话框创建方法onCreateDialog
public DiaIog onCreateDialOg(int id){
Dialog result=nuII:
switch(id){
case HISTORY— DlALOG://I万史记录对话框的初始化
AIertDiaIOg.Builder b=new AlertDialog.Builder(this):
b.setltems(null,nul1);historyDialog=b.create0;
result=historyDialog;
case MODE_DIALOG://~图模式选择对话框的初始化
AlertDia}og。Builder bl=new AIertDialog.Builder(this);
b1.setlcon(R.drav旧bIe.mode)I//设置图标
bI.setTitte(R.string.mode);//~置标题
一b1.setltems(new String[]r普通模式i,H卫星模式 —
new DiaIoglnterface OnC J cI(Llstener(){
@Override//重写对话框中羡慕被点击的onCtick方法
public void onCIick(D{aIogInterface dialog,lnt which){
目 ‘ } E 目 1 s ⋯ ∞ 自E i 自 &
实用第一 智慧密集
⋯ ! ⋯ ⋯ ⋯
MapView mv=//获取地图View
(MapView)findViewByld(R.id.myMapView);
switch(which){
case 0:腊索引为O则设置为普通地图模式
mv.setStreetView(true);mv,setSatellite(faIse):
case 1:腊索弓I为1则设置为卫星地图模式
mv.setSateIlite(true);mv.setStreetView(false);
break;)))):
result=bI.create《)
return result;//返回创建的对话框
上述方法完成了对话框的创建工作.可以发现在开发地图
模式选择对话框的创建代码时工作做得比较全面.包括标题、
选项、选项监听器在内的对话框的各个方面都完成了。
但对于历史记录对话框,工作却做得比较粗糙。这是因为
历史记录对话框的选项等内容是随着应用的使用不断变化的,
冈此对话框的创建工作不能全部在onCreateDialog方法中完成。
而是需要把实时变化的部分留到onPrepareDialog方法中完成,
其代码如下:
∥重写每次弹出对话框时被回调以动态更新对话框内容的方法
public void 0nPrepareDialog(Int id,Diatog dialog){
∥若不是历史对话框则返回
if(id}=this.HISTORY DIALOG)return:
//获取当前景点名称的列表
MapView mv=(MapView)findViewByld(R.id.myMapView);
List&Overlay&overlays=my.getOvedays0.1
jdmcArray=new string[overiays size()M存放景点名称的数组
int O:,/数组索引
/,从所有景点标识气球中循环获取景点名称
for(Overlay oI:overlays){
if(ot instanceof MyBaIlonOverlay) 若此Overlay为气球
MyBallonOverlay tempMbo=(MyB aIlonOverlay)ol;
jdmcArray[i++]=tempMboljdmc;//从气球中获取景点名称
//对话框对应的总垂直方向LinearLayout
LinearLayout il=new LinearLayout(TourGuideActivity ithis);
II.setO entation(LinearLavout.VERTICAL);//设置朝向
II.setGravity(Gravity.CENTER_HORIZONTA //设置对齐
l1.setBackgroundResource(R.drawabIe.dialogf):∥设置背景图
题行的水平LinearLayout
LinearLayout IIn=new LinearLayout(TourGu deAct Vity.this)
IIn.setOrientation(LinearLayout.HORIZONTAL);∥设胃朝向
tin.setGravity(Gravity.LEFT)://设置对齐方式
Iln.setLayoutParams(new ViewGroup.Lay0utParams《20O
LayoutParams.W RAP
— CONTENT));#~ :长宽尺寸
∥标题行的图标
mageView iv=new ImageView(TourGuideActivity.this)
v.setImageRes0urce(R,drawable history);臌置图标
iv.setLayoutParams(new ViewGroup.LayoutParams(24,24)):
IIn,addView(iv);∥添加到标题行的水平LinearLayout中
//{示题行的文字
TextView tvTitle=new TextView(TourGuideActivity.this);
tvTitte.setText(R.string.Iis //设置标题行的文字内容
tvTitle。setTextSize(20);//~置字体大小
∥设置字体颜色
tvTitle.setTextColor(TourGuideActivity.this.
getResources0.getCoIOr(R.color.white));
}In.addView(tvTkle) //}秦加到标题行中
II.addView{IIn) //j寄标题行添加到总LinearLayout
//为对话框中的历史记录条目创建ListView
ListView Iv=new ListView(this);|i襁始他ListView
臌置列表为单选选择模式
Iv.setChoiceMode(ListView.CHOICE— — MODE— — SINGLE);
//为ListV“ew 准备内容适配器
BaseAdalpter ba=new BaseAdapter0{
@Override //重写返回总共选项个数的方法
public int getCount0{return jdmcArray.1ength;)
public Object getltem(int argO){return n ul1:}
public long getltemld(int argo){return O0
public View getView(int argO,View arg ViewGroup arg2){
//动态生成每条J-77史记录对应的TextV Jew
TextVie w tv=new TextVIew(TourGuideActivity.this);
//设置文本对其方式为水平居中
tv.setGravity(Gravity.CENTER—HORIZONTAL);
tv.setText(jdmcArraylarg0]);//~:置内容
tv.setTextSize(20);//~置字体大小
tv.setTextColor(TourGuideActivity.this.getResources0.
getCoIor(R.color.white));//i~置字体颜色
tv.setPadding(0,0,0.O): 殳置四周留白
Iv,setAdapter(ba):∥为ListView设置内容适配器
臌置选项被单击的监听器
Iv_setOnItemCI-lckListene new OnltemClickListener0{
public voidI onltemClick(AdapterView&?&argO,View argl
int arg2,Iong arg3){//重写选项被单击事件的处理方法
,/获取历史记录中当前选中的TextView
TextView tv=(TextView)argl:
//获取地名输入框
Ed tText et=(EditText)TourGuideActivity.this.
findViewByld(R.id.EditText01】:
//将历史记录中选中条目内容设置到地名输入框
et.setText(tv.getText()
TourGuideActivity.this.historyDialog.cancel《).//关闭对话框
寺历史记录条的ListView 加入总LinearLayout
⋯ ⋯ B胁PHICS^唧l I眦GE PROCESSING⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯一
II.addView(Iv);
//将组织好的对话框布局添加到历史记录选择对话框中
dialog.setContentView(I1)=
从上述代码中可以看出, 列表(ListView)中选项的内容
都是由其适配器(Adapter)提供的,本应用中适配器的实现采
用的是继承BaseAdapter的方式。当ListView需要选项时, 首
先会调用其对应Adapter的getCount方法获取选项的个数.然
后依次调用getView方法获取各个选项对象。本应用程序中,
每个选项都是由TextView实现的。
完成了上述代码的开发后,所有的代码开发工作就都完成了。
6 应用程序的打包发布
由于Android平台下的应用程序一般都是使用Eclipse开发
的, 因此打包与发布的工作非常简单。只要在开发完成后在
Eclipse中运行一下项目,然后就可以在项目文件夹下的bin子
文件夹下找到可以用于安装发布的APK包。如图6所示。
将此APK包安装到基于Android平台的手机中即可运行。
在联网正确的状态下可以成功获取景点经纬度并显示如图1、
* {}—*— *— }—{.} {}—{} —* ~* {+—{-}— *—{H }—{} {} 甜— {
图2、图3所示的界面。
图6 bin子目录下的apk包
通过开发旅游景点位置查询的应用程序,读者可以基本掌
握Android平台下Google地图应用的开发, 了解如何向地图中
添加自定义的内容。
本应用的功能还不够完善,读者可以自行进一步扩展。例
如结合GPs定位,开发出从当前位置到查询的旅游景点自动
路线导航的功能等。
(收稿日期:201O—l0一l7)
(上接第75页)
Ienl=len;
;f(1en%2 1=O)lenl++:
fwrite(&len l 1,4,avifp);
fwrite(bufl 1,lenl,avifp);
indexcount++:
totalframes~+:
movisize=movisize+lenl+8:
newtist=new AVIINDEX;//更新索引链表
newlist一&dwChunkld=l L;
if(xvid enc stats.type==XVID PEJVOP)
newlist一&dwFlags=0xl 0:
newlist-&dwFlags=0x00;
new!ist一&dwOffset=startindex;
newlist一&dwSize=len;
newlist一&next=NULL;
startindex=startindex+lenl+8:
thelist=avi ndexIist:
if(thelist一&next==NULL)break;
thelist=thelist一&next
thelist-&next=newlist;
tickl=tick2
if(recording==0)break;
Sleep(1):
free(buf1)
free(buf2):
xvid— encore (enc_handle,XVtD— ENC.DESTROY,NULL,
NULL).//撤消编码实例
FreeLibrary(hHand!e);
W riteAvilndex0;
UpdateAviHeader0:
fclOse(avifp)
wa~elnReset(wavein.hand!e):
waveInUnprepareHeader(wavein_handle,&waveinhdr,sizeof
(\^fA、,EHDR ‘
GlobalFree,GlobalHandle(waveinhdr.IpData)):
wavelnClose(wavein—handle)://关闭声音输入
delete buf3
return O:
AVI录像机程序开发完成,对AVI多媒体文件的录制,具
有一定的实用价值。
(收稿日期:2010—11一O3)
纂— .奠..鳙翟2
11与0壤1妒

我要回帖

更多关于 淘宝店里的充值中心 的文章

 

随机推荐