riku
2022-02-18 d59d55575d913646b7a90fca651904ab889c6723
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package cn.flightfeather.thirdappmodule.util;
 
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.support.v7.app.AlertDialog;
import android.widget.Toast;
 
import com.amap.api.maps.model.LatLng;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * Created by note_ff_1602 on 2018/2/26.
 * 开始高德导航
 */
 
public class AmapNavi {
    private Context context;
 
    public AmapNavi(Context context) {
        this.context = context;
    }
    //开始导航功能,坐标为高德坐标
    public void startNavi(final double lat, final double lng){
 
        if (lat!=0&&lng!=0){
            if (isAvilible(context,"com.autonavi.minimap")){
                AlertDialog.Builder dialog = new AlertDialog.Builder(context);
                dialog.setTitle("要开始导航吗");
                dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        LatLng latlng = new LatLng(lat,lng);
                        goToGaode(latlng.latitude,latlng.longitude);
                    }
                });
                dialog.setNegativeButton("取消",null);
                dialog.show();
 
            }else Toast.makeText(context, "请安装高德地图来启用导航功能", Toast.LENGTH_SHORT).show();
 
 
        }else {
            Toast.makeText(context, "无定位不能导航", Toast.LENGTH_SHORT).show();
        }
    }
 
    public static boolean isAvilible(Context context, String packageName){
        //获取packagemanager
        final PackageManager packageManager = context.getPackageManager();
        //获取所有已安装程序的包信息
        List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
        //用于存储所有已安装程序的包名
        List<String> packageNames = new ArrayList<String>();
        //从pinfo中将包名字逐一取出,压入pName list中
        if(packageInfos != null){
            for(int i = 0; i < packageInfos.size(); i++){
                String packName = packageInfos.get(i).packageName;
                packageNames.add(packName);
            }
        }
        //判断packageNames中是否有目标程序的包名,有TRUE,没有FALSE
        return packageNames.contains(packageName);
    }
 
 
    //高德
    private void goToGaode(double lat, double lon) {
 
        StringBuffer stringBuffer = new StringBuffer("androidamap://route?sourceApplication=").append("amap");
 
        stringBuffer.append("&dlat=").append(""+lat)
                .append("&dlon=").append(""+lon)
                .append("&dev=").append(0)
                .append("&t=").append(0);
 
        Intent intent = new Intent("android.intent.action.VIEW", android.net.Uri.parse(stringBuffer.toString()));
        intent.setPackage("com.autonavi.minimap");
        context.startActivity(intent);
    }
}