Update README.md

加入了参考文档以及水印
This commit is contained in:
MADAO LUV
2025-05-12 22:39:25 +08:00
committed by MADAO-LUV
parent d2be63ea08
commit f433dc4bb6
8 changed files with 304 additions and 155 deletions

View File

@@ -1,2 +1,19 @@
# ManGoWalk # ManGoWalk --- 智能盲杖导航系统
用于存放我自己的app项目 ## Anime 水印 --- 《谜之彼女X》 卜部美琴
![卜部美琴](https://picx.zhimg.com/50/v2-ce3ffbff0aab1f12ff55a1625d9188a2_720w.jpg?source=1940ef5c)
# 主要参考文档:
## 参考文档1:
高德开发平台-[导航SDK文档](https://lbs.amap.com/api/android-navi-sdk/summary/)
## 参考文档2:
高德地图开发文章---[CSND 初学者博主](https://blog.csdn.net/qq_38436214/article/details/111628025?spm=1001.2014.3001.5506)

View File

@@ -22,4 +22,15 @@
-keep class com.amap.api.navi.**{*;} -keep class com.amap.api.navi.**{*;}
-keep class com.alibaba.idst.nui.* {*;} -keep class com.alibaba.idst.nui.* {*;}
-keep class com.google.**{*;}
-keep class com.alibaba.idst.nls.** {*;}
#-keep class com.google.**{*;}
-keep class com.nlspeech.nlscodec.** {*;}
-keep public class com.alibaba.mit.alitts.*{*;}
-keep class com.google.**{*;} -keep class com.google.**{*;}

View File

@@ -13,7 +13,7 @@
"attributes": [], "attributes": [],
"versionCode": 1, "versionCode": 1,
"versionName": "1.0", "versionName": "1.0",
"outputFile": "ManGoWalk_v1.0_2025_04_17_19_59_18.apk" "outputFile": "ManGoWalk_v1.0_2025_05_13_14_36_52.apk"
} }
], ],
"elementType": "File", "elementType": "File",
@@ -22,14 +22,14 @@
"minApi": 28, "minApi": 28,
"maxApi": 30, "maxApi": 30,
"baselineProfiles": [ "baselineProfiles": [
"baselineProfiles/1/ManGoWalk_v1.0_2025_04_17_19_59_18.dm" "baselineProfiles/1/ManGoWalk_v1.0_2025_05_13_14_36_52.dm"
] ]
}, },
{ {
"minApi": 31, "minApi": 31,
"maxApi": 2147483647, "maxApi": 2147483647,
"baselineProfiles": [ "baselineProfiles": [
"baselineProfiles/0/ManGoWalk_v1.0_2025_04_17_19_59_18.dm" "baselineProfiles/0/ManGoWalk_v1.0_2025_05_13_14_36_52.dm"
] ]
} }
], ],

View File

@@ -24,6 +24,19 @@
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" /> <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<!--允许获取网络状态用于网络定位无gps情况下的定位若需网络定位功能则必选-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--允许获取wifi网络信息用于网络定位无gps情况下的定位若需网络定位功能则必选-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--用于用户链接蓝牙时在导航组件页面的蓝牙连接提醒建立链接后开发者可选用蓝牙通道进行tts播报-->
<!--用与导航状态中保持屏幕常亮-->
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-feature <uses-feature

View File

@@ -1,6 +1,7 @@
package com.example.mangowalking; package com.example.mangowalking;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
@@ -63,7 +64,9 @@ public class GuideMap extends AppCompatActivity implements AMapNaviListener, AMa
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_guide_map);
mNaviView = findViewById(R.id.naviView);
mNaviView.onCreate(savedInstanceState);
// 获取传入的终点经纬度 // 获取传入的终点经纬度
Intent intent = getIntent(); Intent intent = getIntent();
endLat = intent.getDoubleExtra("end_lat", 0); endLat = intent.getDoubleExtra("end_lat", 0);
@@ -75,138 +78,252 @@ public class GuideMap extends AppCompatActivity implements AMapNaviListener, AMa
Toast.makeText(this, "终点坐标可能异常", Toast.LENGTH_LONG).show(); Toast.makeText(this, "终点坐标可能异常", Toast.LENGTH_LONG).show();
} }
end = new NaviLatLng(endLat,endLon); end = new NaviLatLng(endLat,endLon);
startNaviToDestination(currentNaviType); navigation(this,0,0,endLat,endLon);
//
// mNaviView = findViewById(R.id.naviView);
// mNaviView.onCreate(savedInstanceState);
//
// mTtsManager = TTSController.getInstance(getApplicationContext());
// mTtsManager.init();
// mTtsManager.setTTSType(TTSController.TTSType.SYSTEMTTS);
// try {
// AMapNavi.getInstance(this).calculateWalkRoute(null,end);
// } catch (AMapException e) {
// throw new RuntimeException(e);
// }
try { try {
AMapNavi.getInstance(this).calculateWalkRoute(end); AMapNavi.getInstance(getApplicationContext()).addAMapNaviListener(new AMapNaviListener() {
mAMapNavi = AMapNavi.getInstance(getApplicationContext()); @Override
mAMapNavi.setUseInnerVoice(true,false); public void onInitNaviFailure() {
AMapNavi.setTtsPlaying(true);
}
@Override
public void onInitNaviSuccess() {
}
@Override
public void onStartNavi(int i) {
}
@Override
public void onTrafficStatusUpdate() {
}
@Override
public void onLocationChange(AMapNaviLocation aMapNaviLocation) {
}
@Override
public void onGetNavigationText(int i, String s) {
}
@Override
public void onGetNavigationText(String s) {
}
@Override
public void onEndEmulatorNavi() {
}
@Override
public void onArriveDestination() {
}
@Override
public void onCalculateRouteFailure(int i) {
}
@Override
public void onReCalculateRouteForYaw() {
}
@Override
public void onReCalculateRouteForTrafficJam() {
}
@Override
public void onArrivedWayPoint(int i) {
}
@Override
public void onGpsOpenStatus(boolean b) {
}
@Override
public void onNaviInfoUpdate(NaviInfo naviInfo) {
}
@Override
public void updateCameraInfo(AMapNaviCameraInfo[] aMapNaviCameraInfos) {
}
@Override
public void updateIntervalCameraInfo(AMapNaviCameraInfo aMapNaviCameraInfo, AMapNaviCameraInfo aMapNaviCameraInfo1, int i) {
}
@Override
public void onServiceAreaUpdate(AMapServiceAreaInfo[] aMapServiceAreaInfos) {
}
@Override
public void showCross(AMapNaviCross aMapNaviCross) {
}
@Override
public void hideCross() {
}
@Override
public void showModeCross(AMapModelCross aMapModelCross) {
}
@Override
public void hideModeCross() {
}
@Override
public void showLaneInfo(AMapLaneInfo[] aMapLaneInfos, byte[] bytes, byte[] bytes1) {
}
@Override
public void showLaneInfo(AMapLaneInfo aMapLaneInfo) {
}
@Override
public void hideLaneInfo() {
}
@Override
public void onCalculateRouteSuccess(int[] ints) {
}
@Override
public void notifyParallelRoad(int i) {
}
@Override
public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) {
}
@Override
public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) {
}
@Override
public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {
}
@Override
public void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) {
}
@Override
public void onPlayRing(int i) {
}
@Override
public void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) {
}
@Override
public void onCalculateRouteFailure(AMapCalcRouteResult aMapCalcRouteResult) {
}
@Override
public void onNaviRouteNotify(AMapNaviRouteNotifyData aMapNaviRouteNotifyData) {
}
@Override
public void onGpsSignalWeak(boolean b) {
}
});
} catch (AMapException e) { } catch (AMapException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
mAMapNavi.addAMapNaviListener(mTtsManager); // mNaviView.setAMapNaviViewListener(new AMapNaviViewListener() {
mAMapNavi.playTTS("主人你好呀", false);
// mAMapNavi.startNavi(NaviType.EMULATOR);
//以上为新添加的 不知道怎么处理
// try {
// mAMapNavi = AMapNavi.getInstance(getApplicationContext());
// } catch (AMapException e) {
// throw new RuntimeException(e);
// }
// mAMapNavi.addAMapNaviListener(this);
// mAMapNavi.addAMapNaviListener(mTtsManager);
//
// // 🚩 设置为骑/步行视图(重要)
// mAMapNavi.setIsNaviTravelView(true);
//
// // 🚶 步行路线规划(起点为空)——无起点规划
// NaviLatLng end = new NaviLatLng(endLat, endLon);
// mAMapNavi.calculateWalkRoute(end); // 或 mAMapNavi.calculateRideRoute(end);
//
// // 初始化界面控件
// tvRouteInfo = findViewById(R.id.tvRouteInfo);
// btnStartNavi = findViewById(R.id.btnStartNavi);
// btnSwitchMode = findViewById(R.id.btnSwitchMode);
// // 切换模式按钮
// btnSwitchMode.setOnClickListener(new View.OnClickListener() {
// @Override // @Override
// public void onClick(View view) { // public void onNaviSetting() {
// if (currentNaviType == AmapNaviType.WALK) {
// currentNaviType = AmapNaviType.DRIVER;
// } else {
// currentNaviType = AmapNaviType.WALK;
// }
// updateRouteInfoText();
// }
// });
// //
// // 开始导航按钮
// btnStartNavi.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View view) {
// startNaviToDestination(currentNaviType);
// } // }
//
// @Override
// public void onNaviCancel() {
//
// }
//
// @Override
// public boolean onNaviBackClick() {
// return false;
// }
//
// @Override
// public void onNaviMapMode(int i) {
//
// }
//
// @Override
// public void onNaviTurnClick() {
//
// }
//
// @Override
// public void onNextRoadClick() {
//
// }
//
// @Override
// public void onScanViewButtonClick() {
//
// }
//
// @Override
// public void onLockMap(boolean b) {
//
// }
//
// @Override
// public void onNaviViewLoaded() {
// Log.d("wlx","导航页面加载成功");
// Log.d("wlx","请不要使用AMapNaviView.getMap().setOnMapLoadedListener();会overwrite导航SDK内部画线逻辑");
// }
//
// @Override
// public void onMapTypeChanged(int i) {
//
// }
//
// @Override
// public void onNaviViewShowMode(int i) {
//
// }
// // 处理导航视图事件...
// }); // });
mNaviView.setAMapNaviViewListener(new AMapNaviViewListener() {
@Override
public void onNaviSetting() {
}
@Override
public void onNaviCancel() {
}
@Override
public boolean onNaviBackClick() {
return false;
}
@Override
public void onNaviMapMode(int i) {
}
@Override
public void onNaviTurnClick() {
}
@Override
public void onNextRoadClick() {
}
@Override
public void onScanViewButtonClick() {
}
@Override
public void onLockMap(boolean b) {
}
@Override
public void onNaviViewLoaded() {
Log.d("wlx","导航页面加载成功");
Log.d("wlx","请不要使用AMapNaviView.getMap().setOnMapLoadedListener();会overwrite导航SDK内部画线逻辑");
}
@Override
public void onMapTypeChanged(int i) {
}
@Override
public void onNaviViewShowMode(int i) {
}
// 处理导航视图事件...
});
// 3. 添加途经点(可选)
// mWayPoints.add(new NaviLatLng(39.993706, 116.400865));
//初始化定位
// initLocation();
// mNaviView.setNaviMode(mNaviView.NORTH_UP_MODE);
} }
@Override @Override
public void onNaviSetting() { public void onNaviSetting() {
@@ -287,26 +404,6 @@ public class GuideMap extends AppCompatActivity implements AMapNaviListener, AMa
// 初始化定位配置
private void initLocation() {
try {
mapLocationClient = new AMapLocationClient(getApplicationContext());
mLocationOption = new AMapLocationClientOption();
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
mLocationOption.setInterval(2000);
mapLocationClient.setLocationListener((AMapLocationListener) this);
mapLocationClient.setLocationOption(mLocationOption);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private void updateRouteInfoText() {
String modeText = currentNaviType == AmapNaviType.WALK ? "步行模式" : "公交模式";
tvRouteInfo.setText("当前导航模式:" + modeText);
}
private void startNaviToDestination(AmapNaviType naviType) { private void startNaviToDestination(AmapNaviType naviType) {
Poi end = new Poi("目的地", new LatLng(endLat, endLon), null); Poi end = new Poi("目的地", new LatLng(endLat, endLon), null);
AmapNaviParams params = new AmapNaviParams(null, null, end, naviType, AmapPageType.ROUTE); AmapNaviParams params = new AmapNaviParams(null, null, end, naviType, AmapPageType.ROUTE);
@@ -315,8 +412,22 @@ public class GuideMap extends AppCompatActivity implements AMapNaviListener, AMa
} }
public void navigation(Context context,double slat,double slon,double dlat,double dlon)
{
Poi start = null;
//如果设置了起点
if(slat != 0 && slon != 0)
{
start = new Poi("起点名称",new LatLng(slat,slon),"");
}
Poi end = new Poi("目的地",new LatLng(dlat,dlon),"");
AmapNaviParams params = new AmapNaviParams(start, null, end, AmapNaviType.WALK,AmapPageType.NAVI);
params.setUseInnerVoice(true);
params.setNeedCalculateRouteWhenPresent(true);
//发起导航
AmapNaviPage.getInstance().showRouteActivity(getApplicationContext(), params, null);
}
@Override @Override
@@ -350,6 +461,7 @@ public class GuideMap extends AppCompatActivity implements AMapNaviListener, AMa
{ {
// mAMapNavi.removeAMapNaviListener(mTtsManager); // mAMapNavi.removeAMapNaviListener(mTtsManager);
mAMapNavi.stopNavi(); mAMapNavi.stopNavi();
mAMapNavi.notify();
} }
mNaviView.onDestroy(); mNaviView.onDestroy();
} }
@@ -519,12 +631,8 @@ public class GuideMap extends AppCompatActivity implements AMapNaviListener, AMa
@Override @Override
public void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) { public void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) {
try { mAMapNavi.startNavi(NaviType.GPS);
AMapNavi.getInstance(this).startNavi(NaviType.GPS); mAMapNavi.playTTS("主人你好呀", false);
AMapNavi.getInstance(this.getApplicationContext()).setIsNaviTravelView(true);
} catch (AMapException e) {
throw new RuntimeException(e);
}
} }
@Override @Override