溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

高德導(dǎo)航功能模塊

發(fā)布時(shí)間:2020-08-01 16:21:03 來源:網(wǎng)絡(luò) 閱讀:717 作者:鷺明 欄目:開發(fā)技術(shù)


主要代碼:

public class MainActivity extends BaseActivity {


private EditText edit_end_lng;

private EditText edit_end_lat;

private EditText edi_star_Lat;

private EditText edi_star_Lng;

public static Double endLng = 0.0;

public static Double endLat = 0.0;

public static Double startLat = 0.0;

public static Double startLng = 0.0;

NaviLatLng mStartLatlng ;

NaviLatLng mEndLatlng ;


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

iniUi();

mAMapNaviView = (AMapNaviView) findViewById(R.id.navi_view);

mAMapNaviView.onCreate(savedInstanceState);

mAMapNaviView.setAMapNaviViewListener(this);

}

public void iniUi() 

{


edit_end_lat = (EditText) findViewById(R.id.edit_end_lat);

edit_end_lng = (EditText) findViewById(R.id.edit_end_lng);

edi_star_Lat = (EditText) findViewById(R.id.edi_star_Lat);

edi_star_Lng = (EditText) findViewById(R.id.edi_star_Lng);


}

public void btnSure(View v) 

{

String end_lat = edit_end_lat.getText().toString();

String end_lng = edit_end_lng.getText().toString();

String star_lat = edi_star_Lat.getText().toString();

String star_lng = edi_star_Lng.getText().toString();


if (end_lng != null) {

try {

endLng = Double.parseDouble(end_lng);

} catch (Exception e) {

}

}

if (end_lat != null) {

try {

endLat = Double.parseDouble(end_lat);

} catch (Exception e) {

}

}

if (star_lat != null) {

try {

startLat = Double.parseDouble(star_lat);

} catch (Exception e) {

}

}


if (star_lng != null) {

try {

startLng = Double.parseDouble(star_lng);

} catch (Exception e) {

}

}


Log.e("日志查看","endLng="+endLng );

Log.e("日志查看","endLat="+endLat );

Log.e("日志查看","startLat="+startLat);

Log.e("日志查看","startLng="+startLng );

mStartLatlng = new NaviLatLng(startLng,startLat);

mEndLatlng = new NaviLatLng(endLng,endLat);

//文本框中輸入正常的經(jīng)緯度就可以導(dǎo)航成功,如下列所示:

//開始輸入:經(jīng)度24.67, 緯度100.10

//結(jié)束輸入:經(jīng)度25.80, 緯度118.34

// 設(shè)置模擬導(dǎo)航的行車速度

mAMapNavi.setEmulatorNaviSpeed(350);

sList.add(mStartLatlng);

eList.add(mEndLatlng);

onInitNaviSuccess();


}


}



public class BaseActivity extends Activity implements AMapNaviListener, AMapNaviViewListener {


    protected AMapNaviView mAMapNaviView;

    protected AMapNavi mAMapNavi;

    protected TTSController mTtsManager;

    protected final List<NaviLatLng> sList = new ArrayList<NaviLatLng>();

    protected final List<NaviLatLng> eList = new ArrayList<NaviLatLng>();

    protected List<NaviLatLng> mWayPointList;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);


        //實(shí)例化語音引擎

        mTtsManager = TTSController.getInstance(getApplicationContext());

        mTtsManager.init();

        mTtsManager.startSpeaking();


        //

        mAMapNavi = AMapNavi.getInstance(getApplicationContext());

        mAMapNavi.addAMapNaviListener(this);

        mAMapNavi.addAMapNaviListener(mTtsManager);


      /*  設(shè)置模擬導(dǎo)航的行車速度

        mAMapNavi.setEmulatorNaviSpeed(350);

        sList.add(new MainActivity().mStartLatlng);

        eList.add(new MainActivity().mEndLatlng);

        sList.add(mStartLatlng);

        eList.add(mEndLatlng);*/

    }


    @Override

    protected void onResume() {

        super.onResume();

        mAMapNaviView.onResume();

    }


    @Override

    protected void onPause() {

        super.onPause();

        mAMapNaviView.onPause();


//        僅僅是停止你當(dāng)前在說的這句話,一會(huì)到新的路口還是會(huì)再說的

        mTtsManager.stopSpeaking();

//

//        停止導(dǎo)航之后,會(huì)觸及底層stop,然后就不會(huì)再有回調(diào)了,但是訊飛當(dāng)前還是沒有說完的半句話還是會(huì)說完

//        mAMapNavi.stopNavi();

    }


    @Override

    protected void onDestroy() {

        super.onDestroy();

        mAMapNaviView.onDestroy();

        //since 1.6.0 不再在naviview destroy的時(shí)候自動(dòng)執(zhí)行AMapNavi.stopNavi();請(qǐng)自行執(zhí)行

        mAMapNavi.stopNavi();

        mAMapNavi.destroy();

        mTtsManager.destroy();

    }


    @Override

    public void onInitNaviFailure() {

        Toast.makeText(this, "init navi Failed", Toast.LENGTH_SHORT).show();

    }


    @Override

    public void onInitNaviSuccess() {

        /**

         * 方法:

         *   int strategy=mAMapNavi.strategyConvert(congestion, avoidhightspeed, cost, hightspeed, multipleroute);

         * 參數(shù):

         * @congestion 躲避擁堵

         * @avoidhightspeed 不走高速

         * @cost 避免收費(fèi)

         * @hightspeed 高速優(yōu)先

         * @multipleroute 多路徑

         *

         * 說明:

         *      以上參數(shù)都是boolean類型,其中multipleroute參數(shù)表示是否多條路線,如果為true則此策略會(huì)算出多條路線。

         * 注意:

         *      不走高速與高速優(yōu)先不能同時(shí)為true

         *      高速優(yōu)先與避免收費(fèi)不能同時(shí)為true

         */

        int strategy=0;

        try {

            strategy=mAMapNavi.strategyConvert(true, false, false, false, false);

        } catch (Exception e) {

            e.printStackTrace();

        }

        mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList,strategy);

    }


    @Override

    public void onStartNavi(int type) {

    }


    @Override

    public void onTrafficStatusUpdate() {


    }


    @Override

    public void onLocationChange(AMapNaviLocation location) {


    }


    @Override

    public void onGetNavigationText(int type, String text) {


    }


    @Override

    public void onEndEmulatorNavi() {

    }


    @Override

    public void onArriveDestination() {

    }


    @Override

    public void onCalculateRouteSuccess() {

        mAMapNavi.startNavi(NaviType.EMULATOR);

    }


    @Override

    public void onCalculateRouteFailure(int errorInfo) {

    }


    @Override

    public void onReCalculateRouteForYaw() {


    }


    @Override

    public void onReCalculateRouteForTrafficJam() {


    }


    @Override

    public void onArrivedWayPoint(int wayID) {


    }


    @Override

    public void onGpsOpenStatus(boolean enabled) {

    }


    @Override

    public void onNaviSetting() {

    }


    @Override

    public void onNaviMapMode(int isLock) {


    }


    @Override

    public void onNaviCancel() {

        finish();

    }



    @Override

    public void onNaviTurnClick() {


    }


    @Override

    public void onNextRoadClick() {


    }



    @Override

    public void onScanViewButtonClick() {

    }


    @Deprecated

    @Override

    public void onNaviInfoUpdated(AMapNaviInfo naviInfo) {

    }


    @Override

    public void onNaviInfoUpdate(NaviInfo naviinfo) {

    }


    @Override

    public void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) {


    }


    @Override

    public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) {


    }


    @Override

    public void showCross(AMapNaviCross aMapNaviCross) {

    }


    @Override

    public void hideCross() {

    }


    @Override

    public void showLaneInfo(AMapLaneInfo[] laneInfos, byte[] laneBackgroundInfo, byte[] laneRecommendedInfo) {


    }


    @Override

    public void hideLaneInfo() {


    }


    @Override

    public void onCalculateMultipleRoutesSuccess(int[] ints) {


    }


    @Override

    public void notifyParallelRoad(int i) {


    }


    @Override

    public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) {


    }


    @Override

    public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {


    }



    @Override

    public void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) {


    }



    @Override

    public void onLockMap(boolean isLock) {

    }


    @Override

    public void onNaviViewLoaded() {

        Log.d("wlx", "導(dǎo)航頁面加載成功");

        Log.d("wlx", "請(qǐng)不要使用AMapNaviView.getMap().setOnMapLoadedListener();會(huì)overwrite導(dǎo)航SDK內(nèi)部畫線邏輯");

    }


    @Override

    public boolean onNaviBackClick() {

        return false;

    }



}



public class TTSController implements SynthesizerListener, AMapNaviListener {


    public static TTSController ttsManager;

    boolean isfinish = true;

    private Context mContext;

    // 合成對(duì)象.

    private SpeechSynthesizer mSpeechSynthesizer;

    /**

     * 用戶登錄回調(diào)監(jiān)聽器.

     */

    private SpeechListener listener = new SpeechListener() {


        @Override

        public void onData(byte[] arg0) {

        }


        @Override

        public void onCompleted(SpeechError error) {

            if (error != null) {


            }

        }


        @Override

        public void onEvent(int arg0, Bundle arg1) {

        }

    };


    TTSController(Context context) {

        mContext = context;

    }


    public static TTSController getInstance(Context context) {

        if (ttsManager == null) {

            ttsManager = new TTSController(context);

        }

        return ttsManager;

    }


    public void init() {

        SpeechUser.getUser().login(mContext, null, null,

                "appid=" + mContext.getString(R.string.app_id), listener);

        // 初始化合成對(duì)象.

        mSpeechSynthesizer = SpeechSynthesizer.createSynthesizer(mContext);

        initSpeechSynthesizer();

    }


    /**

     * 使用SpeechSynthesizer合成語音,不彈出合成Dialog.

     *

     * @param

     */

    public void playText(String playText) {

        if (!isfinish) {

            return;

        }

        if (null == mSpeechSynthesizer) {

            // 創(chuàng)建合成對(duì)象.

            mSpeechSynthesizer = SpeechSynthesizer.createSynthesizer(mContext);

            initSpeechSynthesizer();

        }

        // 進(jìn)行語音合成.

        mSpeechSynthesizer.startSpeaking(playText, this);


    }


    public void stopSpeaking() {

        if (mSpeechSynthesizer != null)

            mSpeechSynthesizer.stopSpeaking();

    }


    public void startSpeaking() {

        isfinish = true;

    }


    private void initSpeechSynthesizer() {

        // 設(shè)置發(fā)音人

        mSpeechSynthesizer.setParameter(SpeechConstant.VOICE_NAME,

                mContext.getString(R.string.preference_default_tts_role));

        // 設(shè)置語速

        mSpeechSynthesizer.setParameter(SpeechConstant.SPEED,

                "" + mContext.getString(R.string.preference_key_tts_speed));

        // 設(shè)置音量

        mSpeechSynthesizer.setParameter(SpeechConstant.VOLUME,

                "" + mContext.getString(R.string.preference_key_tts_volume));

        // 設(shè)置語調(diào)

        mSpeechSynthesizer.setParameter(SpeechConstant.PITCH,

                "" + mContext.getString(R.string.preference_key_tts_pitch));


    }


    @Override

    public void onBufferProgress(int arg0, int arg1, int arg2, String arg3) {



    }


    @Override

    public void onCompleted(SpeechError arg0) {


        isfinish = true;

    }


    @Override

    public void onSpeakBegin() {


        isfinish = false;


    }


    @Override

    public void onSpeakPaused() {



    }


    @Override

    public void onSpeakProgress(int arg0, int arg1, int arg2) {



    }


    @Override

    public void onSpeakResumed() {



    }


    public void destroy() {

        if (mSpeechSynthesizer != null) {

            mSpeechSynthesizer.stopSpeaking();

        }

    }


    @Override

    public void onArriveDestination() {


        this.playText("到達(dá)目的地");

    }


    @Override

    public void onArrivedWayPoint(int arg0) {


    }


    @Override

    public void onCalculateRouteFailure(int arg0) {

        this.playText("路徑計(jì)算失敗,請(qǐng)檢查網(wǎng)絡(luò)或輸入?yún)?shù)");

    }


    @Override

    public void onCalculateRouteSuccess() {

        String calculateResult = "路徑計(jì)算就緒";


        this.playText(calculateResult);

    }


    @Override

    public void onEndEmulatorNavi() {

        this.playText("導(dǎo)航結(jié)束");


    }


    @Override

    public void onGetNavigationText(int arg0, String arg1) {


        this.playText(arg1);

    }


    @Override

    public void onInitNaviFailure() {



    }


    @Override

    public void onInitNaviSuccess() {



    }


    @Override

    public void onLocationChange(AMapNaviLocation arg0) {



    }


    @Override

    public void onReCalculateRouteForTrafficJam() {


        this.playText("前方路線擁堵,路線重新規(guī)劃");

    }


    @Override

    public void onReCalculateRouteForYaw() {


        this.playText("您已偏航");

    }


    @Override

    public void onStartNavi(int arg0) {



    }


    @Override

    public void onTrafficStatusUpdate() {



    }


    @Override

    public void onGpsOpenStatus(boolean arg0) {



    }


    @Override

    public void onNaviInfoUpdated(AMapNaviInfo arg0) {



    }


    @Override

    public void onNaviInfoUpdate(NaviInfo arg0) {




    }


    @Override

    public void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) {


    }


    @Override

    public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) {


    }


    @Override

    public void showCross(AMapNaviCross aMapNaviCross) {


    }


    @Override

    public void hideCross() {


    }


    @Override

    public void showLaneInfo(AMapLaneInfo[] aMapLaneInfos, byte[] bytes, byte[] bytes1) {


    }


    @Override

    public void hideLaneInfo() {


    }


    @Override

    public void onCalculateMultipleRoutesSuccess(int[] ints) {


    }


    @Override

    public void notifyParallelRoad(int i) {


    }


    @Override

    public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) {


    }


    @Override

    public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {


    }



    @Override

    public void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) {


    }

}



public class Utils {

    public static final String DAY_NIGHT_MODE = "daynightmode";

    public static final String DEVIATION = "deviationrecalculation";

    public static final String JAM = "jamrecalculation";

    public static final String TRAFFIC = "trafficbroadcast";

    public static final String CAMERA = "camerabroadcast";

    public static final String SCREEN = "screenon";

    public static final String THEME = "theme";

    public static final String ISEMULATOR = "isemulator";



    public static final String ACTIVITYINDEX = "activityindex";


    public static final int SIMPLEHUDNAVIE = 0;

    public static final int EMULATORNAVI = 1;

    public static final int SIMPLEGPSNAVI = 2;

    public static final int SIMPLEROUTENAVI = 3;



    public static final boolean DAY_MODE = false;

    public static final boolean NIGHT_MODE = true;

    public static final boolean YES_MODE = true;

    public static final boolean NO_MODE = false;

    public static final boolean OPEN_MODE = true;

    public static final boolean CLOSE_MODE = false;


}


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI