百度地图SDK使用[通俗易懂]

百度地图SDK使用[通俗易懂]将百度地图官网下载的SDK的压缩包解压得到如下文件:将BaiduLBS_Android.jar复制到libs目录下,并点击同步版本比较老的Gradle可能没有这一句,需要手动添加,然后同步在ma

大家好,又见面了,我是你们的朋友全栈君。

百度地图官网下载的SDK的压缩包解压得到如下文件:

百度地图SDK使用[通俗易懂]

将BaiduLBS_Android.jar复制到libs目录下,并点击同步

 百度地图SDK使用[通俗易懂]百度地图SDK使用[通俗易懂]

版本比较老的Gradle可能没有这一句,需要手动添加,然后同步

百度地图SDK使用[通俗易懂]

 

 在main 目录下新建jniLibs文件夹,并将百度地图给的sdk里剩下的so文件导入

百度地图SDK使用[通俗易懂]百度地图SDK使用[通俗易懂]

 

 

<!———————-开始代码部分—————————–> 

 

AndroidManifest.xml

添加权限如下:

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_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"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>

在<application>标签中声明

<!--百度地图秘钥-->
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="你在百度地图申请的秘钥"
            />
  <service android:name="com.baidu.location.f" android:enabled="true"
            android:process=":remote">
        </service>

百度地图SDK使用[通俗易懂]

activity_main.xml 布局文件代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.baidu.mapapi.map.MapView
        android:id="@+id/bmapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clickable="true"/>
</LinearLayout>
MainActivity
public class MainActivity extends AppCompatActivity {

    public LocationClient mLocationCLient;
    private MapView mapView;
    private BaiduMap baiduMap;
    private boolean isFirstLocate = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mLocationCLient = new LocationClient(getApplicationContext());
        mLocationCLient.registerLocationListener(new MyLocationListener());
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        mapView = (MapView) findViewById(R.id.bmapView);
        baiduMap = mapView.getMap();
//        让我显示在地图上
        baiduMap.setMyLocationEnabled(true);

        List<String> permissionList = new ArrayList<>();
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.
                permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
        }
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.
                permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            permissionList.add(Manifest.permission.READ_PHONE_STATE);
        }
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.
                permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }
        if (!permissionList.isEmpty()) {
            String[] permissions = permissionList.toArray(new String[permissionList.size()]);
            ActivityCompat.requestPermissions(MainActivity.this, permissions, 1);
        } else {
            requestLocation();
        }

    }

    private void navigateTo(BDLocation location){
        if (isFirstLocate){
            LatLng ll=new LatLng(location.getLatitude(),location.getLongitude());
            MapStatusUpdate update= MapStatusUpdateFactory.newLatLng(ll);
            baiduMap.animateMapStatus(update);
            update=MapStatusUpdateFactory.zoomTo(16f);
            baiduMap.animateMapStatus(update);
            isFirstLocate=false;
        }
        MyLocationData.Builder locationBuilder=new MyLocationData.Builder();
        locationBuilder.latitude(location.getLatitude());
        locationBuilder.longitude(location.getLongitude());
        MyLocationData locationData=locationBuilder.build();
        baiduMap.setMyLocationData(locationData);
    }

    private void requestLocation() {
        initLocation();
        mLocationCLient.start();
    }

    private void initLocation() {
        LocationClientOption option = new LocationClientOption();
        option.setScanSpan(1000);
        option.setIsNeedAddress(true);
        mLocationCLient.setLocOption(option);
    }

    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mapView.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mLocationCLient.stop();
        mapView.onDestroy();
        baiduMap.setMyLocationEnabled(false);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case 1:
                if (grantResults.length > 0) {
                    for (int result : grantResults) {
                        if (result != PackageManager.PERMISSION_GRANTED) {
                            Toast.makeText(this, "必须同意所有权限才能使用", Toast.LENGTH_SHORT).show();
                            finish();
                            return;
                        }
                    }
                    requestLocation();
                } else {
                    Toast.makeText(this, "未知错误", Toast.LENGTH_SHORT).show();
                    finish();
                }
                break;
            default:
        }
    }

    public class MyLocationListener implements BDLocationListener {
        @Override
        public void onReceiveLocation(final BDLocation location) {
          if (location.getLocType()==BDLocation.TypeGpsLocation
          || location.getLocType()==BDLocation.TypeNetWorkLocation){
              navigateTo(location);
          }
        }
    }
}

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154863.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • GridLayout: GridLayout使用简介(转)[通俗易懂]

    GridLayout: GridLayout使用简介(转)[通俗易懂]Android布局之GridLayout1GridLayout简介GridLayout是Android4.0新提供的网格矩阵形式的布局控件。GridLayout的继承关系如下:java.la

    2022年7月2日
    21
  • Spring5.0源码学习系列之浅谈循环依赖问题

    Spring5.0源码学习系列之浅谈循环依赖问题

    2020年11月19日
    189
  • css 首行缩进

    css 首行缩进用CSS实现段落首缩进两个字符,应该使用首行缩进text-indent。比如文本块中一般每段前空两个汉字。在这里我们需要了解一种长度单位em。em是相对长度单位。相对于当前对象(父元素)内文本的字体尺寸。我们中文段落一般每段前空两个汉字。实际上,就是首行缩进了2em。p{ width:200px; text-indent:2em;/*em是相对单位,2em即现在一个字大小的两倍*/}<p> Hi!朋友,感谢您愿意查看猿叔博客。如果您有什么建议或者意见,欢迎联系我,我们互相学习,共

    2025年7月6日
    0
  • [转] Vue生命周期

    [转] Vue生命周期

    2022年3月2日
    41
  • License Error:“Failed to Open the TCP Port Number in the License “终极解决方案

    License Error:“Failed to Open the TCP Port Number in the License “终极解决方案为什么叫终极解决方案,不是笔者吹牛,这个列表比目前synopsys,cadence,的support文档里的内容都全,还有FLEXnet的帮助文档也没这全。这些招大部分edavendor的工程师也不全会,真实结论不是瞎说。这事折腾好久,花了很多精力,就让笔者吹吹牛吧,哈哈。另外,如果以下的问题都排除了,还报这个license错,不要怀疑列表不全,99%的可能是其中哪一步做的不彻底。挨

    2022年7月26日
    50
  • 用户态和内核态切换开销_进程切换在用户态还是内核态

    用户态和内核态切换开销_进程切换在用户态还是内核态1.切换方式从用户态到内核态切换可以通过三种方式,或者说会导致从用户态切换到内核态的操作:系统调用,这个上面已经讲解过了,在我公众号之前的文章也有讲解过。其实系统调用本身就是中断,但是软件中断,跟硬中断不同。系统调用机制是使用了操作系统为用户特别开放的一个中断来实现,如Linux的int80h中断。 异常:如果当前进程运行在用户态,如果这个时候发生了异常事件,会触发由当前运行进程切换到处理此异常的内核相关进程中 外围设备中断:外围设备完成用户请求的操作之后,会向CPU发出中断信号,这

    2022年9月18日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号