package org.orange.familylink.navigation; import java.util.List; import org.orange.familylink.R; import org.orange.familylink.util.Network; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.app.FragmentManager; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Bundle; /** * 这个开启导航类有个静态方法,这个方法是用于紧急求助时受监护人把定位坐标发送给监护人时,在监护人端就调用这个方法,把受监护人的定位信息传入给静态方法 * 然后静态方法就会启动谷歌地图进行导航,当然也就说明除了用受监护人传入的定位信息,这里还用了监护人的定位信息,这样就能从监护人导航到受监护人的位置 * @author Orange Team * */ public class StartNavigation { /** * 防止实例化 */ private StartNavigation(){} /** * 主要是用于紧急求助时受监护人把定位坐标发送给监护人时,在监护人端就调用这个方法,把受监护人的定位信息传入给这个方法,然后这个方法就会开启谷歌地图进行导航 * 当然也就是说明除了用受监护人传入的定位信息,这里还用了监护人的定位信息,这样就能从监护人导航到受监护人的位置 * @param context 上下文环境 * @param latitude 纬度double类型 * @param longitude 经度double类型 */ public static void toStartNavigationApp(Context context, FragmentManager manager, double latitude, double longitude){ //导航用的定位信息,包括起点到终点位置信息 Uri location = Uri.parse("http://maps.google.com/maps?f=dsaddr=startLat startLng&daddr=" + latitude + " " + longitude + "&hl=en"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, location); //专用启动谷歌地图 mapIntent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity"); //看是否有应用课用于启动 PackageManager packageManager = context.getPackageManager(); List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0); boolean isIntentSafe = activities.size() > 0; if(Network.isConnected(context)){ if(isIntentSafe) //如果网络可用且有应用可以被启动进行导航就开启,但然这个可被开启的应用这里就是指谷歌地图了 context.startActivity(mapIntent); else{ //没有谷歌地图时就提示是否现在安装谷歌地图,如果是就会跳到谷歌地图安装页面 NoMapsAppDialogFragment mDialog = new NoMapsAppDialogFragment(); mDialog.show(manager, "noMapsAppDialog"); } }else{ //没网络就会提示是否打开网络设置 Network.openNoConnectionDialog(manager); } } /** * 这个内部类是用于构建一个对话框,对话框功能是提示用户是否跳到安装谷歌地图的页面 * @author Orange Team * */ public static class NoMapsAppDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.no_maps_app_title) .setMessage(R.string.no_maps_app_message) .setPositiveButton(android.R.string.yes, new OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("market://details?id=com.google.android.apps.maps")); startActivity(intent); } }) .setNegativeButton(android.R.string.cancel, new OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { return; } }); return builder.create(); } } }