Android stduio 开发百度地图API版本4.5(1)

首先申请密钥我就不写了,百度api的文档解释的蛮清晰的。

这是第一次接触百度的api,说实话从花了3天时间都没有搞定,然后今天今天才处理完本以为就是简简单单地,谁知道Android stduio的问题一个比一个多,今天才完成。

用时3天才创建好一个能用的。

现在把详细方法和出现的问题写出来方便大家的学习。

首先我们需要导入包


然后右键AS Libaray将这个包添加进去才能用。


还需要导入jniLibs这个文件,但是这个文件不是自己创建的,是要通过gradle才能创建。


输入代码

下面代码需要

  sourceSets {
        main {
            jniLibs.srcDir 'libs'
        }
必须写在android中才行,而且需要写在build.gradle(Module:app)中才行。
android {
    signingConfigs {
        config {
        }
        mykey {
            keyAlias '****'
            keyPassword '**'
            storePassword '***'
        }
    }
    sourceSets {
        main {
            jniLibs.srcDir 'libs'
        }
    }


才能创建jiniLibs这个文件,然后再将百度API除了jar包的那些东西放到jniLibs中,这个问题困扰了我很久才搞定。

最开始需要注册

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.minicard.myapplication">
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <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.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <!-- 访问精确位置的权限 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 这个权限用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <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="你的百度密匙" />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>



第一步我们先来写一个layout的xml的ui图来方便放mapview

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.minicard.myapplication.MainActivity">

    <com.baidu.mapapi.map.MapView
        android:id="@+id/baiduMapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clickable="true"
        />

</android.support.constraint.ConstraintLayout>
这里使用ConstraintLayout如果出现
   tools:layout_editor_absoluteY="82dp"
        tools:layout_editor_absoluteX="16dp"
这上面两行代码这个是用来绝对定位但是我们暂时不需要用到它,而且还会报错,虽然调用其他以后就不了,但是我们先删除掉这两行代码。

然后我们来写Mainactivity的主要代码

package com.minicard.myapplication;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.MapView;

public class MainActivity extends Activity {
    private MapView mBaiduMapView = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        initBaiduMap();
    }

    private void initBaiduMap(){
        mBaiduMapView = (MapView) findViewById(R.id.baiduMapView);
    }
    @Override
    protected void onResume() {
        super.onResume();
        mBaiduMapView.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
        mBaiduMapView.onPause();
    }
    @Override
    protected void onDestroy() {
        mBaiduMapView.onDestroy();
        mBaiduMapView = null;
        super.onDestroy();
    }
}
注意两点,
1.initialize方法中必须传入的是ApplicationContext,传入this,或者MAinActivity.this都会报运行时异常.
2.initialize方法必须写在setContentView方法前面,也许会写在后面结果报xml中的错误.


然后我们的百度地图api就能用了,但是还有一些东西没出来。


经过检查以后发现是key和对应的SHA1和百度的对应不上,原因呢就是在编写的过程中SHA1突然变成与你之前创建好的不一样了,导致地图看不见呈现出,网格状,还有一点就是虚拟机可能是使用不了的,需要用真机测试才行。


好了这样子我们第一阶段就这样子完成了。


下面是源代码供大家下载

http://download.csdn.net/download/qq_16519957/10040465


猜你喜欢

转载自blog.csdn.net/qq_16519957/article/details/78345544
今日推荐