导航信息透出(ADASISv3)
机动点#
导航机动点信息指的是根据用户当前GPS定位点生成的引导用户到下一驾驶操作点的信息,如下图所示:
关键代码#
@Override
public void onManeuver(BNRGManeuver arg0) {
Log.d(BNRemoteConstants.MODULE_TAG, "onManeuver...........name = " + arg0.getManeuverName() + ", distance = " +
arg0.getManeuverDistance() + ",nextRoadName = " + arg0.getNextRoadName());
final String afterMeterS = getFormatAfterMeters(arg0.getManeuverDistance());
final String nextRoadName = arg0.getNextRoadName();
final boolean isAlong = arg0.mIsStraight;
String turnName = arg0.name;
int turnIconResId = SimpleGuideModle.gTurnIconID[0];
if (turnName != null && !"".equalsIgnoreCase(turnName)) {
turnName = turnName + ".png";
}
if (turnName != null && !"".equalsIgnoreCase(turnName)) {
turnIconResId = SimpleGuideModle.getInstance().getTurnIconResId(turnName);
}
final int turnIcon = turnIconResId;
mMainHandler.post(new Runnable() {
@Override
public void run() {
mAfterMetersInfoTV.setText(afterMeterS);
mGoWhereInfoTV.setText(nextRoadName);
mNaviAfterView.setVisibility(View.VISIBLE);
mAlongRoadView.setVisibility(View.GONE);
mTurnIcon.setImageDrawable(getResources().getDrawable(turnIcon));
}
});
}
/**
* 根据剩余距离获取格式化的字符串,如 200米后
*
* @param nextRemainDist
* @return
*/
private String getFormatAfterMeters(int nextRemainDist) {
StringBuffer distance = new StringBuffer();
StringUtils.formatDistance(nextRemainDist, UnitLangEnum.ZH, distance);
return getResources().getString(R.string.nsdk_string_rg_sg_after_meters, distance);
}
/**
* 定义了机动点转向标的对应关系,如 turnIconName 为 turn_back 时,对应显示图标ID为 R.drawable.nsdk_drawable_rg_ic_turn_back,具体图标请用户自行设计。
*/
public static final int[] gTurnIconID = {
R.drawable.nsdk_drawable_rg_ic_turn_back, /**< 无效值 */
R.drawable.nsdk_drawable_rg_ic_turn_front, /**< 直行 */
R.drawable.nsdk_drawable_rg_ic_turn_right_front, /**< 右前方转弯 */
R.drawable.nsdk_drawable_rg_ic_turn_right, /**< 右转 */
R.drawable.nsdk_drawable_rg_ic_turn_right_back, /**< 右后方转弯 */
R.drawable.nsdk_drawable_rg_ic_turn_back, /**< 掉头 */
R.drawable.nsdk_drawable_rg_ic_turn_left_back, /**< 左后方转弯 */
R.drawable.nsdk_drawable_rg_ic_turn_left, /**< 左转 */
R.drawable.nsdk_drawable_rg_ic_turn_left_front, /**< 左前方转弯 */
R.drawable.nsdk_drawable_rg_ic_turn_ring, /**< 环岛 */
R.drawable.nsdk_drawable_rg_ic_turn_ring_out, /**< 环岛出口 */
R.drawable.nsdk_drawable_rg_ic_turn_left_side, /**< 普通/JCT/SAPA二分歧 靠左 */
R.drawable.nsdk_drawable_rg_ic_turn_right_side, /**< 普通/JCT/SAPA二分歧 靠右 */
R.drawable.nsdk_drawable_rg_ic_turn_left_side_main, /**< 左侧走本线 */
R.drawable.nsdk_drawable_rg_ic_turn_branch_left_straight, /**< 靠最左走本线 */
R.drawable.nsdk_drawable_rg_ic_turn_right_side_main, /**< 右侧走本线 */
R.drawable.nsdk_drawable_rg_ic_turn_branch_right_straight, /**< 靠最右走本线 */
R.drawable.nsdk_drawable_rg_ic_turn_branch_center, /**< 中间走本线 */
R.drawable.nsdk_drawable_rg_ic_turn_left_side_ic, /**< IC二分歧左侧走IC */
R.drawable.nsdk_drawable_rg_ic_turn_right_side_ic, /**< IC二分歧右侧走IC */
R.drawable.nsdk_drawable_rg_ic_turn_branch_left, /**< 普通三分歧/JCT/SAPA 靠最左 */
R.drawable.nsdk_drawable_rg_ic_turn_branch_right, /**< 普通三分歧/JCT/SAPA 靠最右 */
R.drawable.nsdk_drawable_rg_ic_turn_branch_center, /**< 普通三分歧/JCT/SAPA 靠中间 */
R.drawable.nsdk_drawable_rg_ic_turn_start, /**< 起始地 */
R.drawable.nsdk_drawable_rg_ic_turn_dest, /**< 目的地 */
R.drawable.nsdk_drawable_rg_ic_turn_via_1, /**< 途径点1 */
R.drawable.nsdk_drawable_rg_ic_turn_via_1, /**< 途径点2 */
R.drawable.nsdk_drawable_rg_ic_turn_via_1, /**< 途径点3 */
R.drawable.nsdk_drawable_rg_ic_turn_via_1, /**< 途径点4 */
R.drawable.nsdk_drawable_rg_ic_turn_inferry, /**< 进入渡口 */
R.drawable.nsdk_drawable_rg_ic_turn_inferry, /**< 脱出渡口 */
R.drawable.nsdk_drawable_rg_ic_turn_tollgate, /**< 收费站 */
R.drawable.nsdk_drawable_rg_ic_turn_left_side_main, /**< IC二分歧左侧直行走IC */
R.drawable.nsdk_drawable_rg_ic_turn_right_side_main, /**< IC二分歧右侧直行走IC */
R.drawable.nsdk_drawable_rg_ic_turn_left_side_main, /**< 普通/JCT/SAPA二分歧左侧 直行 */
R.drawable.nsdk_drawable_rg_ic_turn_right_side_main, /**< 普通/JCT/SAPA二分歧右侧 直行 */
R.drawable.nsdk_drawable_rg_ic_turn_branch_left_straight, /**< 普通/JCT/SAPA三分歧左侧 直行 */
R.drawable.nsdk_drawable_rg_ic_turn_branch_center, /**< 普通/JCT/SAPA三分歧中央 直行 */
R.drawable.nsdk_drawable_rg_ic_turn_branch_right_straight,/**< 普通/JCT/SAPA三分歧右侧 直行 */
R.drawable.nsdk_drawable_rg_ic_turn_branch_left, /**< IC三分歧左侧走IC */
R.drawable.nsdk_drawable_rg_ic_turn_branch_center, /**< IC三分歧中央走IC */
R.drawable.nsdk_drawable_rg_ic_turn_branch_right, /**< IC三分歧右侧走IC */
R.drawable.nsdk_drawable_rg_ic_turn_branch_left_straight, /**< IC三分歧左侧直行 */
R.drawable.nsdk_drawable_rg_ic_turn_branch_center, /**< IC三分歧中间直行 */
R.drawable.nsdk_drawable_rg_ic_turn_branch_right_straight, /**< IC三分歧右侧直行 */
R.drawable.nsdk_drawable_rg_ic_turn_left_side_main, /**< 八方向靠左直行*/
R.drawable.nsdk_drawable_rg_ic_turn_right_side_main, /**< 八方向靠右直行*/
R.drawable.nsdk_drawable_rg_ic_turn_branch_left_straight, /**< 八方向靠最左侧直行*/
R.drawable.nsdk_drawable_rg_ic_turn_branch_center, /**< 八方向沿中间直行*/
R.drawable.nsdk_drawable_rg_ic_turn_branch_right_straight, /**< 八方向靠最右侧直行*/
R.drawable.nsdk_drawable_rg_ic_turn_left_2branch_left, /**< 八方向左转+随后靠左*/
R.drawable.nsdk_drawable_rg_ic_turn_left_2branch_right, /**< 八方向左转+随后靠右*/
R.drawable.nsdk_drawable_rg_ic_turn_left_3branch_left, /**< 八方向左转+随后靠最左*/
R.drawable.nsdk_drawable_rg_ic_turn_left_3branch_middle,/**< 八方向左转+随后沿中间*/
R.drawable.nsdk_drawable_rg_ic_turn_left_3branch_right, /**< 八方向左转+随后靠最右*/
R.drawable.nsdk_drawable_rg_ic_turn_right_2branch_left, /**< 八方向右转+随后靠左 */
R.drawable.nsdk_drawable_rg_ic_turn_right_2branch_right, /**< 八方向右转+随后靠右*/
R.drawable.nsdk_drawable_rg_ic_turn_right_3branch_left, /**< 八方向右转+随后靠最左*/
R.drawable.nsdk_drawable_rg_ic_turn_right_3branch_middle, /**< 八方向右转+随后沿中间 */
R.drawable.nsdk_drawable_rg_ic_turn_right_3branch_right, /**< 八方向右转+随后靠最右*/
R.drawable.nsdk_drawable_rg_ic_turn_lf_2branch_left, /**< 八方向左前方靠左侧 */
R.drawable.nsdk_drawable_rg_ic_turn_lf_2branch_right, /**< 八方向左前方靠右侧 */
R.drawable.nsdk_drawable_rg_ic_turn_rf_2branch_left, /**< 八方向右前方靠左侧 */
R.drawable.nsdk_drawable_rg_ic_turn_rf_2branch_right /**< 八方向右前方靠右侧 */
};
/**
* 车道图标,对应每一个车道的转向箭头图标,用户可自行设计对应的显示图标。
*/
public class NaviLane {
/**
* 左转(高亮)
*/
public static final int NAVILANE_TURN_LEFT_90 = 0x11000000;
/**
* 左转
*/
public static final int NAVILANE_TURN_LEFT_90_GRAY = 0x10000000;
/**
* 右转(高亮)
*/
public static final int NAVILANE_TURN_RIGHT_90 = 0x00110000;
/**
* 右转
*/
public static final int NAVILANE_TURN_RIGHT_90_GRAY = 0x00100000;
/**
* 直行(高亮)
*/
public static final int NAVILANE_STRAIGHT = 0x00001100;
/**
* 直行
*/
public static final int NAVILANE_STRAIGHT_GRAY = 0x00001000;
/**
* 左调头(高亮)
*/
public static final int NAVILANE_TURN_AROUND_LEFT = 0x00000011;
/**
* 左调头
*/
public static final int NAVILANE_TURN_AROUND_LEFT_GRAY = 0x00000010;
/**
* 左转+直行
*/
public static final int NAVILANE_2CROSS_LEFT_STRAIGHT_GRAY = 0x10001000;
/**
* 左转(高亮)+直行
*/
public static final int NAVILANE_2CROSS_TURN_LEFT = 0x11001000;
/**
* 左转+直行(高亮)
*/
public static final int NAVILANE_2CROSS_LEFT_STRAIGHT = 0x10001100;
/**
* 右转+直行
*/
public static final int NAVILANE_2CROSS_RIGHT_STRAIGHT_GRAY = 0x00101000;
/**
* 右转(高亮)+直行
*/
public static final int NAVILANE_2CROSS_TURN_RIGHT = 0x00111000;
/**
* 右转+直行(高亮)
*/
public static final int NAVILANE_2CROSS_RIGHT_STRAIGHT = 0x00101100;
/**
* 左转+直行+右转
*/
public static final int NAVILANE_3CROSS_GRAY = 0x10101000;
/**
* 左转(高亮)+直行+右转
*/
public static final int NAVILANE_3CROSS_TURN_LEFT = 0x11101000;
/**
* 左转+直行+右转(高亮)
*/
public static final int NAVILANE_3CROSS_TURN_RIGHT = 0x10111000;
/**
* 左转+直行(高亮)+右转
*/
public static final int NAVILANE_3CROSS_STRAIGHT = 0x10101100;
/**
* 左转+左调头
*/
public static final int NAVILANE_AROUND_AND_LEFT_GRAY = 0x10000010;
/**
* 左转(高亮)+左调头
*/
public static final int NAVILANE_LEFT_AND_AROUND = 0x11000010;
/**
* 左转+左调头(高亮)
*/
public static final int NAVILANE_AROUND_AND_LEFT = 0x10000011;
/**
* 左转+右转
*/
public static final int NAVILANE_LEFT_AND_RIGHT_GRAY = 0x10100000;
/**
* 左转(高亮)+右转
*/
public static final int NAVILANE_LEFT_AND_RIGHT = 0x11100000;
/**
* 左转+右转(高亮)
*/
public static final int NAVILANE_RIGHT_AND_LEFT = 0x10110000;
/**
* 右转+左调头
*/
public static final int NAVILANE_AROUND_AND_RIGHT_GRAY = 0x00100010;
/**
* 右转(高亮)+左调头
*/
public static final int NAVILANE_RIGHT_AND_AROUND = 0x00110010;
/**
* 右转+左调头(高亮)
*/
public static final int NAVILANE_AROUND_AND_RIGHT = 0x00100011;
/**
* 直行+左调头
*/
public static final int NAVILANE_AROUND_AND_STRAIGHT_GRAY = 0x00001010;
/**
* 直行(高亮)+左调头
*/
public static final int NAVILANE_STRAIGHT_AND_AROUND = 0x00001110;
/**
* 直行+左调头(高亮)
*/
public static final int NAVILANE_AROUND_AND_STRAIGHT = 0x00001011;
/**
* 左转+右转+左调头
*/
public static final int NAVILANE_AROUND_LEFT_RIGHT_GRAY = 0x10100010;
/**
* 左转(高亮)+右转+左调头
*/
public static final int NAVILANE_LEFT_AROUND_RIGHT = 0x11100010;
/**
* 左转+右转(高亮)+左调头
*/
public static final int NAVILANE_RIGHT_AROUND_LEFT = 0x10110010;
/**
* 左转+右转+左调头(高亮)
*/
public static final int NAVILANE_AROUND_LEFT_RIGHT = 0x10100011;
/**
* 左转+直行+左调头
*/
public static final int NAVILANE_AROUND_LEFT_STRAIGHT_GRAY = 0x10001010;
/**
* 左转(高亮)+直行+左调头
*/
public static final int NAVILANE_LEFT_AROUND_STRAIGHT = 0x11001010;
/**
* 左转+直行(高亮)+左调头
*/
public static final int NAVILANE_STRAIGHT_LEFT_AROUND = 0x10001110;
/**
* 左转+直行+左调头(高亮)
*/
public static final int NAVILANE_AROUND_LEFT_STRAIGHT = 0x10001011;
/**
* 右转+直行+左调头
*/
public static final int NAVILANE_AROUND_RIGHT_STRAIGHT_GRAY = 0x00101010;
/**
* 右转(高亮)+直行+左调头
*/
public static final int NAVILANE_RIGHT_AROUND_STRAIGHT = 0x00111010;
/**
* 右转+直行(高亮)+左调头
*/
public static final int NAVILANE_STRAIGHT_RIGHT_AROUND = 0x00101110;
/**
* 右转+直行+左调头(高亮)
*/
public static final int NAVILANE_AROUND_RIGHT_STRAIGHT = 0x00101011;
/**
* 左转+右转+直行+左调头
*/
public static final int NAVILANE_AROUND_LEFT_RIGHT_STRAIGHT_GRAY = 0x10101010;
/**
* 左转(高亮)+右转+直行+左调头
*/
public static final int NAVILANE_LEFT_AROUND_RIGHT_STRAIGHT = 0x11101010;
/**
* 左转+右转(高亮)+直行+左调头
*/
public static final int NAVILANE_RIGHT_AROUND_LEFT_STRAIGHT = 0x10111010;
/**
* 左转+右转+直行(高亮)+左调头
*/
public static final int NAVILANE_STRAIGHT_AROUND_LEFT_RIGHT = 0x10101110;
/**
* 左转+右转+直行+左调头(高亮)
*/
public static final int NAVILANE_AROUND_LEFT_RIGHT_STRAIGHT = 0x10101011;
}
机动点图标在百度导航 app 里如下图所示,用户可以根据范例自行设计图标
服务区#
当用户行驶到高速路段,导航展示的告诉服务区及距离服务区距离等信息,如下图所示:
关键代码#
@Override
public void onServiceArea(BNRGServiceArea arg0) {
Log.d(BNRemoteConstants.MODULE_TAG, "onServiceArea............name = " + arg0.getServiceAreaName() + ", distance = " + arg0.getServiceAreaDistance());
final String serviceAreaTips = getFormatAfterMeters(arg0.getServiceAreaDistance()) + " " + arg0.getServiceAreaName();
mMainHandler.post(new Runnable() {
@Override
public void run() {
mNavilogTv.setText(serviceAreaTips);
}
});
}
诱导辅助#
辅助诱导信息为导航或者电子狗诱导过程中的路面状况、测速摄像头等交通道路信息。在导航中通常在如下区域展示:
关键代码#
在导航辅助诱导数据中,assistantType 参数代表的辅助诱导类型,请根据实际需要对应自定义的诱导图标。
@Override
public void onAssistant(BNRGAssistant arg0) {
Log.d(BNRemoteConstants.MODULE_TAG, "onAssistant......distance = " + arg0.getAssistantDistance() + ", type = " + arg0.getAssistantType());
String assistantTips = "";
String assistantTypeS = "合流";
if (arg0.getAssistantDistance() > 0) {
switch (arg0.getAssistantType()) {
case HUDConstants.AssistantType.JOINT:
assistantTypeS = "合流";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
break;
case HUDConstants.AssistantType.TUNNEL:
assistantTypeS = "隧道";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
break;
case HUDConstants.AssistantType.BRIDGE:
assistantTypeS = "桥梁";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
break;
case HUDConstants.AssistantType.RAILWAY:
assistantTypeS = "铁路";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
break;
case HUDConstants.AssistantType.BLIND_BEND:
assistantTypeS = "急转弯";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
break;
case HUDConstants.AssistantType.BLIND_SLOPE:
assistantTypeS = "陡坡";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
break;
case HUDConstants.AssistantType.ROCKFALL:
assistantTypeS = "落石";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
break;
case HUDConstants.AssistantType.ACCIDENT:
assistantTypeS = "事故多发区";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
break;
case HUDConstants.AssistantType.SPEED_CAMERA:
assistantTypeS = "测速摄像";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS + "限速: " + arg0.getAssistantLimitedSpeed();
break;
case HUDConstants.AssistantType.TRAFFIC_LIGHT_CAMERA:
assistantTypeS = "交通信号灯摄像";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
break;
case HUDConstants.AssistantType.INTERVAL_CAMERA:
assistantTypeS = "区间测速";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
break;
case HUDConstants.AssistantType.CHILDREN:
assistantTypeS = "注意儿童";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
break;
case HUDConstants.AssistantType.UNEVEN:
assistantTypeS = "路面不平";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
break;
case HUDConstants.AssistantType.NARROW:
assistantTypeS = "道路变窄";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
break;
case HUDConstants.AssistantType.VILLAGE:
assistantTypeS = "前面村庄";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
break;
case HUDConstants.AssistantType.SLIP:
assistantTypeS = "路面易滑";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
break;
case HUDConstants.AssistantType.OVER_TAKE_FORBIDEN:
assistantTypeS = "禁止超车";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
break;
case HUDConstants.AssistantType.HONK:
assistantTypeS = "请铭喇叭";
assistantTips = "前方" + getFormatAfterMeters(arg0.getAssistantDistance()) + assistantTypeS;
break;
default:
break;
}
}
final String assistantTipstr = assistantTips;
mMainHandler.post(new Runnable() {
@Override
public void run() {
mNavilogTv.setText(assistantTipstr);
}
});
}
/**
* 导航诱导图标类型
*/
public static class AssistantType {
/** 合流 */
public final static int Joint = 0 ;
/** 隧道 */
public final static int Tunnel = 1 ;
/** 桥梁 */
public final static int Bridge = 2 ;
/** 铁道 */
public final static int Railway = 3 ;
/** 急转弯 */
public final static int BlindBend = 4 ;
/** 陡坡 */
public final static int BlindSlope = 5 ;
/** 落石区 */
public final static int Rockfall = 6 ;
/** 事故多发区 */
public final static int Accident = 7 ;
/** 测速摄像头 */
public final static int SpeedCamera = 8 ;
/** 交通信号灯摄像头 */
public final static int TrafficLightCamera = 9 ;
/** 违章摄像头 */
public final static int PeccanryCamera = 10 ;
/** 区间测速摄像头 */
public final static int IntervalCamera = 11 ;
/** 注意儿童 */
public final static int Children = 12 ;
/** 路面不平 */
public final static int Uneven = 13 ;
/** 道路变窄 */
public final static int Narrow = 14 ;
/** 前面村庄 */
public final static int Viliage = 15 ;
/** 路面易滑 */
public final static int Slip = 16 ;
/** 禁止超车 */
public final static int OverTakeForbidden= 17 ;
/** 请鸣喇叭 */
public final static int Honk = 18 ;
}
目的地剩余信息#
本次导航当前位置距离目的地剩下的距离及时间信息,如下图所示:
关键点#
@Override
public void onRemainInfo(BNRGRemainInfo arg0) {
Log.d(BNRemoteConstants.MODULE_TAG, "onRemainInfo.............distance = " + arg0.getRemainDistance() + ", time = " + arg0.getRemainTime());
final String remainDistance = calculateTotalRemainDistString(arg0.getRemainDistance());
final String remainTime = calculateArriveTime(arg0.getRemainTime());
mMainHandler.post(new Runnable() {
@Override
public void run() {
mTotalDistTV.setText(remainDistance);
mArriveTimeTV.setText(remainTime);
}
});
}
private String calculateTotalRemainDistString(int nDist) {
StringBuffer builder = new StringBuffer();
StringUtils.formatDistance(nDist, UnitLangEnum.ZH, builder);
String totalRemainDistS = builder.toString();
return totalRemainDistS;
}
private String calculateArriveTime(int remainTime) {
long mArriveTime = System.currentTimeMillis();
Date curDate = new Date(mArriveTime);
mArriveTime += ( remainTime * 1000 );
Date arriveDate = new Date(mArriveTime);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
String mArriveTimeS = sdf.format(arriveDate);
GregorianCalendar curCal = new GregorianCalendar();
curCal.setTime(curDate);
GregorianCalendar arriveCal = new GregorianCalendar();
arriveCal.setTime(arriveDate);
if ( curCal.get(GregorianCalendar.DAY_OF_MONTH) == arriveCal.get(GregorianCalendar.DAY_OF_MONTH) ) {
if ( 0 == arriveCal.get(GregorianCalendar.HOUR_OF_DAY)) {
mArriveTimeS = String.format(getString(R.string.nsdk_string_rg_arrive_time_at_wee), mArriveTimeS);
} else {
mArriveTimeS = String.format(getString(R.string.nsdk_string_rg_arrive_time), mArriveTimeS);
}
} else {
int interval = getIntervalDays(curDate, arriveDate);
if( interval == 1 ) {
if ( arriveCal.get(GregorianCalendar.HOUR_OF_DAY) >= 0 && arriveCal.get(GregorianCalendar.HOUR_OF_DAY) < 4 ) {
mArriveTimeS = String.format(getString(R.string.nsdk_string_rg_arrive_time),getString(R.string.nsdk_string_rg_wee_hours));
} else {
mArriveTimeS = String.format(getString(R.string.nsdk_string_rg_arrive_time),
getString(R.string.nsdk_string_rg_tomorrow));
}
} else if ( interval == 2 ) {
mArriveTimeS = String.format(getString(R.string.nsdk_string_rg_arrive_time),
getString(R.string.nsdk_string_rg_the_day_after_tomorrow));
} else if ( interval > 2 ) {
mArriveTimeS = String.format(getString(R.string.nsdk_string_rg_arrive_time_after_day), "" + interval);
} else {
mArriveTimeS = String.format(getString(R.string.nsdk_string_rg_arrive_time), mArriveTimeS);
}
}
return mArriveTimeS;
}
当前路名#
当前路名指当前定位点道路名信息(诱导下一段路名信息请参见“机动点”相关内容)。
关键代码#
@Override
public void onCurrentRoad(BNRGCurrentRoad arg0) {
Log.d(BNRemoteConstants.TAG, "onCurrentRoad...........curRoadName = " + arg0.getCurrentRoadName());
String curRoadName = arg0.getCurrentRoadName();
}
GPS 状态#
GPS信息回调主要用于进行GPS状态正常或者丢星的通知
关键代码#
@Override
public void onGPSLost(BNRGGPSLost arg0) {
Log.d(BNRemoteConstants.TAG, "onGPSLost....");
}
@Override
public void onGPSNormal(BNRGGPSNormal arg0) {
Log.d(BNRemoteConstants.TAG, "onGPSNormal....");
}
导航状态#
导航状态信息主要包括导航开始、结束,导航过程中偏航、偏航结束。
关键代码#
@Override
public void onNaviEnd(BNRGNaviEnd arg0) {
Log.d(BNRemoteConstants.TAG, "onNaviEnd...........导航结束");
}
@Override
public void onNaviStart(BNRGNaviStart arg0) {
Log.d(BNRemoteConstants.TAG, "onNaviStart...........导航开始");
}
@Override
public void onRoutePlanYawComplete(BNRGRPYawComplete arg0) {
Log.d(BNRemoteConstants.TAG, "onRoutePlanYawComplete............偏航算路完成");
}
@Override
public void onRoutePlanYawing(BNRGRPYawing arg0) {
Log.d(BNRemoteConstants.TAG, "onRoutePlanYawing............偏航中");
}
电子狗状态#
电子狗状态信息主要包括电子狗开始、结束。
关键代码#
@Override
public void onCruiseEnd(BNRGCruiseEnd arg0) {
Log.d(BNRemoteConstants.TAG, "cruise end,关闭电子狗");
}
@Override
public void onCruiseStart(BNRGCruiseStart arg0) {
Log.d(BNRemoteConstants.TAG, "cruise start,开启电子狗");
}
路口放大图#
路口放大图主要包括放大图数据、路名、剩余距离等信息。
关键代码#
@Override
public void onEnlargeRoad(BNEnlargeRoad enlargeRoad) {
Log.d(BNRemoteConstants.MODULE_TAG, "onEnlargeRoad......enlargeRoad = " + enlargeRoad);
final BNEnlargeRoad enlargeInfo = enlargeRoad;
mMainHandler.post(new Runnable() {
@Override
public void run() {
handleEnlargeRoad(enlargeInfo);
}
});
}
private void handleEnlargeRoad(BNEnlargeRoad enlargeRoad) {
int enlargeType = enlargeRoad.getEnlargeRoadType();
int enlargeState = enlargeRoad.getEnlargeRoadState();
if (enlargeState == HUDConstants.EnlargeMapState.EXPAND_MAP_STATE_HIDE) {
if (mEnlargeRoadMapView != null) {
mEnlargeRoadMapView.setVisibility(View.GONE);
}
} else {
if (mEnlargeRoadMapView != null) {
if (enlargeState == HUDConstants.EnlargeMapState.EXPAND_MAP_STATE_UPDATE &&
mEnlargeRoadMapView.getVisibility() != View.VISIBLE) {
return;
}
mEnlargeRoadMapView.setVisibility(View.VISIBLE);
}
mEnlargeType = enlargeType;
if (enlargeState == HUDConstants.EnlargeMapState.EXPAND_MAP_STATE_SHOW) {
mbUpdateRasterInfo = false;
} else {
mbUpdateRasterInfo = true;
}
Bitmap basicImage = enlargeRoad.getBasicImage();
Bitmap arrowImage = enlargeRoad.getArrowImage();
String roadName = enlargeRoad.getRoadName();
mTotalDist = enlargeRoad.getTotalDist();
mRemDist = enlargeRoad.getRemainDist();
if (!TextUtils.isEmpty(roadName)) {
mRoadName = roadName;
}
mProgress = 0;
if (mRemDist <= 0 || mTotalDist <= 0) {
mProgress = 100;
} else {
mProgress = (int) (mTotalDist - mRemDist) * 100 / mTotalDist;
}
if (enlargeType == HUDConstants.EnlargeMapType.EXPAND_MAP_VECTOR) {
mCarPosX = enlargeRoad.getCarPosX();
mCarPosY = enlargeRoad.getCarPosY();
mCarRotate = enlargeRoad.getCarPosRotate();
mCarRotate = - mCarRotate;
} else if ( null != mCarPosImgView ) {
mCarPosImgView.setVisibility(View.INVISIBLE);
}
if (enlargeType == HUDConstants.EnlargeMapType.EXPAND_MAP_DEST_STREET_VIEW) {
if ( null != bnav_rg_enlarge_image_mask ) {
bnav_rg_enlarge_image_mask.setVisibility(View.INVISIBLE);
}
}
updateEnlargeRoadView(basicImage, arrowImage);
}
}
private void updateEnlargeRoadView(Bitmap baseicImage, Bitmap arrawImage) {
if (!mbUpdateRasterInfo || mForceRefreshImage ) {
mForceRefreshImage = false;
if (mEnlargeType == HUDConstants.EnlargeMapType.EXPAND_MAP_DIRECT_BOARD) {
updateDirectBoardView(baseicImage, arrawImage);
} else if (mEnlargeType == HUDConstants.EnlargeMapType.EXPAND_MAP_RASTER) {
updateSimpleModelView(baseicImage, arrawImage);
} else if (mEnlargeType == HUDConstants.EnlargeMapType.EXPAND_MAP_VECTOR) {
updateVectorMapView(baseicImage, arrawImage);
} else if (mEnlargeType == HUDConstants.EnlargeMapType.EXPAND_MAP_DEST_STREET_VIEW) {
updateStreetView(baseicImage, arrawImage);
}
}
updateProgress(baseicImage, arrawImage);
}
private void updateProgress(Bitmap baseicImage, Bitmap arrawImage){
// 更新剩余距离和进度条
StringBuffer distance = new StringBuffer();
StringUtils.formatDistance(mRemDist, UnitLangEnum.ZH, distance);
mRemainDistTV.setText(distance.toString());
mProgressBar.setProgress(mProgress);
if (mEnlargeType == HUDConstants.EnlargeMapType.EXPAND_MAP_VECTOR) {
updateVectorMapCarPos(baseicImage, arrawImage);
} else if (mEnlargeType == HUDConstants.EnlargeMapType.EXPAND_MAP_DEST_STREET_VIEW) {
if ( null != mCarPosImgView ) {
mCarPosImgView.setVisibility(View.INVISIBLE);
}
} else if ( null != mCarPosImgView ) {
mCarPosImgView.setVisibility(View.INVISIBLE);
}
}
车点信息#
车点信息主要包括车标当前经纬度、方向和速度。
关键代码#
@Override
public void onCarInfo(BNRGCarInfo arg0) {
// TODO Auto-generated method stub
Log.d(BNRemoteConstants.MODULE_TAG, "onCarInfo...... ");
}
车标自由态#
车标自由态主要是说明当前是否处于野路,即自由态。
关键代码#
@Override
public void onCarFreeStatus(BNRGCarFreeStatus arg0) {
// TODO Auto-generated method stub
Log.d(BNRemoteConstants.MODULE_TAG, "onCarFreeStatus...... ");
}
隧道信息#
隧道信息主要通知当前是否处于隧道中。
关键代码#
@Override
public void onCarTunelInfo(BNRGCarTunelInfo arg0) {
// TODO Auto-generated method stub
Log.d(BNRemoteConstants.MODULE_TAG, "onCarTunelInfo...... ");
}
摄像头信息#
摄像头信息向上通知车点附近所有摄像头信息,包括摄像头经纬度、类型。
关键代码#
@Override
public void onNearByCamera(BNRGNearByCameraInfo arg0) {
// TODO Auto-generated method stub
Log.d(BNRemoteConstants.MODULE_TAG, "onNearByCamera...... ");
}
AR 路线信息#
AR 路线包括路线形状点信息、时间线信息和交规信息。
关键代码#
@Override
public void onRouteInfo(BNRGRouteInfo arg0) {
// TODO Auto-generated method stub
Log.d(BNRemoteConstants.MODULE_TAG, "onRouteInfo...... ");
}
目的地信息#
目的地信息包括目的地经纬度、总距离和图标ID。
关键代码#
@Override
public void onDestInfo(BNRGDestInfo arg0) {
// TODO Auto-generated method stub
Log.d(BNRemoteConstants.MODULE_TAG, "onDestInfo...... ");
}