android 百度地图系列之地图初始化及定位

在Android应用中,很多时候需要地图功能,回顾过去写的项目和百度地图api,开始总结一下Android百度地图的实现。首先总结一下怎么开始一个Android百度地图功能。

当使用百度地图的时候,提到一个appkey。“在使用百度地图SDK为您提供的各种LBS能力之前,您需要获取百度地图移动版的开发密钥,该密钥与您的百度账户相关联。因此,您必须先有百度帐户,才能获得开发密钥。并且,该密钥与您创建的过程名称有关。Key地址为:http://lbsyun.baidu.com/apiconsole/key

这是百度地图api给的定义。总之,一个项目包名和sha1对应一个appkey。首先注册百度账号,根据教程一步步创建appkey。

当有了appkey,我们就能开一部署一个android百度地图环境。首先在百度api的相关下载中,将需要的功能勾选上,并下载相关的开发包,示例代码等。将开发包导入项目libs文件夹下。然后,开始部署AndroidMinifest.xml,添加权限,添加appkey,定位的service。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="自己的包名"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="21" />
    <!-- 百度地图权限 -->
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <!-- 这个权限用于进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!-- 这个权限用于访问GPS定位 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 用于读取手机当前的状态 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 访问网络,网络定位需要上网 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="申请的appkey" />
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
        </service>
    </application>
</manifest>

下一步就是在activity_main.xml中添加布局文件。本片文章还有自定义的放大缩小,定位等功能。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <com.baidu.mapapi.map.MapView
        android:id="@+id/bmapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true" />
    <ImageButton
        android:id="@+id/ib_small"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:background="@drawable/small"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginRight="10dp"
        android:layout_marginBottom="60dp"/>

    <ImageButton
        android:id="@+id/ib_large"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_above="@+id/ib_small"
        android:layout_alignLeft="@+id/ib_small"
        android:background="@drawable/large" />

    <ImageButton
        android:id="@+id/ib_mode"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_above="@+id/ib_large"
        android:layout_alignLeft="@+id/ib_large"
        android:layout_marginBottom="12dp"
        android:background="@drawable/mode" />
    <ImageButton
        android:id="@+id/ib_traffic"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_above="@+id/ib_loc"
        android:layout_alignLeft="@+id/ib_loc"
        android:layout_marginBottom="12dp"
        android:background="@drawable/offtraffic" />
    <ImageButton
        android:id="@+id/ib_loc"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_alignParentLeft="true"
        android:layout_alignTop="@+id/ib_small"
        android:layout_marginLeft="10dp"
        android:background="@drawable/loc" />
</RelativeLayout>

显示效果图:

下面开始具体的代码实现

当前程序有三个功能:显示地图,显示定位,实现按钮控制。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext
        //注意该方法要再setContentView方法之前实现
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        //初始化控件
        initView();
        //初始化地图
        initMap();
        //定位
        initLocation();
    }

一。显示基本地图

初始化地图显示,将地图在手机上显示出来

//获取地图控件引用
mMapView = (MapView) findViewById(R.id.bmapView);
// 不显示缩放比例尺
mMapView.showZoomControls(false);
// 不显示百度地图Logo
mMapView.removeViewAt(1);
//百度地图
mBaiduMap = mMapView.getMap();
// 改变地图状态,使地图显示在恰当的缩放大小
MapStatus mMapStatus = new MapStatus.Builder().zoom(15).build();
MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
mBaiduMap.setMapStatus(mMapStatusUpdate);

二。地图的控制按钮:缩放按钮,切换模式按钮,开启实时交通图

1.在地图初始化显示时,我将自带的缩放比例尺去掉了,需要自定义一个缩放按钮。

我们一般显示将地图显示在5-18级别中,所以在点击事件中对按钮进行了控制。

case R.id.ib_large:
if (zoomLevel < 18) {
    mBaiduMap.setMapStatus(MapStatusUpdateFactory.zoomIn());
    ib_small.setEnabled(true);
} else {
    showInfo("已经放至最大,可继续滑动操作");
    ib_large.setEnabled(false);
}
break;
case R.id.ib_small:
if (zoomLevel > 6) {
    mBaiduMap.setMapStatus(MapStatusUpdateFactory.zoomOut());
    ib_large.setEnabled(true);
} else {
    ib_small.setEnabled(false);
    showInfo("已经缩至最小,可继续滑动操作");
}
break;

zoomlevel是一个全局变量,这时候就需要实时监控地图的缩放级别是多少,需要给地图添加一个地图状态改变的监听事件

//设置地图状态改变监听器
mBaiduMap.setOnMapStatusChangeListener(new OnMapStatusChangeListener() {
@Override
public void onMapStatusChangeStart(MapStatus arg0) {
}
@Override
public void onMapStatusChangeFinish(MapStatus arg0) {
}
@Override
public void onMapStatusChange(MapStatus arg0) {
    //当地图状态改变的时候,获取放大级别
    zoomLevel = arg0.zoom;
}
});

2.切换显示模式和实时交通图

boolean modeFlag = true;//设置初始时是普通模式
case R.id.ib_mode://卫星模式和普通模式
if(modeFlag){
    modeFlag = false;
    mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
    showInfo("开启卫星模式");
}else{
    modeFlag = true;
    mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
    showInfo("开启普通模式");
}
break;
case R.id.ib_traffic://是否开启交通图
if(mBaiduMap.isTrafficEnabled()){//判断是否开启了交通图
    mBaiduMap.setTrafficEnabled(false);
    ib_traffic.setBackgroundResource(R.drawable.offtraffic);
    showInfo("关闭实时交通图");
}else{
    mBaiduMap.setTrafficEnabled(true);
    ib_traffic.setBackgroundResource(R.drawable.ontraffic);
    showInfo("开启实时交通图");
}
break;

三。定位自己

定位自己的思路是:当程序启动的时候,开启定位图层,开始定位,收到位置信息后将自己的位置显示在地图中间,当地图离开自己的位置时,点击定位自己的图标将地图重新显示自己的位置。

首先,开启定位图层,开始定位。

@Override
protected void onStart() {
    super.onStart();
    //开启定位
    mBaiduMap.setMyLocationEnabled(true);
    if(!mLocationClient.isStarted()){//如果定位client没有开启,开启定位
        mLocationClient.start();
    }
}
private void initLocation() {
    //定位客户端的设置
    mLocationClient = new LocationClient(this);
    mLocationListener = new MyLocationListener();
    //注册监听
    mLocationClient.registerLocationListener(mLocationListener);
    //配置定位
    LocationClientOption option = new LocationClientOption();
    option.setCoorType("bd09ll");//坐标类型
    option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
    option.setOpenGps(true);//打开Gps
    option.setScanSpan(1000);//1000毫秒定位一次
    option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
    mLocationClient.setLocOption(option);
}
//自定义的定位监听
private class MyLocationListener implements BDLocationListener{
    @Override
    public void onReceiveLocation(BDLocation location) {
        //将获取的location信息给百度map
        MyLocationData data = new MyLocationData.Builder()
                .accuracy(location.getRadius())
                // 此处设置开发者获取到的方向信息,顺时针0-360
                .direction(100)
                .latitude(location.getLatitude())
                .longitude(location.getLongitude())
                .build();
        mBaiduMap.setMyLocationData(data);
        if(isFirstLocation){
            //获取经纬度
            LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());
            MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(ll);
            //mBaiduMap.setMapStatus(status);//直接到中间
            mBaiduMap.animateMapStatus(status);//动画的方式到中间
            isFirstLocation = false;
            showInfo("位置:" + location.getAddrStr());
        }
    }
}

注意,设置isFirstLocation=true,这样我们就只是开始的时候定位自己,并显示在地图中间,不会每一秒都跳一次。在我门需要定位的时候,将isFirstLocation重新设置成true就行。

case R.id.ib_loc:
    isFirstLocation = true;
    showInfo("返回自己位置");
    break;

不要忘记在活动结束的时候,将定位取消

@Override
protected void onStop() {
    super.onStop();
    //关闭定位
    mBaiduMap.setMyLocationEnabled(false);
    if(mLocationClient.isStarted()){
        mLocationClient.stop();
    }
}

然后运行程序,发现一个带有定位功能,并能部分控制地图显示的app出来了,下面是MainActivity的源码

package 包名;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMapStatusChangeListener;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.Toast;

/**
 * 我的百度地图首页
 * @author jing__jie
 *
 */
public class MainActivity extends Activity implements OnClickListener {
    private MapView mMapView = null;
    private BaiduMap mBaiduMap;
    private ImageButton ib_large,ib_small,ib_mode,ib_loc,ib_traffic;
    //模式切换,正常模式
    private boolean modeFlag = true;
    //当前地图缩放级别
    private float zoomLevel;
    //定位相关
    private LocationClient mLocationClient;
    private MyLocationListener mLocationListener;
    //是否第一次定位,如果是第一次定位的话要将自己的位置显示在地图 中间
    private boolean isFirstLocation = true;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext
        //注意该方法要再setContentView方法之前实现
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        //初始化控件
        initView();
        //初始化地图
        initMap();
        //定位
        initLocation();
    }
    private void initMap() {
        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.bmapView);
        // 不显示缩放比例尺
        mMapView.showZoomControls(false);
        // 不显示百度地图Logo
        mMapView.removeViewAt(1);
        //百度地图
        mBaiduMap = mMapView.getMap();
        // 改变地图状态
        MapStatus mMapStatus = new MapStatus.Builder().zoom(15).build();
        MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
        mBaiduMap.setMapStatus(mMapStatusUpdate);
        //设置地图状态改变监听器
        mBaiduMap.setOnMapStatusChangeListener(new OnMapStatusChangeListener() {
            @Override
            public void onMapStatusChangeStart(MapStatus arg0) {
            }
            @Override
            public void onMapStatusChangeFinish(MapStatus arg0) {
            }
            @Override
            public void onMapStatusChange(MapStatus arg0) {
                //当地图状态改变的时候,获取放大级别
                zoomLevel = arg0.zoom;
            }
        });
    }
    private void initLocation() {
        //定位客户端的设置
        mLocationClient = new LocationClient(this);
        mLocationListener = new MyLocationListener();
        //注册监听
        mLocationClient.registerLocationListener(mLocationListener);
        //配置定位
        LocationClientOption option = new LocationClientOption();
        option.setCoorType("bd09ll");//坐标类型
        option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
        option.setOpenGps(true);//打开Gps
        option.setScanSpan(1000);//1000毫秒定位一次
        option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
        mLocationClient.setLocOption(option);
    }
    private void initView() {
        //地图控制按钮
        ib_large = (ImageButton)findViewById(R.id.ib_large);
        ib_large.setOnClickListener(this);
        ib_small = (ImageButton)findViewById(R.id.ib_small);
        ib_small.setOnClickListener(this);
        ib_mode = (ImageButton)findViewById(R.id.ib_mode);
        ib_mode.setOnClickListener(this);
        ib_loc = (ImageButton)findViewById(R.id.ib_loc);
        ib_loc.setOnClickListener(this);
        ib_traffic = (ImageButton)findViewById(R.id.ib_traffic);
        ib_traffic.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.ib_large:
            if (zoomLevel < 18) {
                mBaiduMap.setMapStatus(MapStatusUpdateFactory.zoomIn());
                ib_small.setEnabled(true);
            } else {
                showInfo("已经放至最大,可继续滑动操作");
                ib_large.setEnabled(false);
            }
            break;
        case R.id.ib_small:
            if (zoomLevel > 6) {
                mBaiduMap.setMapStatus(MapStatusUpdateFactory.zoomOut());
                ib_large.setEnabled(true);
            } else {
                ib_small.setEnabled(false);
                showInfo("已经缩至最小,可继续滑动操作");
            }
            break;
        case R.id.ib_mode://卫星模式和普通模式
            if(modeFlag){
                modeFlag = false;
                mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
                showInfo("开启卫星模式");
            }else{
                modeFlag = true;
                mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
                showInfo("开启普通模式");
            }
            break;
        case R.id.ib_loc:
            isFirstLocation = true;
            showInfo("返回自己位置");
            break;
        case R.id.ib_traffic://是否开启交通图
            if(mBaiduMap.isTrafficEnabled()){
                mBaiduMap.setTrafficEnabled(false);
                ib_traffic.setBackgroundResource(R.drawable.offtraffic);
                showInfo("关闭实时交通图");
            }else{
                mBaiduMap.setTrafficEnabled(true);
                ib_traffic.setBackgroundResource(R.drawable.ontraffic);
                showInfo("开启实时交通图");
            }
            break;
        default:
            break;
        }
    }
    @Override
    protected void onStart() {
        super.onStart();
        //开启定位
        mBaiduMap.setMyLocationEnabled(true);
        if(!mLocationClient.isStarted()){
            mLocationClient.start();
        }
    }
    @Override
    protected void onStop() {
        super.onStop();
        //关闭定位
        mBaiduMap.setMyLocationEnabled(false);
        if(mLocationClient.isStarted()){
            mLocationClient.stop();
        }
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        mMapView.onDestroy();
    }
    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
        mMapView.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
        mMapView.onPause();
    }
    //显示消息
    private void showInfo(String str){
        Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
    }
    //自定义的定位监听
    private class MyLocationListener implements BDLocationListener{
        @Override
        public void onReceiveLocation(BDLocation location) {
            //将获取的location信息给百度map
            MyLocationData data = new MyLocationData.Builder()
                    .accuracy(location.getRadius())
                    // 此处设置开发者获取到的方向信息,顺时针0-360
                    .direction(100)
                    .latitude(location.getLatitude())
                    .longitude(location.getLongitude())
                    .build();
            mBaiduMap.setMyLocationData(data);
            if(isFirstLocation){
                //获取经纬度
                LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());
                MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(ll);
                //mBaiduMap.setMapStatus(status);//直接到中间
                mBaiduMap.animateMapStatus(status);//动画的方式到中间
                isFirstLocation = false;
                showInfo("位置:" + location.getAddrStr());
            }
        }

    }
}

最后寄语,转载请注明出处,代码还要自敲,不要图快,一位的复制粘贴。

时间: 2024-11-06 09:46:14

android 百度地图系列之地图初始化及定位的相关文章

android 百度地图系列之添加覆盖物和覆盖物的点击事件

之前讲了百度地图定位和地图基本操作,这篇博客讲一下,怎么去给地图添加覆盖物,并当点击覆盖物的时候显示详细信息. 要给地图添加覆盖物,首先需要覆盖物的经纬度,如果还要实现点击事件,显示详细的信息,还需要覆盖物的描述信息(如图片,位置名称等),所以先新建一个实体类,来存放这些信息. 实体类必须实现序列化接口 package com.zwinsoft.mybaidumap.entity; import java.io.Serializable; /** * 地图标注信息实体类 * @author ji

Android百度地图

  帖子   热搜: 二维码 聊天 二维码扫描 传感器 游戏 定位 手势绘图 小项目 相框 绘图 涂鸦 拨打电话 记事本 定时器 通话记录 短信群发 listview 音乐播放器 项目例子 百度地图 Android开发论坛 - 安卓开发论坛 - Android开发 - 安卓论坛 - 移动互联网门户»安卓巴士论坛 › Android开发资料共享区 › Android实例教程 › Android百度地图系列教程 123456789 / 9 页下一页 返回列表 查看: 39747|回复: 82 And

Android开发实现高德地图定位

一. 要实现高德地图定位呢,首先需要做好以下几步准备: 1. 在高德开放平台注册帐号 注册地址:http://lbs.amap.com 2. 在开发中下载Android平台下的 地图SDK和定位SDK文件 进入相关下载下载自己想要的功能或文件,图只是截取了地图SDK的页面,定位SDK也是一样,按自己想要的文件下载.下载完成后解压得到: - 3D地图包解压后得到:3D地图显示包"AMap_3DMap_VX.X.X_时间.jar"和库文件夹(包含armeabi.arm64-v8a等库文件)

Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器

在上一篇博客中,我们成功把地图导入了我们的项目.本篇我们准备为地图添加:第一,定位功能:第二,与方向传感器结合,通过旋转手机进行道路的方向确认.有了这两个功能,地图已经可以为我服务了~~~~ 效果图: 好了,可以代码,为了方便,我把所有的按钮都放到了menu菜单中. 1.初次启动定位 [java] view plaincopy /** * 定位的客户端 */ private LocationClient mLocationClient; /** * 定位的监听器 */ public MyLoca

[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

       前一篇百度地图开发讲述"(二).定位城市位置和城市POI搜索",主要通过监听对象MKSearchListener类实现城市兴趣点POI(Point of Interest)搜索.该篇讲述定位当前自己的位置及使用getLastKnownLocation获取location总时为空值的问题. 一. 定位当前位置的原理及实现       定位当前位置可以通过LBS(Location Based Service,基于位置的服务),主要工作原理是利用无线网络Network或GPS定

Android百度地图结合方向传感器我们自己定位哪里走

Android百度地图结合方向传感器我们自己定位哪里走 本文代码在http://blog.csdn.net/xyzz609/article/details/51943556的基础上进一步修改,有兴趣的同学可以研究下怎么修改的 本篇我们准备为地图添加:第一,定位功能:第二,与方向传感器结合,通过旋转手机进行道路的方向确认.有了这两个功能,地图已经可以为我服务了 @一启动就自动定位了 a,MainActivity 中添加定位代码,定位的监听器MyLocationListener b,封装的方向传感器

Android百度地图API集成二《定位》

书接上回 ↑ 基础地图请查看Android百度地图API集成一<基础地图>: 地址http://www.cnblogs.com/dhr125/p/5969980.html 1.在Application标签中声明SERVICE组件 <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> <

android 百度地图定位开发2

先下载了示例代码 进行配置(可查看开发 指南 Hello BaiDuMap) 第一步:创建并配置工程(具体方法参见工程配置部分的介绍): 第二步:在AndroidManifest中添加开发密钥.所需权限等信息: (1)在application中添加开发密钥 <application> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="开发者 key" /> &l

Android百度地图定位

说到百度地图,现在这个时候应该都是众说周知了吧,多的话不扯了,直接奔向主题. 接入百度地图api必须申请key,这里申请key就不用说了,官方文档上面有介绍如何去申请key. 这里使用的百度地图定位是4.2的版本,api是3.1.1版本.如果申请好了key,那么就可以进入编码阶段了,具体实现如下: 1.引入百度地图相关jar包及armeabi目录到libs目录中 2.在项目的AndroidManifest.xml文件中配置相关信息 配置权限 <uses-permission android:na