Archive for category Android

在乐pad上安装基于google map的应用问题解决

本来我是写过一篇关于如果安装基于google map应用的文章的,见在Android系统上安装基于google map的应用出错

但今天到手的乐pad竟然不让我把这个文件放到指定的目录,提示权限不够。我只能提权操作了,费了一个下午的时间。下面总结一下:

先是安装“Root System Tool”,这里下载

接着,有了Root权限后,修改/system/framework的权限,命令是:

chmod 777 /system/framework
chmod 777 /system/etc/permissions

然后使用adb命令复制文件,命令是:

adb -d push com.google.android.maps.jar /system/framework/com.google.android.maps.jar
adb -d push com.google.android.maps.xml /system/etc/permissions/com.google.android.maps.xml

现在可以安装您的基于google map的应用了,这样就不会提示错误了

requires unavailable shared library com.google.android.maps; failing!

最后,将文件夹的权限修改回来,卸载掉“Root System Tool”。权限改回来的命令是:

chmod 755 /system/framework
chmod 755 /system/etc/permissions

在Android系统上安装基于google map的应用出错

requires unavailable shared library com.google.android.maps; failing!

把下面两个文件放在对应系统目录下:
com.google.android.maps.jar ==> system/framework/
com.google.android.maps.xml ==> system/etc/permissions/

Android终端支持google map

错误如下:

03-18 17:34:09.888: ERROR/PackageManager(94): Package  requires unavailable shared library com.google.android.maps; failing!

解决方法:
1. 在Android中,额外支持Google Add-ons(Google Maps),需要将如下档案(从标准的SDK中pull出来的,也可以从GPhone中pull出来)打包进System.img。Google Add-ons只需要1–2,Goolge Maps(Google的地图程序) 需要1–5:
1)system/framework com.google.android.maps.jar
2)system/etc/permissions com.google.android.maps.xml
3)system/framework com.google.android.gtalkservice.jar
4)system/etc/permissions com.google.android.gtalkservice.xml
5)system/app Maps.apk (Google Maps v3.0)
2.源码:Android Cupcake Release(经测试,在donut平台同样适用。)
1)编译源码(为了生成out/target目录中Android最原始的东西)
2)将以上文件加入out/target/product/generic相应目录,在源码根目录使用make snod打包,获得新的system.img

转自:Android Map开发基础知识学习笔记

点击Android google map显示坐标

public boolean dispatchTouchEvent(MotionEvent event) {
		if (event.getAction() == 1) {
			GeoPoint p = myMapView.getProjection().fromPixels((int) event.getX(), (int) event.getY());

			Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault());
			try {
				List<Address> addresses = geoCoder.getFromLocation(p.getLatitudeE6() / 1E6, p.getLongitudeE6() / 1E6, 1);

				StringBuilder add = new StringBuilder();
				if (addresses.size() > 0) {
					for (int i = 0; i < addresses.get(0).getMaxAddressLineIndex(); i++)
						add.append(addresses.get(0).getAddressLine(i) + "\n");
				}
				add.append(p.getLatitudeE6() / 1E6 + "," + p.getLongitudeE6() / 1E6);
				Toast.makeText(getBaseContext(), add, Toast.LENGTH_LONG).show();
			} catch (IOException e) {
				Log.e("HangzhouBike", e.getMessage());
			}
			return true;
		} else
			return false;
	}

通过Intent调用google map时显示指定坐标的标记

在使用网页版google map的时候,可以在指定的坐标上加标记即marker,就是那个红色的标记。但在android手机上,通过Intent调用google map时,却无法将指定坐标的标记显示在地图上,找了很久,终于找到了方法。

String title="杭州花圃",lat="30.2451655784728",lng="120.130562782287";
Uri mapUri = Uri.parse("http://maps.google.com/maps?q=" +lat + "," + lng + "(" + title + ")&z=21&cbp=1");
Intent i = new Intent(Intent.ACTION_VIEW, mapUri);
startActivity(i);

以上代码就是在指定的经纬度上显示标记名称,即在(120.130562782287,30.2451655784728)显示杭州花圃。z=21是显示级别。

通过以上代码,就能够在android google map上显示自定义坐标和标记了。

下载android eclipse adt plugin地址

直接将该http://dl-ssl.google.com/Android/eclipse地址复制到eclipse Software Updates进行更新就OK。

Android通过gps获取当前的城市街道与误差的代码

一般来讲,通过gps获取到经纬度坐标以后,要继续深入的获取该经纬度坐标的城市、街道与精度(误差)等信息。

private String getAddressbyGeoPoint() {
		// 自经纬度取得地址
		StringBuilder sb = new StringBuilder();
		Geocoder gc = new Geocoder(getBaseContext(), Locale.getDefault());
		List<Address> lstAddr = null;
		try {
			lstAddr = gc.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
		} catch (IOException e) {
			Log.e("HangzhouBike", e.getMessage());
		}
		if (lstAddr != null && lstAddr.size() > 0) {
			Address addr = lstAddr.get(0);
			if (addr.getAddressLine(1) != null)
				sb.append(addr.getAddressLine(1)).append(" ");
			if (addr.getAddressLine(2) != null)
				sb.append(addr.getAddressLine(2)).append(" ");
			sb.append(" ±" + location.getAccuracy() + "米");
		}
		return sb.toString();
	}

Android判断是否有可用网络的代码

在开发基于网络的应用的时候,需要判断是否有可用的网络,如果没有开启WIFI或者APN的话,是无法连接网络的。以下代码是判断是否有网络,以及没有网络的话,打开系统设置进行开启。

private boolean CheckNetwork() {
		boolean flag = false;
		ConnectivityManager cwjManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
		if (cwjManager.getActiveNetworkInfo() != null)
			flag = cwjManager.getActiveNetworkInfo().isAvailable();
		if (!flag) {
			Builder b = new AlertDialog.Builder(this).setTitle("没有可用的网络").setMessage(getResources().getString("请开启GPRS或WIFI网络连接"));
			b.setPositiveButton("确定", new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int whichButton) {
					Intent mIntent = new Intent("/");
					ComponentName comp = new ComponentName("com.android.settings", "com.android.settings.WirelessSettings");
					mIntent.setComponent(comp);
					mIntent.setAction("android.intent.action.VIEW");
					startActivity(mIntent);
				}
			}).setNeutralButton("取消", new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int whichButton) {
					dialog.cancel();
				}
			}).create();
			b.show();
		}

		return flag;
	}

主要是通过Intent来调用开启网络的Activity。

android版杭州自行车开发回顾

之所以写这篇文章,是因为我开发的基于google map 显示手机所在位置附近的公共自行车租借点的方式失败了,原因是性能问题。至于怎么开发android google map ,看这几篇文章http://mobiforge.com/developing/story/using-google-maps-android
http://labs.chinamobile.com/mblog/103798_26490

Read the rest of this entry »

第二个Android软件正在策划中……杭州市公共自行车网点

因为杭州市公共自行车的网点遍布杭州各处,有Android系统的手机也越来越多,能够方便的发现自己旁边的还车点是一个非常好的便民想法。把这个想法变为现实只需要我努力努力就能实现了。
杭州公共自行车(免费单车)网站上还车点的坐标信息,虽然有些可能不准确,但我会发现一个修改一个的。

pagepeel by webpicasso.de