• 02、监听key是否正确


    SDKInitializer其实是有两个action,第三个SDK_BROADTCAST_INTENT_EXTRA_INFO_KEY_ERROR_CODE虽然是一个常量但是它不是action.第二个action是SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR,SDK广播的一个action,SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR和SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR用这两个就可以了.



    <?
    xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima.baidumap74" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <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" /> <application android:name=".MyApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <!-- .就代表你前面这个基础的一个包 --> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="QaDs6ScFuwxGh75ku6gijqNnBhnXmNqZ=1231312" /> <!-- 下面这个activity也是一样,简单一点,以.打头就行了.这样看起来会比较简短一点,看起来会比较舒服. android:name="com.itheima.baidumap74.MainActivity" --> <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
    package com.itheima.baidumap74;
    
    import android.app.Activity;
    import android.view.Gravity;
    import android.widget.Toast;
    
    public class BaseActivity extends Activity{
        /**
         * 在屏幕中央显示一个Toast
         * @param text
         */
        public void showToast(CharSequence text){//字符序列.字符序列这个接口
            //CharSequence其实是我们String的父类.String是实现了这个接口的.
            //所以说我们最好面向接口来编程.这样子这个方法更加通用.
               Toast toast = Toast.makeText(this, text, Toast.LENGTH_SHORT);//局部变量toast
               toast.setGravity(Gravity.CENTER, 0, 0);
               toast.show();
        }
    }
    package com.itheima.baidumap74;
    import com.baidu.mapapi.SDKInitializer;
    
    
    import android.app.Application;
    
    //MyApplication也可以说是一个组件,既然是组件的话呢跟你那个四大组件一样是也需要配置的.
    public class MyApplication extends Application {
        @Override
        public void onCreate() {// 覆盖一个onCreate()方法,当这个组件MyApplication被运行的时候呢它首先会走这个onCreate
            // 进行一个创建.
            // TODO Auto-generated method stub
            // super.onCreate();//空实现,可以删除掉.
            // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
            // 注意该方法要再setContentView方法之前实现
            //初始化一下SDK.初始化的时候它就会去验证我们这个Key是否正确或者说判断一下是否有网络.所以说那个action应该定义到这个初始化类里面来了.
            SDKInitializer.initialize(getApplicationContext());//把初始化SDK这个代码在MainActivity里面剪切掉,放到
            //Application里面去完成
        }
    }
    package com.itheima.baidumap74;
    
    //import com.baidu.mapapi.SDKInitializer;
    
    import com.baidu.mapapi.SDKInitializer;
    import com.baidu.mapapi.map.MapView;
    
    import android.os.Bundle;
    //import android.app.Activity;
    //import android.view.Menu;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    
    public class MainActivity extends BaseActivity {
    
        private MapView mMapView;
        private BroadcastReceiver receiver;//把receiver由局部/本地变量变成成员变量
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
            // 注意该方法要再setContentView方法之前实现
            // SDKInitializer.initialize(getApplicationContext());
            setContentView(R.layout.activity_main);
             //获取地图控件引用  
            mMapView = (MapView) findViewById(R.id.bmapView);  
        }
        @SuppressWarnings("unused")
        private void registerSDKCheckReceiver(){
            //如果你不注册这个广播假设你这个key错了你也不知道.你可能会认为哪一步错了然后找很久找不到原因.所以我们最好去注册一下这样的一个广播.
            receiver = new BroadcastReceiver(){
    
                @Override
                public void onReceive(Context context, Intent intent) {
                    // TODO Auto-generated method stub
                    //如果说接收到广播就会跑到这里面来.
                    //这里面由于我们是有两个action,我们要进行一个判断,先把它们取出来.
                    String action = intent.getAction();
                    if(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR.equals(action)){//首先是这个网络错误,.
                        //显示吐司这种代码很常用,如果说我们有一个base的话呢以后我们显示吐司会非常方便.
                        //这个base类大家应该不陌生.
                        //当我们接收到这一个网络处理故障的广播的时候呢,
                        showToast("网络错误");
                        
                        
                    }else if(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR.equals(action)){
                        showToast("key验证失败");
                        
                    }
                }
            //因为代码不会很多我就直接new它的内部类了.
            };
            IntentFilter filter = new IntentFilter();//本地变量,局部变量.IntentFilter是比较关键,也就是说你要拦截哪些广播就通过它来指定.
            //监听网络错误
            filter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);//广播会以action的方式发出来.这个action从哪里来呢?
            //我们最主要的还不是监听网络错误,我们需要的是权限检查的错误
            //监听百度地图sdk 的key是否正确.
            filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
            //只要这两个广播一发出来,那你这个接收者呢就能接收到
            //注册接收者
            registerReceiver(receiver, filter);//接收一个广播接收者BroadcastReceiver,IntentFilter.
        }
        
        //Ctrl+I格式化
        //这是百度地图规定的,它mMapView也有生命周期方法,你必须在Activity相应的生命周期方法里面呢去调mMapView对应的生命周期方法.
        //这个就没什么好记的了,死记硬背就行了.照着调用.
        @Override  
        protected void onDestroy() {  
            super.onDestroy();  
            //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
            mMapView.onDestroy();
            //解除注册接收者
            unregisterReceiver(receiver);
        }  
        @Override  
        protected void onResume() {  
            super.onResume();  
            //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
            mMapView.onResume();  
            }  
        @Override  
        protected void onPause() {  
            super.onPause();  
            //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
            mMapView.onPause();  
            }  
    
    }
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity" >
    
        <!-- MapView是带包名的,说明这个View不是系统自带的View,是第三方的View.明显就是用于显示地图的叫MapView -->
    
        <com.baidu.mapapi.map.MapView
            android:id="@+id/bmapView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:clickable="true" />
    
    </RelativeLayout>
  • 相关阅读:
    如何发布自定义的UI 组件库到 npmjs.com 并且编写 UI组件说明文档
    Go 包导入备忘
    Incorrect column count: expected 1, actual 5,JdbcTemplate queryForList 出错
    SpringJdbc持久层封装,Spring jdbcTemplate封装,springJdbc泛型Dao,Spring baseDao封装
    Java最快的maven仓库地址,国内Maven地址,超快的Maven地址
    SQLyog-12.4.2版下载,SQLyog最新版下载,SQLyog官网下载,SQLyog Download
    easyui datebox定位到某一个日期, easyui datebox直接定位到具体的日期, easyui datebox MoveTo方法使用
    Echarts调整图表上下左右的间距,Echarts调整柱状图左右的间距
    Spring整合Quartz定时任务执行2次,Spring定时任务执行2次
    Linux关闭Tomcat为什么要用Kill,而不是shutdown.sh
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/7264480.html
Copyright © 2020-2023  润新知