为什么我集成吊顶 高低差的手机百度地图效果这么差

亲身实测:百度地图和高德地图究竟哪个更好?(组图)
暂时没有论坛热帖信息
开发者社区网站地址:
或分享到:
开发者俱乐部微信在厦门有一个小的O2O圈子,它们从事领域丰富,从运动社区到本地垂直服务乃至情趣电商,因为这样或那样的原因,他们都未走入一线城市。深耕本地化的他们作为O2O从业者的典型代表对各家地图服务更有发言权。在聊天中,巴人发现,他们都在LBS服务上不约而同的选择了百度地图,而其中也有开发者刚刚从其它平台切换至百度,面对这样一边倒的局面,首先声明,他们未受利益驱动,纯属自发行为。我也对此进行了一番探究。首先我想弄个明白一个问题,作为O2O开发者在对地图平台选择时他们到底关心什么,大家的答案,不出以下几点(排名顺序分先后):1、除了地图我还能得到什么?2、数据是否能通用?3、我的数据是否安全?4、我不想跟你了怎么办?5、地图数据精准性。而其中,提到第一点的开发者占到此次采访开发者的60%以上。而地图的精确性反而排到了最后一位,这是怎么回事?来,先夸夸百度地图1、&周边&资源丰富在大多数O2O开发者看来,地图的作用更多可以理解为对&定位&的需求,也就是满足产品中&周边&这一选项的需要。除了打车App这种靠位置而生的产品,大部分O2O产品对位置的精确程度要求其实并不高。而他们更关心的是定位后将得到怎样的结果,而不是位置本身。目前,能够提供这样数据的首选API是,但是对此,开发者则更希望得到一站式服务,一位开发者表示,在他看来百度与其它家地图平台的最大区别就是它能够提供更加全面的O2O数据,运营较好的产品同时还能获得百度的流量,一举多得。而除O2O数据外,百度地图还结合了不久前开放的百度语音平台,一位车联网开发者表示,其产品全线使用的百度地图原因正是在于其不必对接更多语音厂商,百度语音已可以满足他们的使用需求。2、产品迭代速度较快一开发者表示,相较于百度,其它家地图平台产品迭代速度相对较慢,他曾经接入过其它家产品,但由于产品迭代速度太慢,且造成闪退的问题迟迟得不到解决,最终选择转向百度。虽然百度同样保有大公司病,但相对开放的态度使开发者更易与其合作。3、开发者体系相对健全而更吸引开发者的是,百度正推出的开发者孵化计划,一位参与了该计划的开发者表示,一方面,孵化产品可以得到百度地图的更多的接口资源,同时,百度也会对部分开发者提供办公地点乃至资金的支持。而另一位开发者则更加直接的说,非常希望参与开发者计划,原因是参与计划的产品往往能够得到更多流量。同时,在如何与平台沟通方面,一位开发者表示,其它平台往往使用QQ群、邮件、论坛等较老套的沟通方式与开发者对接,这往往造成信息回复速度很慢,问题得不到解决的情况,百度的体系开发者体系则相对健全,其一对一的服务方式,少有出现沟通不畅的情况。4、品牌优势一位正准备接入百度平台的开发者表示,其选择百度地图的原因是主要因为周围及他自己日常经常使用百度地图,在他看来,在二三线城市,百度的品牌价值要高于其它品牌,虽然百度可能在某些数据上并不占优,但&名字&叫得响相对给百度地图带来了不少开发者。有褒有贬才健康夸了半天百度,开发者也有很多苦水想对百度地图说:1、体系过于独立所有开发者均提到的问题是,百度的坐标体系无法与高德、谷歌等其它地图厂商体系打通,其不同的算法,导致了百度地图的API体系相对独立,开发者后续选择空间不多。一位开发者在分享经验是强调,虽然,百度的体系独立,但其内部仍有算法可以将通用数据进行换算,但这一算法仅保留在百度服务器上,开发者很难拿到。这位开发者强调,如果你不要,百度是绝对不会主动将算法给你,这将使得产品在上传数据时会损耗大量流量及相应时间。同时,多数开发者强调,目前,各家地图API进步速度都很快,百度的优势是否能长久延续尚不得而知,未来如果被这一体系绑死,则很难脱身。在这里劝告开发者,选择百度需谨慎。2、数据来源不明正如上文所说,百度拥有大量本地数据,部分开发者表示,数据的来源他们并不在乎,而在此前的采访中得知,百度地图已出现了在&爬&取数据后,出现了消费者投诉权责不明的情况。百度说,我们不是数据提供方,真实数据商则表示,并未授权百度使用其数据。但对于大多数数据提供商来讲,对于百度的行为,他们只能敢怒不敢言。而对于普通开发者来说,数据来源不明一方面容易造成的瑕疵,一旦出现上述投诉情况,双方将很难协调。对此,笔者也同时了解到,虽然现在的确有部分数据是未经授权获得,但百度正在加大自采团队,未来数据将全部由百度自己采集。3、开发者缺乏安全感事实上,承接第一点,大部分开发者仍然对百度的&捆绑&政策心有余悸,一位开发者坦言,其服务器上的数据已备份两份,一份为百度格式,一份为可运行在高德谷歌上的通用格式,同时,他正在向百度申请更多本地算法权限,希望百度能够将算法代码移至其自持服务器上,以最稳妥的保证数据安全。在他看来,虽然百度千般好,但仍不希望被限制在一个平台上。未来不排除和更多地图API合作。最后总的来说,相较于其它平台,百度本身作为一家平台级公司,其数据及流量价值高于竞争对手,但树大招风带来的强势也同样令开发者不安。而抛开百度我们不得不说的是,可供开发者选择的地图API目前仍然不多,但实力也不容小视。目前,地图最近刚刚推出其开放平台,依托船票式的平台给百度带来的压力不可小视。同时,高德在经历转型后正在全力追赶百度地图的API体系,其近期推出的云图则直指百度的Openmap计划,百度能否一直保持优势很难说。总之,开发者的眼睛是雪亮的.....
24小时报不停
吴恩达正式宣布创业成立新公司
谷歌公布AI投资基金,并投资一家算法应用商店
爆料大神首晒iPhone 8真机:全面屏+双玻璃机身
AniSpark国产原创动画星动展在上海展映
摩拜单车拓展海外第5城,进入日本札幌
微软Win 10源代码遭泄露:容量超过32TB
苹果新总部要成景点了,正在招游客中心咖啡馆经理
谷歌将不再扫描用户Gmail内容创建精准定位广告
雅虎关闭新闻应用News Digest
苹果外包公司员工倒卖iPhone用户信息,16人被批捕
《洛杉矶时报》虚报地震,原来是机器人记者搞的鬼
苹果发布声明澄清App下架原因:并非针对中国开发者
巴铁投资方董事长:试验线不是被拆,将移到其他城市
共享雨伞刚进杭州一天就被清理
董明珠怒怼美的空调:一晚一度电不切实际,别上当百度地图集成之 导航
关于这个导航也是困扰了我好长的一段时间的 现在终于整理出来了,来给大家分享一下 其实简单的 ,在百度的API把他的示例dome下载下来就好了
-然后我告诉你要用哪些。
百度的申请账户,申请KEY我就不多说了,直接操作
按照官方的操作先添加权限:
以下都是清单文件的配置:
下面我们在dome中找到我们想要的:
上面的我也没深研究需要的是哪个,大家谁有时间可以研究一下告诉我哈
我们要找到程序入口
点击进去找到vcD4NCsi7uvPU2sDvw+bV0rW9z8LD5rXEPGltZyBhbHQ9"这里写图片描述" src="/uploadfile/Collfiles/4.png" title="\" /> 进到这个类里面的都是我们要的了
import java.util.L
import android.app.A
import android.app.D
import android.content.C
import android.os.B
import android.util.L
import android.view.V
import android.view.W
import android.widget.AdapterV
import android.widget.B
import android.widget.EditT
import android.widget.ListV
import android.widget.TextV
import android.widget.T
import com.baidu.mapapi.map.BaiduM
import com.baidu.mapapi.map.BitmapD
import com.baidu.mapapi.map.BitmapDescriptorF
import com.baidu.W
import com.baidu.mapapi.map.MapP
import com.baidu.mapapi.map.MapStatusUpdateF
import com.baidu.mapapi.map.MapV
import com.baidu.mapapi.model.LatL
import com.baidu.mapapi.search.core.RouteL
import com.baidu.mapapi.search.core.SearchR
import com.baidu.mapapi.search.route.BikingRouteL
import com.baidu.mapapi.search.route.BikingRoutePlanO
import com.baidu.mapapi.search.route.BikingRouteR
import com.baidu.mapapi.search.route.DrivingRouteL
import com.baidu.mapapi.search.route.DrivingRoutePlanO
import com.baidu.mapapi.search.route.DrivingRouteR
import com.baidu.mapapi.search.route.OnGetRoutePlanResultL
import com.baidu.mapapi.search.route.PlanN
import com.baidu.mapapi.search.route.RoutePlanS
import com.baidu.mapapi.search.route.TransitRouteL
import com.baidu.mapapi.search.route.TransitRoutePlanO
import com.baidu.mapapi.search.route.TransitRouteR
import com.baidu.mapapi.search.route.WalkingRouteL
import com.baidu.mapapi.search.route.WalkingRoutePlanO
import com.baidu.mapapi.search.route.WalkingRouteR
* 此demo用来展示如何进行驾车、步行??公交路线搜索并在地图使用RouteOverlay、TransitOverlay绘制
* 同时展示如何进行节点浏览并弹出泡??
public class MainActivity extends Activity implements BaiduMap.OnMapClickListener,OnGetRoutePlanResultListener{
// 浏览路线节点相关
Button mBtnPre = // 上一个节点
Button mBtnNext = // 下一个节点
int nodeIndex = -1; // 节点索引,供浏览节点时使用
RouteLine route =
OverlayManager routeOverlay =
boolean useDefaultIcon =
private TextView popupText = // 泡泡view
// 地图相关,使用继承MapView的MyRouteMapView目的是重写touch事件实现泡泡处理
// 如果不处理touch事件,则无需继承,直接使用MapView即可
MapView mMapView =
// 地图View
BaiduMap mBaidumap =
// 搜索相关
RoutePlanSearch mSearch =
// 搜索模块,也可去掉地图模块独立使用
TransitRouteResult nowResult =
DrivingRouteResult nowResultd
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CharSequence titleLable = &路线规划功能&;
setTitle(titleLable);
// 初始化地图
mMapView = (MapView) findViewById(R.id.map);
mBaidumap = mMapView.getMap();
mBtnPre = (Button) findViewById(R.id.pre);
mBtnNext = (Button) findViewById(R.id.next);
mBtnPre.setVisibility(View.INVISIBLE);
mBtnNext.setVisibility(View.INVISIBLE);
// 地图点击事件处理
mBaidumap.setOnMapClickListener(this);
// 初始化搜索模块,注册事件监听
mSearch = RoutePlanSearch.newInstance();
mSearch.setOnGetRoutePlanResultListener(this);
* 发起路线规划搜索示例
* @param v
public void searchButtonProcess(View v) {
// 重置浏览节点的路线数据
mBtnPre.setVisibility(View.INVISIBLE);
mBtnNext.setVisibility(View.INVISIBLE);
mBaidumap.clear();
// 处理搜索按钮响应
EditText editSt = (EditText) findViewById(R.id.start);
EditText editEn = (EditText) findViewById(R.id.end);
// 设置起终点信息,对于tranist search 来说,城市名无意义
PlanNode stNode = PlanNode.withCityNameAndPlaceName(&北京&, editSt.getText().toString());
PlanNode enNode = PlanNode.withCityNameAndPlaceName(&北京&, editEn.getText().toString());
// 实际使用中请对起点终点城市进行正确的设定
if (v.getId() == R.id.drive) {
mSearch.drivingSearch((new DrivingRoutePlanOption())
.from(stNode).to(enNode));
} else if (v.getId() == R.id.transit) {
mSearch.transitSearch((new TransitRoutePlanOption())
.from(stNode).city(&北京&).to(enNode));
} else if (v.getId() == R.id.walk) {
mSearch.walkingSearch((new WalkingRoutePlanOption())
.from(stNode).to(enNode));
} else if (v.getId() == R.id.bike) {
mSearch.bikingSearch((new BikingRoutePlanOption())
.from(stNode).to(enNode));
* 节点浏览示例
* @param v
public void nodeClick(View v) {
if (route == null || route.getAllStep() == null) {
if (nodeIndex == -1 && v.getId() == R.id.pre) {
// 设置节点索引
if (v.getId() == R.id.next) {
if (nodeIndex & route.getAllStep().size() - 1) {
nodeIndex++;
} else if (v.getId() == R.id.pre) {
if (nodeIndex & 0) {
nodeIndex--;
// 获取节结果信息
LatLng nodeLocation =
String nodeTitle =
Object step = route.getAllStep().get(nodeIndex);
if (step instanceof DrivingRouteLine.DrivingStep) {
nodeLocation = ((DrivingRouteLine.DrivingStep) step).getEntrance().getLocation();
nodeTitle = ((DrivingRouteLine.DrivingStep) step).getInstructions();
} else if (step instanceof WalkingRouteLine.WalkingStep) {
nodeLocation = ((WalkingRouteLine.WalkingStep) step).getEntrance().getLocation();
nodeTitle = ((WalkingRouteLine.WalkingStep) step).getInstructions();
} else if (step instanceof TransitRouteLine.TransitStep) {
nodeLocation = ((TransitRouteLine.TransitStep) step).getEntrance().getLocation();
nodeTitle = ((TransitRouteLine.TransitStep) step).getInstructions();
} else if (step instanceof BikingRouteLine.BikingStep) {
nodeLocation = ((BikingRouteLine.BikingStep) step).getEntrance().getLocation();
nodeTitle = ((BikingRouteLine.BikingStep) step).getInstructions();
if (nodeLocation == null || nodeTitle == null) {
// 移动节点至中心
mBaidumap.setMapStatus(MapStatusUpdateFactory.newLatLng(nodeLocation));
// show popup
popupText = new TextView(MainActivity.this);
popupText.setBackgroundResource(R.drawable.popup);
popupText.setTextColor(0xFF000000);
popupText.setText(nodeTitle);
mBaidumap.showInfoWindow(new InfoWindow(popupText, nodeLocation, 0));
* 切换路线图标,刷新地图使其生效
* 注意: 起终点图标使用中心对齐.
public void changeRouteIcon(View v) {
if (routeOverlay == null) {
if (useDefaultIcon) {
((Button) v).setText(&自定义起终点图标&);
Toast.makeText(this,
&将使用起终点图标&,
Toast.LENGTH_SHORT).show();
((Button) v).setText(&系统起终点图标&);
Toast.makeText(this,
&将使用自定义起终点图标&,
Toast.LENGTH_SHORT).show();
useDefaultIcon = !useDefaultI
routeOverlay.removeFromMap();
routeOverlay.addToMap();
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
public void onGetWalkingRouteResult(WalkingRouteResult result) {
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(MainActivity.this, &抱歉,未找到结果&, Toast.LENGTH_SHORT).show();
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
// 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
// result.getSuggestAddrInfo()
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
nodeIndex = -1;
mBtnPre.setVisibility(View.VISIBLE);
mBtnNext.setVisibility(View.VISIBLE);
route = result.getRouteLines().get(0);
WalkingRouteOverlay overlay = new MyWalkingRouteOverlay(mBaidumap);
mBaidumap.setOnMarkerClickListener(overlay);
routeOverlay =
overlay.setData(result.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
public void onGetTransitRouteResult(TransitRouteResult result) {
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(MainActivity.this, &抱歉,未找到结果&, Toast.LENGTH_SHORT).show();
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
// 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
// result.getSuggestAddrInfo()
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
nodeIndex = -1;
if (result.getRouteLines().size() & 1 ) {
nowResult =
MyTransitDlg myTransitDlg = new MyTransitDlg(MainActivity.this,
result.getRouteLines(),
RouteLineAdapter.Type.TRANSIT_ROUTE);
myTransitDlg.setOnItemInDlgClickLinster(new OnItemInDlgClickListener() {
public void onItemClick(int position) {
route = nowResult.getRouteLines().get(position);
TransitRouteOverlay overlay = new MyTransitRouteOverlay(mBaidumap);
mBaidumap.setOnMarkerClickListener(overlay);
routeOverlay =
overlay.setData(nowResult.getRouteLines().get(position));
overlay.addToMap();
overlay.zoomToSpan();
myTransitDlg.show();
} else if ( result.getRouteLines().size() == 1 ) {
// 直接显示
route = result.getRouteLines().get(0);
TransitRouteOverlay overlay = new MyTransitRouteOverlay(mBaidumap);
mBaidumap.setOnMarkerClickListener(overlay);
routeOverlay =
overlay.setData(result.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
mBtnPre.setVisibility(View.VISIBLE);
mBtnNext.setVisibility(View.VISIBLE);
Log.d(&transitresult&, &结果数&0& );
public void onGetDrivingRouteResult(DrivingRouteResult result) {
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(MainActivity.this, &抱歉,未找到结果&, Toast.LENGTH_SHORT).show();
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
// 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
// result.getSuggestAddrInfo()
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
nodeIndex = -1;
mBtnPre.setVisibility(View.VISIBLE);
mBtnNext.setVisibility(View.VISIBLE);
if (result.getRouteLines().size() & 1 ) {
nowResultd =
MyTransitDlg myTransitDlg = new MyTransitDlg(MainActivity.this,
result.getRouteLines(),
RouteLineAdapter.Type.DRIVING_ROUTE);
myTransitDlg.setOnItemInDlgClickLinster(new OnItemInDlgClickListener() {
public void onItemClick(int position) {
route = nowResultd.getRouteLines().get(position);
DrivingRouteOverlay overlay = new MyDrivingRouteOverlay(mBaidumap);
mBaidumap.setOnMarkerClickListener(overlay);
routeOverlay =
overlay.setData(nowResultd.getRouteLines().get(position));
overlay.addToMap();
overlay.zoomToSpan();
myTransitDlg.show();
} else if ( result.getRouteLines().size() == 1 ) {
route = result.getRouteLines().get(0);
DrivingRouteOverlay overlay = new MyDrivingRouteOverlay(mBaidumap);
routeOverlay =
mBaidumap.setOnMarkerClickListener(overlay);
overlay.setData(result.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {
if (bikingRouteResult == null || bikingRouteResult.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(MainActivity.this, &抱歉,未找到结果&, Toast.LENGTH_SHORT).show();
if (bikingRouteResult.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
// 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
// result.getSuggestAddrInfo()
if (bikingRouteResult.error == SearchResult.ERRORNO.NO_ERROR) {
nodeIndex = -1;
mBtnPre.setVisibility(View.VISIBLE);
mBtnNext.setVisibility(View.VISIBLE);
route = bikingRouteResult.getRouteLines().get(0);
BikingRouteOverlay overlay = new MyBikingRouteOverlay(mBaidumap);
routeOverlay =
mBaidumap.setOnMarkerClickListener(overlay);
overlay.setData(bikingRouteResult.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
// 定制RouteOverly
private class MyDrivingRouteOverlay extends DrivingRouteOverlay {
public MyDrivingRouteOverlay(BaiduMap baiduMap) {
super(baiduMap);
public BitmapDescriptor getStartMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);
public BitmapDescriptor getTerminalMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);
private class MyWalkingRouteOverlay extends WalkingRouteOverlay {
public MyWalkingRouteOverlay(BaiduMap baiduMap) {
super(baiduMap);
public BitmapDescriptor getStartMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);
public BitmapDescriptor getTerminalMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);
private class MyTransitRouteOverlay extends TransitRouteOverlay {
public MyTransitRouteOverlay(BaiduMap baiduMap) {
super(baiduMap);
public BitmapDescriptor getStartMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);
public BitmapDescriptor getTerminalMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);
private class MyBikingRouteOverlay extends BikingRouteOverlay {
MyBikingRouteOverlay(BaiduMap baiduMap) {
super(baiduMap);
public BitmapDescriptor getStartMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);
public BitmapDescriptor getTerminalMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);
public void onMapClick(LatLng point) {
mBaidumap.hideInfoWindow();
public boolean onMapPoiClick(MapPoi poi) {
protected void onPause() {
mMapView.onPause();
super.onPause();
protected void onResume() {
mMapView.onResume();
super.onResume();
protected void onDestroy() {
mSearch.destroy();
mMapView.onDestroy();
super.onDestroy();
// 响应DLg中的List item 点击
interface OnItemInDlgClickListener {
public void onItemClick( int position);
// 供路线选择的Dialog
class MyTransitDlg extends Dialog {
private List mtransitRouteL
private ListView transitRouteL
private RouteLineAdapter mTransitA
OnItemInDlgClickListener onItemInDlgClickL
public MyTransitDlg(Context context, int theme) {
super(context, theme);
public MyTransitDlg(Context context, List& ? extends RouteLine& transitRouteLines, RouteLineAdapter.Type
this( context, 0);
mtransitRouteLines = transitRouteL
mTransitAdapter = new RouteLineAdapter( context, mtransitRouteLines , type);
requestWindowFeature(Window.FEATURE_NO_TITLE);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_transit_dialog);
transitRouteList = (ListView) findViewById(R.id.transitList);
transitRouteList.setAdapter(mTransitAdapter);
transitRouteList.setOnItemClickListener( new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView parent, View view, int position, long id) {
onItemInDlgClickListener.onItemClick( position);
dismiss();
public void setOnItemInDlgClickLinster( OnItemInDlgClickListener itemListener) {
onItemInDlgClickListener = itemL
找到上面的类我们就好办了,还有一些和他有关联的代码我就不一一写出来了 告诉你们需要哪个类吧
除了main以外其他的都是了 我也是找了好久的
记得要建Application
public class MyApplication extends Application {
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext
SDKInitializer.initialize(this);
上面的是很重要的,记得在清单文件配置
忘了xml文件了 main的xml
还有两个我把名字写出来你们自己找吧
由于网络原因 效果图有时间在传 ,请见谅!

我要回帖

更多关于 手机录音效果差 的文章

 

随机推荐