Android地图服务(一)

目录

 

申请API KEY

定位

准备SDK

 确定经纬度


申请API KEY

进入百度地图开放平台,点击我的应用

点击创建应用

填写应用名称,选择应用类型为Android SDK。此时发布版SHA1码没有,因此使用开发版SHA1码填入发布版SHA1码位置。

一般情况下,路径为 C:\Users\Administrator\.android。在terminal中先cd .清空,控制台窗口中输入 cd .android 定位到 .android 文件夹.然后cd到JDK的地址

密码一般为 android

将开发版和发布版SHA1码都填写这个

定位

准备SDK

选择你所需要的功能下载地图包

 将jar包引入libs

 在src/main右键点击new->Dictionary创建一个jniLibs目录这里存放so文件,把压缩包里的五个文件都放到这里

 

然后点击sync按钮

然后检查app下/build.gradle中是否有

 确定经纬度

在activity_main.xml中

在Android.Manifest.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
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"

        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="uSGmgbOcV6NEnzG5iST5UHKcjO1yS8yj"/>

        <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>

这里的Android:value填写你的访问应用密码

可能会遇到uses permission出现红色下划线,可以把这个uses去掉就不会报错了,这里我也不知道为啥

接下在打开MainActivity

public class MainActivity extends AppCompatActivity {
    public LocationClient mLocationClient;
    private TextView positionText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mLocationClient = new LocationClient(getApplicationContext());
        mLocationClient.registerLocationListener(new MyLocationListener());
        setContentView(R.layout.activity_main);
        positionText = (TextView)findViewById(R.id.position_text_view);
        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 requestLocation()
    {
        mLocationClient.start();
    }
    public void onRequestPermissionResult(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
    {
        public void onReceiveLocation(BDLocation location)
        {
            StringBuilder currentPosition = new StringBuilder();
            currentPosition.append("纬度:").append(location.getLatitude()).append("\n");
            currentPosition.append("经线:").append(location.getLongitude()).append("\n");
            currentPosition.append("定位方式:");
            if(location.getLocType()==BDLocation.TypeGpsLocation)
            {
                currentPosition.append("GPS");
            }
            else if(location.getLocType()==BDLocation.TypeNetWorkLocation)
            {
                currentPosition.append("网络");
            }
            positionText.setText(currentPosition);

        }
    }
}

这里可能会出现一个问题,R标红或者layout,id标红。显示错误: 无法取消引用float

这是由于系统自动调用了百度的R包

把这一行去掉或者删掉百度的R文件

最后运行

现在纬度信息成功定位了,不过只能定位一次,那么如何实时更新当前的位置呢?

在MainActivity.java中进行修改

在requestLocation函数中修改:

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

创建initLocation函数,作用是用setScanSpan设置更新位置的间隔,这里设置的5000表示每5秒更新的当前的位置

private void initLocation()
    {
        LocationClientOption option = new LocationClientOption();
        option.setScanSpan(5000);
        mLocationClient.setLocOption(option);
    }

和onDestroy函数,mLocationClient.stop函数能够使活动停止,防止后台耗电

protected void onDestroy() {
        super.onDestroy();
        mLocationClient.stop();
    }

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值