插件方式接入百度地圖和高德地圖

我們的應(yīng)用可能會(huì)用到地圖定位等功能添祸,但是無論高德還是百度直接接入到應(yīng)用中都會(huì)導(dǎo)致體積增大桶至,甚至導(dǎo)致65535方法數(shù)問題狡相,所以用插件的方式接入是個(gè)不錯(cuò)的選擇后专。

這里我用了Apkplug這個(gè)插件框架,下面是我的接入過程美浦。

百度地圖接入

這里介紹一下將百度地圖作為插件并接入宿主的例子弦赖,例子沒有將完備的功能接入,只是將一個(gè)定位界面接入浦辨,在宿主中點(diǎn)擊一下按鈕蹬竖,彈出定位界面。

一流酬、插件開發(fā)

其實(shí)比較麻煩的是賬號(hào)申請(qǐng)币厕,key申請(qǐng),所以先介紹一下這些相關(guān)的芽腾。

注冊(cè)的話旦装,這里不做詳細(xì)介紹,我第一次注冊(cè)摊滔,怎么都要求我上傳什么身份證正反面照片阴绢,我沒傳,第二次登陸的時(shí)候好像就不需要了惭载,你遇到相同的情況旱函,可以先退出响巢,再登陸描滔,也許可以繞過上傳證件照。

申請(qǐng)key踪古,這個(gè)跟高德地圖的操作差不多含长,但是使用時(shí)有所差別券腔,下面會(huì)說,先看一下key的申請(qǐng)拘泞。

這里是百度地圖的控制臺(tái)

點(diǎn)擊創(chuàng)建應(yīng)用后纷纫,如下圖所示:

其中,apk簽名sha1值的取得參考這里

這里需要注意的是陪腌,一個(gè)應(yīng)用想使用這個(gè)key辱魁,需要簽名、包名诗鸭、key值相對(duì)應(yīng)染簇。地圖sdk是在插件中接入的,所以key值需要配置在插件里强岸,但是百度地圖sdk讀取包名時(shí)锻弓,會(huì)讀取宿主的,所以在創(chuàng)建key時(shí)蝌箍,直接使用宿主包名青灼,但是將生成的key配置到插件。如果為了測(cè)試時(shí)插件獨(dú)立運(yùn)行妓盲,可以單獨(dú)為插件生成一套相應(yīng)key杂拨,但是加入宿主時(shí),必須換成宿主key

key的問題搞清楚后悯衬,就沒有太多坑了扳躬。按照百度地圖文檔添加一個(gè)定位界面即可。

 <com.baidu.mapapi.map.MapView
    android:id="@+id/bmapView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:layout_below="@+id/textView" />

這是activity中代碼:

    mMapView = (MapView) findViewById(R.id.bmapView);
    baiduMap = mMapView.getMap();
    // 開啟定位圖層
    baiduMap.setMyLocationEnabled(true);
    // 定位初始化
    mLocationClient = new LocationClient(this);
    mLocationClient.registerLocationListener(myListener);
    LocationClientOption option = new LocationClientOption();
    option.setOpenGps(true); // 打開gps
    option.setCoorType("bd09ll"); // 設(shè)置坐標(biāo)類型
    option.setScanSpan(1000);
    mLocationClient.setLocOption(option);
    mLocationClient.start();

這些都在百度地圖文檔中可以查到甚亭,不做詳細(xì)介紹贷币,包括初始化、權(quán)限亏狰、及組件的配置役纹,直接參考百度文檔。沒什么坑可說暇唾。先用插件單獨(dú)運(yùn)行一下促脉,能實(shí)現(xiàn)功能就算完成了。

然后按照套路策州,給插件設(shè)置plugin.xml

<plugin-features
    Bundle-Name="AMapPlug"
    Bundle-SymbolicName="com.apkplug.amapplug"
    Bundle-Version="1.0.0"
    date="2016.07.20"
    provider-name="APKPLUG"
    Bundle-Activity="com.apkplug.baidumapplug.MenuActivity"
    start-level ="1"
    start-up="true"
>
</plugin-features>

這樣一個(gè)插件就完成了瘸味。唯一需要注意的是上面提到的key的問題。

宿主開發(fā)

宿主開發(fā)中够挂,需要將百度地圖的權(quán)限配置過來旁仿,是android 6.0的話記得手動(dòng)獲取權(quán)限。其他沒啥坑了孽糖,按照套路來就行枯冈。

我這里直接啟動(dòng)activity

Intent intent = new Intent();
                    intent.setClassName(MainActivity.this, "com.apkplug.baidumapplug.MainActivity");
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);

這里面還使用了一個(gè)異步啟動(dòng)的例子:

org.osgi.framework.Bundle[] bundles = FrameworkFactory.getInstance().getFrame().getSystemBundleContext().getBundles();
            for(org.osgi.framework.Bundle bundle : bundles){
                if(bundle.getName().equals("BaiduMapPlug")){

                    bundle.start(new StartCallback() {
                        @Override
                        public void onSuccess(org.osgi.framework.Bundle bundle) {
                            Intent intent = new Intent();
                            intent.setClassName(MainActivity.this, "com.apkplug.baidumapplug.MainActivity");
                            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            startActivity(intent);
                            Log.e(this.getClass().getName(),bundle.getName());
                        }

                        @Override
                        public void onFail(org.osgi.framework.Bundle bundle, Throwable throwable) {
                            StringWriter sw = new StringWriter();
                            PrintWriter pw = new PrintWriter(sw);
                            throwable.printStackTrace(pw);

                            System.out.println(sw.toString()); // stack trace as a string
                            Log.e(this.getClass().getName(),throwable.toString());
                        }
                    });
                }
            }

如果一個(gè)插件毅贮,在初始化的時(shí)候很費(fèi)時(shí),則可以選擇異步啟動(dòng)尘奏。

demo地址:

插件地址:https://github.com/apkplug/SDKDemo/tree/master/BaiduMapPlug

宿主地址:https://github.com/apkplug/SDKDemo/tree/master/BaiduMapPlugUser

高德地圖插件開發(fā)

下面介紹高德地圖的接入過程滩褥,我把高德地圖的一個(gè)簡(jiǎn)單定位功能放到了插件里,從宿主點(diǎn)一下按鈕就跳到插件的定位界面炫加。

1 插件開發(fā)

首先注冊(cè)高德瑰煎,注冊(cè)好后,比較關(guān)鍵的就是key的使用俗孝,高德地圖的各種接口調(diào)用都要檢測(cè)key丢间,也是因?yàn)橛腥朔从砶ey的各種問題,所以這個(gè)例子重點(diǎn)說的其實(shí)是key的事驹针。

key的管理在控制臺(tái):

上面提到獲取sha1值的方法:參考這里

搞定了key的問題烘挫,就好辦了,下面做一個(gè)定位的界面

在你的界面中加入地圖控件

<com.amap.api.maps.MapView
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</com.amap.api.maps.MapView>

然后在代碼中進(jìn)行設(shè)置

    mlocationClient = new AMapLocationClient(getContext());
    mLocationOption = new AMapLocationClientOption();

    mMapView = ((MapView)getView().findViewById(R.id.map));
    mMapView.onCreate(savedInstanceState);
    aMap = mMapView.getMap();

    //對(duì)界面的監(jiān)聽柬甥,這個(gè)要先設(shè)置
    aMap.setLocationSource(new LocationSource() {
        @Override
        public void activate(final OnLocationChangedListener onLocationChangedListener) {
            mlocationClient.setLocationListener(new AMapLocationListener() {
                @Override
                public void onLocationChanged(AMapLocation aMapLocation) {
                    onLocationChangedListener.onLocationChanged(aMapLocation);
                }
            });

            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            mlocationClient.setLocationOption(mLocationOption);
            mlocationClient.startLocation();
        }

        @Override
        public void deactivate() {
            if (mlocationClient != null) {
                mlocationClient.stopLocation();
                mlocationClient.onDestroy();
            }
            mlocationClient = null;
        }
    });
    aMap.getUiSettings().setMyLocationButtonEnabled(true);// 設(shè)置默認(rèn)定位按鈕是否顯示

    aMap.setMyLocationEnabled(true);// 設(shè)置為true表示顯示定位層并可觸發(fā)定位饮六,false表示隱藏定位層并不可觸發(fā)定位,默認(rèn)是false
    // 設(shè)置定位的類型為定位模式 苛蒲,可以由定位卤橄、跟隨或地圖根據(jù)面向方向旋轉(zhuǎn)幾種
    aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);

這樣界面就好了,你單獨(dú)運(yùn)行插件應(yīng)該就能定位了臂外,如果返回錯(cuò)誤碼窟扑,提示你key錯(cuò)了,那你需要再好好看看上面設(shè)置key的說明漏健。

然后按照套路嚎货,給插件設(shè)置plugin.xml

<plugin-features
    Bundle-Name="AMapPlug"
    Bundle-SymbolicName="com.apkplug.amapplug"
    Bundle-Version="1.0.0"
    date="2016.07.20"
    provider-name="APKPLUG"
    Bundle-Activity="com.apkplug.amapplug.MenuActivity"
    start-level ="1"
    start-up="true"
>
</plugin-features>

2 宿主開發(fā)

宿主不需要特殊說明什么,按照套路來蔫浆,初始化殖属、安裝插件。按照高德地圖說明文檔配置權(quán)限瓦盛。

直接用intent啟動(dòng)插件就行

            Intent intent = new Intent();
            intent.setClassName(MainActivity.this, "com.apkplug.amapplug.MenuActivity");
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);

demo代碼:

插件工程:https://github.com/apkplug/SDKDemo/tree/master/AMapPlug

宿主工程:https://github.com/apkplug/SDKDemo/tree/master/AMapPlugUser

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末洗显,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子原环,更是在濱河造成了極大的恐慌挠唆,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘱吗,死亡現(xiàn)場(chǎng)離奇詭異玄组,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門巧勤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弄匕,你說我怎么就攤上這事颅悉。” “怎么了迁匠?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵剩瓶,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我城丧,道長(zhǎng)延曙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任亡哄,我火速辦了婚禮枝缔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蚊惯。我一直安慰自己愿卸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布截型。 她就那樣靜靜地躺著趴荸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宦焦。 梳的紋絲不亂的頭發(fā)上发钝,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音波闹,去河邊找鬼酝豪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛精堕,可吹牛的內(nèi)容都是我干的寓调。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锄码,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼夺英!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起滋捶,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤痛悯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后重窟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體载萌,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扭仁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垮衷。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖乖坠,靈堂內(nèi)的尸體忽然破棺而出搀突,到底是詐尸還是另有隱情,我是刑警寧澤熊泵,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布仰迁,位于F島的核電站,受9級(jí)特大地震影響顽分,放射性物質(zhì)發(fā)生泄漏徐许。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一卒蘸、第九天 我趴在偏房一處隱蔽的房頂上張望雌隅。 院中可真熱鬧,春花似錦缸沃、人聲如沸澄步。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽村缸。三九已至,卻和暖如春武氓,著一層夾襖步出監(jiān)牢的瞬間梯皿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工县恕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留东羹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓忠烛,卻偏偏與公主長(zhǎng)得像属提,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子美尸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 共享單車的火爆為地圖類應(yīng)用帶來了嶄新的使用場(chǎng)景冤议,百度地圖抓住時(shí)機(jī)地增加了共享單車的功能入口,同時(shí)新增了“地鐵+共享...
    baolvlv閱讀 21,740評(píng)論 4 118
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫师坎、插件恕酸、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評(píng)論 4 62
  • 北林記得第一次看到柳煙的時(shí)候。 柳煙在咯咯笑胯陋。 他知道他們以后會(huì)有很多故事要發(fā)生蕊温,他只要耐心等待就可以袱箱,好在他那時(shí)...
    來咯弄閱讀 259評(píng)論 0 3
  • 今天我不在家,小家伙通過婆婆的手機(jī)义矛,給我發(fā)語音來打卡发笔。祂先是朗讀了培生的三本書。然后又讀了吉的堡的英語凉翻,非常流利了讨。...
    Hisi閱讀 214評(píng)論 0 0