关于谷歌地图的问题:requires unavailable shared library com.google.android.maps
关于谷歌地图和百度地图的抉择:
补充:http://news.3snews.net/industry/20120305/18896.shtml
经过调研(或许不够准确,但目前我得到的信息是这样的)
发现大部分国内Android手机制造商在操作系统中删除了谷歌地图的文件,导致建立Google APIs Android Project的时候,无法install到Android手机上。
提示:“Package com.lmj.demo requires unavailable shared library com.google.android.maps; failing!”
原因是手机系统中缺少两个文件:
/system/framework中少了com.google.android.maps.jar文件,
/system/etc/permissions/下少了com.google.android.maps.xml文件。
解决办法:
需要拷贝缺少的文件到相应的目录下。
缺陷:
有的Android机型,例如乐Pad,没有权限拷贝文件至该目录。
因此,只能暂时选择百度地图。如果大家有好的方法和建议,希望告诉我,谢谢!
网上有一个比较全的拷贝文件的方法,大家可以借鉴:
----------------------------------
安装基于google map的应用问题解决
四14
Posted by 寻道者 in Android | No Comments
本来我是写过一篇关于如果安装基于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的应用出错
四13
Posted by 寻道者 in Android | No Comments
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
三18
Posted by 寻道者 in Android | No Comments
错误如下:
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显示坐标
九27
Posted by 寻道者 in Android | No Comments
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时显示指定坐标的标记
七19
Posted by 寻道者 in Android | No Comments
在使用网页版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地址
五26
Posted by 寻道者 in Android | No Comments
直接将该http://dl-ssl.google.com/Android/eclipse地址复制到eclipse Software Updates进行更新就OK。
Android通过gps获取当前的城市街道与误差的代码
五13
Posted by 寻道者 in Android | No Comments
一般来讲,通过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判断是否有可用网络的代码
五13
Posted by 寻道者 in Android | No Comments
在开发基于网络的应用的时候,需要判断是否有可用的网络,如果没有开启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。