name="“android.permission.ACCESS_COARSE_LOCATION”"permission>
2、提供位置服务,首先需要获得LocationManager对象获取LocationManager可以通过调用android.app.Activity.getSystemService()函数实现
android.app.Activity.getSystemService()
函数代码如下
mlocationManager=(LocationManager)
context.getSystemService(Context.LOCATION_SERVICE);
3、设置Criteria对象:
Criteriacriteria=newCriteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);
4、设置Provider:
Stringprovider=locationManager.getBestProvider(criteria,true);
Locationlocation=locationManager.getLastKnownLocation(provider);
此图为谷歌卫星定位视图,我们可以感受到它的强大与深不可测。
b、WebView的定义及设置:
1.在XML布局文件中定义WebView控件;然后在程序中装载这个控件,设置属性;最后通过loadUrl方法实现网页的载入。
设置可以访问文件
webSettings.setAllowFileAccess(true);
设置支持缩放
如果需要设置地图显示的地点以及放大倍数等,就需要使用MapController来控制地图。
可以通过如下代码获得MapController对象:
MapControllermapController;
mapController=mapView.getController();
(TextView)layout.findViewById(R.id.showmapZoom);
showZoomlevel.setText("缩放级别”
+String.valueOf(sgMapView.getZoomLevel()));
c.增加经度纬度的设定
要定位地点,需要构造一个GeoPoint来表示地点的经纬度,然后使用animateTo方法将地图定位到指定的GeoPoint上,代码如下:
GeoPointgeoPoint01;
geoPoint01=newGeoPoint((int)(editText01double*1000000),(int)(editText02double*1000000));
mapController.animateTo(geoPoint01);
定义一个类,保存经纬度信息,经纬度按照用户输入地址解析而得到。
其函数代码如下:
publicvoidonProviderDisabled(Stringprovider){
Toast.makeText(GMap.this,R.string.nogps_alert,
Toast.LENGTH_LONG).show();
}
publicvoidonProviderEnabled(Stringprovider){}
publicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras){}
};
通过调用Location中的getLatitude()和getLonggitude()方法可以分别获取位置信息中的纬度和经度,示例代码如下:
doublegeoLatitude=location.getLatitude()*1E6;
doublegeoLongitude=location.getLongitude()*1E6;
d:
代码将产生位置改变事件的条件设定为时间间隔为3秒
实现locationListener的代码如下
LocationListenerlocationListener=newLocationListener(){
publicvoidonLocationChanged(Locationlocation){
}
publicvoidonProviderDisabled(Stringprovider){
}
publicvoidonProviderEnabled(Stringprovider){
}publicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras){
}};
e.修改main.xml
需要在main.xml里创建一个来自com.google.android.maps.MapView的MapView标签。
其中clickable属性设置了是否允许用户和地图的交互,apiKey里填写的就是刚刚申请到的apiKey:
android:
id="@+id/mapView"
android:
layout_width="fill_parent"
android:
layout_height="wrap_content"
android:
clickable="true"
android:
apiKey="0avAw-1ozxNMipBtFVOv-v9zzbSNrxLcMqhp_DA"
/>
f.创建工程
在Eclipse环境下,选择FileNewProjectAndroid,选择AndroidProject。
创建方法同普通Java项目和其他Android项目并无明显区别,但必须在BuildTarget中勾选GoogleAPI。
g.修改AndroidManifest.xml文件
因为地图应用使用的是GoogleMaps的类库,而不是Android的标准类库,所以需要在AndroidManifest.xml文件的标签中声明:
name="com.google.android.maps"/>
由于需要从网络获取地图数据,所以需要访问网络的权限:
name="android.permission.INTERNET"/>
h.增加标记
为了给地图多增加一些自定义的功能,比如可以在地图上进行一些标注。
为了实现这样的功能,我们可以继承Overlay这个类,这个类是一个基类,提供了可以在地图上添加图层的基本功能。
在定位的目标地点引入一张图片做标记,代码如下:
canvas.drawBitmap(bmp,myScreenCoords.x,myScreenCoords.y,paint);
在定位的目标地点添加文字做标记,代码如下:
canvas.drawText("定位目标",myScreenCoords.x,myScreenCoords.y,paint);
I:
代码修改
HelloWorld,MapIIIActivity!
MapIII
请填入纬度
请填入经度
定位
地址:
下沙文泽路
查找
退出
地图切换:
卫星图
交通图
J:
同时设置更新频率也是极其重要的一点:
menu.add(1,mUpdateSetting,Menu.NONE,"设置更新频率")
.setIcon(R.drawable.sett);
此图为设置更新频率视图,菜单“设置更新频率”在Gmap.Java的对应代码见后。
五:
SQL实战
1.select*frommytablewhere(_id=3);
可以直接修改id=n,n取你想要取的数,还可以修改*为选择你需要的列数比如名字一列,组合成一个列表。
之前有学过数据库,对其中的知识也算了解的比较清楚。
insertintomytablevalues(null,'StevenKing','555-1212');
insertintomytablevalues(null,'JohnSmith','555-2345');
insertintomytablevalues(null,'FredSmitheizen','555-4321');
insertintomytablevalues(null,'ZhangPing','555-4312');
这个插入也可以多插入几行数据,这都是随你自己需要而定的。
对于怎么创建数据表,插入选取我就不一一列举出多种改变了。
对于之后的Eventv1.Eventv2以及之后的有关数据库的学习我想在以后的学习中在慢慢深究吧。
六:
学习心得与体会
通过这次自我的一次尝试,让我大体上理清了我们所学习的这几张知识,虽然还是有很多代码看不懂,也看不明白,但是大致上可以了解Android智能手机的发展走向,它一步步的思考,怎样在一个活动中嵌入另外一个活动都是思考着真正的智慧所在。
对于这几章的学习比较,多媒体是把安静的游戏等创造一个更真实的环境让它更加生动;谷歌地图算是互联网上的一个开拓吧,从不同的方面着手,却可以得到同样的却又不太一样的效果,不论是从卫星上还是从交通图上的一个视图都是富于变换的;对于数据库的话,我之前学习的只要是数据的存储以及选取,并没能真正将数据与程序的进程联系起来,所以对于这一章还有待于我去好好将单纯的数据库与程序设计相结合。
我知道还有几个可以更改的地方,比如数据库方面的修改,我可以利用以前的知识进行更深入的研究,还有对于谷歌地图也可以在定位上进一步修改,我知道此次程序设计的学习还没有从根本上解决一些问题,知识也只是点到为止的感觉,我希望在以后的学习中能够更加专研去深究一些问题,哪怕只是一点点的进步,我相信也是好的。
代码一:
设置更新频率
privatevoidupdateSetDialog(){
AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
builder.setTitle("设置更新频率");
LayoutInflaterinflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
Viewlayout=inflater.inflate(R.layout.updatesetting,null);
finalEditTextminTimeIn=(EditText)layout.findViewById(R.id.min_time);
finalEditTextminDistanceIn=(EditText)layout.findViewById(R.id.min_distance);
minTimeIn.setText(String.valueOf(updatesp.getInt("mintime",60000)));
minDistanceIn.setText(String.valueOf(updatesp.getInt("mindistance",0)));
builder.setView(layout);
builder.setPositiveButton("保存",newOnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
if(minDistanceIn.getText().toString().trim().length()>0&&
minTimeIn.getText().toString().trim().length()>0){
(updatesp.edit()).putInt("mindistance",Integer.valueOf(minDistanceIn.getText().toString().trim())).commit();
(updatesp.edit()).putInt("mintime",
Integer.valueOf(minTimeIn.getText().toString().trim())).commit();
mlocationManager.removeUpdates(mLocationListener);
setGPSUpdate();
Toast.makeText(GMap.this,"设置成功!
",
Toast.LENGTH_LONG).show();
}else
Toast.makeText(GMap.this,"最小时间或者最小距离不能为空!
",
Toast.LENGTH_LONG).show();
}
});
builder.setNegativeButton("取消",newOnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
dialog.dismiss();
}
});
builder.show();