外部打开腾讯地图网页版:
Intent tengXuIntent = new Intent();
// 驾车路线规划
tengXuIntent.setData(Uri.parse("qqmap://map/routeplan?type=drive&from=我的位置&fromcoord=" + LbsService.instance().getLatitude() + "," + LbsService.instance().getLongitude() + "&to=" + 此处填写你的地址+ "&tocoord=" + mLatitude + "," + mLongitude));
if (isInstallByread("com.tencent.map")) {
//启动该页面即可
ActivityManager.getTopActivity().startActivity(tengXuIntent);
} else {
//如果没有安装则跳转到应用市场
Toast.makeText(ActivityManager.getTopActivity(), "您尚未安装腾讯地图,请先安装地图", Toast.LENGTH_LONG).show();
Uri uri = Uri.parse("market://details?id=com.tencent.map");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
if (intent.resolveActivity(ActivityManager.getTopActivity().getPackageManager()) != null) {
ActivityManager.getTopActivity().startActivity(intent);
}
}
外部打开高德地图进行导航:
Intent gaoDeIntent = new Intent();
gaoDeIntent.setAction(Intent.ACTION_VIEW);
gaoDeIntent.addCategory(Intent.CATEGORY_DEFAULT);
gaoDeIntent.setPackage("com.autonavi.minimap");
gaoDeIntent.setData(Uri.parse("androidamap://route/plan/?slat=" + LbsService.instance().getLatitude() + "&slon=" + LbsService.instance().getLongitude() + "&sname=我的位置&dlat=" + mLatitude + "&dlon=" + mLongitude + "&dname=" + 此处填写你的地址+ "&dev=0&t=0"));
if (isInstallByread("com.autonavi.minimap")) {
ActivityManager.getTopActivity().startActivity(gaoDeIntent);
Log.e("GasStation", "高德地图客户端已经安装");
} else {
//如果没有安装则跳转到应用市场
Toast.makeText(ActivityManager.getTopActivity(), "您尚未安装高德地图客户端,请先安装地图", Toast.LENGTH_LONG).show();
Uri uri = Uri.parse("market://details?id=com.autonavi.minimap");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
if (intent.resolveActivity(ActivityManager.getTopActivity().getPackageManager()) != null) {
ActivityManager.getTopActivity().startActivity(intent);
}
}
外部打开百度地图进行导航:
// 驾车路线规划
Intent baiDuIntent = new Intent();
baiDuIntent.setData(Uri.parse("baidumap://map/direction?coord_type=gcj02&src=fangbaobao|房保保®ion=" + LbsService.instance().getLocCity() + "&origin=" + LbsService.instance().getLatitude() + "," + LbsService.instance().getLongitude() + "&destination=" + mLatitude + "," + mLongitude + "&mode=driving&sy=3"));
if (isInstallByread("com.baidu.BaiduMap")) {
ActivityManager.getTopActivity().startActivity(baiDuIntent);
Log.e("GasStation", "百度地图客户端已经安装");
} else {
//如果没有安装则跳转到应用市场
Toast.makeText(ActivityManager.getTopActivity(), "您尚未安装百度地图客户端,请先安装地图", Toast.LENGTH_LONG).show();
Uri uri = Uri.parse("market://details?id=com.baidu.BaiduMap");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
if (intent.resolveActivity(ActivityManager.getTopActivity().getPackageManager()) != null) {
ActivityManager.getTopActivity().startActivity(intent);
}
}
以上代码涉及到的ActivityManager以及LbService均是封装好可以直接使用的工具类
ActivityManager是自己封装的一个管理activity的工具类,一般用在获取上下文或者是在fragment获取当前activity中去使用
LbService 是自己封装的定位的工具类,很通用,用于定位,存储定位信息,获取经纬度,城市信息等等
关于其中的工具类ActivityManager
import android.app.Activity;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2016/5/14 0014.
*/
public class ActivityManager {
private static final List<BaseActivity> ActivityStack = new ArrayList<>();
public static List<BaseActivity> getStack(){
return ActivityStack;
}
public static void add( BaseActivity activity ) {
ActivityStack.add( activity );
}
public static void remove( Activity activity ) {
for( int i = ActivityStack.size()-1; i >= 0; i-- )
{
if( ActivityStack.get(i) == activity ) {
ActivityStack.remove(i);
break;
}
}
}
public static BaseActivity getTopActivity() {
if( ActivityStack.size() > 0 ) {
return ActivityStack.get( ActivityStack.size()-1 );
} else {
throw new NullPointerException("栈顶没有Activity");
}
}
public static int getActivityCount() {
if( ListUtil.isEmpty(ActivityStack) ) return 0;
return ActivityStack.size();
}
public static BaseActivity getActivity( int position ) {
if( position < getActivityCount() ) {
return ActivityStack.get(position);
} else {
return null;
}
}
public static void removeActivity( int position ) {
if( position < getActivityCount() ) {
ActivityStack.remove( position );
}
}
public static boolean contains( Class zClass ) {
for( int i = 0; i < ActivityStack.size(); i++ ) {
if( ActivityStack.get(i).getClass().toString().equals( zClass.toString() ) ) return true;
}
return false;
}
}
判断是否安装目标应用
/**
* 判断是否安装目标应用
*
* @param packageName 目标应用安装后的包名
* @return 是否已安装目标应用
*/
private boolean isInstallByread(String packageName) {
return new File("/data/data/" + packageName).exists();
}