智能手机程序设计之修改篇11101078 张萍学习智能手机程序设计已经算是有一段时间了,我想把我这段时间研究的一些“成果”一一介绍给大家了解一下,也算是探索之余的一次小小尝试和进步吧,同时也把我遇到的问题拿出来和大家一起探讨一下,下面是我自己学习的一些心得:一:多媒体学习1. Audio对于多媒体中声音的界面控制,我是把代码中的按钮位置和数字1-9采用a-i字母修改了一下,如图可以看到,我把显示界面的位置调到了中间,是把代码10dip修改为从而调整了按钮所在的中间位置,同时可以增加你任意想要增加的按钮的个数和每个按钮的声音,比如加上jkl等按钮的声音,这其中声音的加入你就要增加相应文件的个数来达到每个按钮按下去都会有不同的声音,变化图形如下图:Video文件的学习中,我一直无法将samplevideo.3gp文件在程序运行时打开,运行起来会出现错误,不能在虚拟器中打开。
2. Sudoku3为数独游戏配上音乐1. 首先创建一个选择音乐的界面musicchoice,然后点击按钮可以选择不同的音乐类型,即点击后弹出一个对话框,就如那个难度系数的对话框一样。
<string name="music_title">kinds</string> 可以在游戏开始的时候也来个音乐方<string name="light_label">light</string> 面的选择,比如你喜欢摇滚或者轻音乐再<string name="heavy_label">heavy</string> 或者稍微重一点的音乐来提高整体游戏的<string name="rock_label">rock</string> 愉悦程度,不过要建立像之前选择游戏难度一样的对话框,这就要一步步的添加导入一些需要的包了。
2. mp.start();mp.setLooping(true);我想要的是直接开始音乐,再对音乐进行循环播放,我觉得这样也应该可以,但是书本上是直接循环然后再播放音乐。
二.存储本地数据Sudoku41.for (int i = 0; i < 9; i++) 对于这个循环的话,大家都看得懂,但是我想说的 { cin>>a[i]; 这个是对上面我修改的字母进行的说明,如果输入字母就if (i % 3 != 0) 要稍微修改一下。
continue;}2.private static final string selx=’selx’;private static final string sely=’sely’;private static final string view_state=’viewstate’;private static final int ID=42将这段程序修改为如下图:在这里,我也想要把 int ID=42的数字修改为20,也就是将光标的位置初始值设定为20,这也是一个小小的修改吧。
三:互联的世界1. 左图是对书上的代码进行修改,代码为android:layout_width=”wrap_content”android:layout_height=”wrap_content”android:layout_weight=”1.0”android:lines=”1”旨在修改显示的界面,显示的行数,以及占屏幕的比例。
2.我是直接在strings.xml中直接修改go为Enter,这个比较简单。
3.private void openBrowser() {Uri uri = Uri.parse(urlText.getText().toString());Intent intent = new Intent(Intent.ACTION_VIEW, uri);startActivity(intent);} 直接将startActivity(intent)修改为startActivity(view),将intent类改为嵌入式View类,主要是在一个活动中打开另外一个活动。
其实在很多时候都要嵌入式类来达到在一个活动中打开另一个界面的目的,这是一个大的突破和创新运用。
四.定位与环境感知1.谷歌地图Mymap当你在一米范围内时不进行刷新,也就是当你拿着手机进行定位时它显示的位置在一米范围内不会变化,而当你走出这一范围后,程序会自动刷新,显示你当前所在的位置。
地图界面上可以直接通过X.Y坐标轴在地图上实现直接定位到某一点,并可以显示两点之间的直线距离,可以输入两点之间的经纬度,计算两点之间的实际距离,同时可以看到在图上点击卫星,可以实现交通图和卫星图的相互转换,这是谷歌地图的一大亮点与让人佩服的地方。
通过地名定位的设计思路本功能的实现目标是:在一个EditText里输入一个地名,点击Button,在MapView里便会显示出该地。
实际上,由于在Google Map中必须获得经纬度才能定位,故本定位方法不过是前一种定位方法的加强版,即先通过地名获得该地的经纬度,再通过经纬度进行定位。
由此可知,本设计的核心内容,便是如何通过地名获得该地的经纬度。
本来此问题应该很好解决,因为Google提供了一个用于实现该功能的Geocoder类,只要使用该类生成一个对象,并使用getFromLocationName()方法,只需几句代码便可轻松将地名转换为相应的经纬度,由于手中的android开发教材和网络上能够搜索到的绝大部分资料中使用的都是该方法,如下:Geocoder geocoder=new Geocoder(this);List<Address> list=geoCoder.getFromLocationName(Address,1);//Address是输入的地址信息if(!lstAddress.isEmpty()){Address address=list.get(0);double latitude=address.getLatitude()*1E6;double longitude=adress.getLongitude()*1E6;GeoPoint geopoint=new GeoPoint((int)latitude,(int)longitude); }但在实际的开发过程中发现,在调试程序时,点击Button后,程序没有任何响应。
经反复调查研究后得知,由于google map中的Getcoder反转经纬度一直存在BUG,在前一段时间google终止了这项服务,故Geocoder返回List为null,得不到地址信息。
但是可以采用下面的步骤一步步完成定位与更新:a.获取用户当前位置的步骤如下:1、在AndroidManifeST.xml 中声明相应的权限:< android: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 对象:Criteria criteria = newCriteria();criteria.setAccuracy(Criteria.ACCURACY_FINE);criteria.setAltitudeRequired(false);criteria.setBearingRequired(false);criteria.setCostAllowed(false);criteria.setPowerRequirement(Criteria.POWER_LOW);4、设置Provider:String provider = locationManager.getBestProvider(criteria,true);Location location=locationManager.getLastKnownLocation(provider);此图为谷歌卫星定位视图,我们可以感受到它的强大与深不可测。
b、WebView 的定义及设置:1.在XML 布局文件中定义WebView控件;然后在程序中装载这个控件,设置属性;最后通过loadUrl 方法实现网页的载入。
设置可以访问文件webSettings.setAllowFileAccess(true);设置支持缩放如果需要设置地图显示的地点以及放大倍数等,就需要使用MapController来控制地图。
可以通过如下代码获得MapController对象:MapController mapController;mapController = mapView.getController();(TextView)layout.findViewById(R.id.showmapZoom);showZoomlevel.setText("缩放级别”+String.valueOf(sgMapView.getZoomLevel()));c.增加经度纬度的设定要定位地点,需要构造一个GeoPoint来表示地点的经纬度,然后使用animateTo 方法将地图定位到指定的GeoPoint上,代码如下:GeoPoint geoPoint01;geoPoint01= new GeoPoint((int) (editText01double * 1000000), (int) (editText02double * 1000000));mapController.animateTo(geoPoint01);定义一个类,保存经纬度信息,经纬度按照用户输入地址解析而得到。
其函数代码如下:public void onProviderDisabled(String provider){Toast.makeText(GMap.this, R.string.nogps_alert,Toast.LENGTH_LONG).show();}public void onProviderEnabled(String provider){}public void onStatusChanged(String provider,int status,Bundle extras){}};通过调用Location中的getLatitude()和getLonggitude()方法可以分别获取位置信息中的纬度和经度,示例代码如下:double geoLatitude = location.getLatitude() * 1E6;double geoLongitude = location.getLongitude() * 1E6;d:代码将产生位置改变事件的条件设定为时间间隔为3秒实现locationListener的代码如下LocationListener locationListener = new LocationListener(){public void onLocationChanged(Location location) {}public void onProviderDisabled(String provider) {}public void onProviderEnabled(String provider) {} public void onStatusChanged(String provider, int status, Bundle extras) { }};e.修改main.xml需要在main.xml里创建一个来自com.google.android.maps.MapView的MapView标签。