zoukankan      html  css  js  c++  java
  • 安卓中百度地图的使用

    安卓中百度地图的使用

    1.导入到程序中

    2.一些权限配置

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="demo.jq.com.lbstest">
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
    
            <meta-data
                android:name="com.baidu.lbsapi.API_KEY"
                android:value="Uvo2IDT7i6KFtdeoH1gr7TUrGy6WkvPg"
                 />
    
            <activity android:name=".MainActivity">
                <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>
    
        <uses-permission android:name="android.permission.ACCESS_COARSE_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" />
    
    </manifest>
    

    3.定义显示空间

    <?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">
    
        <TextView
            android:id="@+id/position_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="gone"
            />
    
        <com.baidu.mapapi.map.MapView
            android:id="@+id/bmapView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clickable="true"
            />
    
    
    
    </LinearLayout>
    
    

    4.实现功能

    package demo.jq.com.lbstest;
    
    
    import android.content.pm.PackageManager;
    import android.location.Location;
    import android.support.v4.app.ActivityCompat;
    import android.support.v4.content.ContextCompat;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.TextView;
    import android.widget.Toast;
    
    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.MapStatusUpdate;
    import com.baidu.mapapi.map.MapStatusUpdateFactory;
    import com.baidu.mapapi.map.MapView;
    import com.baidu.mapapi.model.LatLng;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 同一个类文件中,只允许有一个公用类
     * @author jim
     */
    public class MainActivity extends AppCompatActivity {
    
        public LocationClient mLocationClient;
        private TextView positionText;
        private MapView mapView;
        private boolean isFirstLocate = true;
        private BaiduMap baiduMap;
        private static final String TAG = "MainActivity";
    
        @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();
    
            positionText = (TextView) findViewById(R.id.position_text_view);
            List<String> permissionList = new ArrayList<>();
            if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED) {
                permissionList.add(android.Manifest.permission.ACCESS_FINE_LOCATION);
            }
    
            if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.READ_PHONE_STATE)!= PackageManager.PERMISSION_GRANTED) {
                permissionList.add(android.Manifest.permission.READ_PHONE_STATE);
            }
    
            if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {
                permissionList.add(android.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) {
                Log.d(TAG,"ddd"+isFirstLocate);
                LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
                MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
                baiduMap.animateMapStatus(update);
    
                isFirstLocate = false;
                Log.d(TAG,"ddd"+isFirstLocate);
            }
        }
    
        private void requestLocation() {
            initLocation();
            mLocationClient.start();
        }
    
        private void initLocation() {
            LocationClientOption option = new LocationClientOption();
            option.setIsNeedAddress(true);
            mLocationClient.setLocOption(option);
        }
    
        @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_DENIED) {
                                Toast.makeText(this,"必须同意权限才能使用本程序",Toast.LENGTH_SHORT).show();
                                finish();
                                return;
                            }
                        }
    
                        requestLocation();
                    } else {
                        Toast.makeText(this,"发生未知错误",Toast.LENGTH_SHORT).show();
                        finish();
                    }
                    break;
                default:
            }
        }
    
        @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();
        }
    
    
    
    
        /**
         * 内部类
         */
        public class MyLocationListener implements BDLocationListener {
            @Override
            public void onReceiveLocation(BDLocation location) {
                StringBuilder currentPostion = new StringBuilder();
                currentPostion.append("纬度:").append(location.getLatitude()).append("
    ");
                currentPostion.append("纬度:").append(location.getLongitude()).append("
    ");
                currentPostion.append("国家:").append(location.getCountry()).append("
    ");
                currentPostion.append("省:").append(location.getProvince()).append("
    ");
                currentPostion.append("市:").append(location.getCity()).append("
    ");
                currentPostion.append("区:").append(location.getDistrict()).append("
    ");
                currentPostion.append("街道:").append(location.getStreet()).append("
    ");
                currentPostion.append("定位方式:");
                if (location.getLocType() == BDLocation.TypeGpsLocation) {
                    currentPostion.append("GPS");
                } else {
                    currentPostion.append("网络");
                }
    
                positionText.setText(currentPostion);
    
    
                navigateTo(location);
            }
        }
    
    }
    
    
    

  • 相关阅读:
    [转帖]译文:如何使用SocketAsyncEventArgs类(How to use the SocketAsyncEventArgs class)
    如何建立一个“绑定友好的”usercontrol--wpf
    安卓学习(三)
    安卓学习(二)
    Android学习1
    用伪代码梳理springboot
    用伪代码梳理javaweb从零开始
    用伪代码梳理spring源码
    java如何写出简洁代码
    JAVA修复微信官方SDK支付XXE漏洞
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/7731832.html
Copyright © 2011-2022 走看看