• 练习


     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3     package="com.example.androidbaidumap"
     4     android:versionCode="1"
     5     android:versionName="1.0" >
     6 
     7     <uses-sdk
     8         android:minSdkVersion="14"
     9         android:targetSdkVersion="20" />
    10 
    11     <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    12     <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    13     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    14     <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
    15     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    16     <uses-permission android:name="android.permission.INTERNET" />
    17     <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    18     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    19     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    20     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    21     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    22     <uses-permission android:name="android.permission.BROADCAST_STICKY" />
    23     <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    24     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    25     
    26 
    27     <application
    28         android:allowBackup="true"
    29         android:icon="@drawable/ic_launcher"
    30         android:label="@string/app_name"
    31         android:theme="@style/AppTheme" >
    32         <meta-data
    33             android:name="com.baidu.lbsapi.API_KEY"
    34             android:value="***********" />
    35 
    36         <activity
    37             android:name=".MainActivity"
    38             android:label="@string/app_name" >
    39             <intent-filter>
    40                 <action android:name="android.intent.action.MAIN" />
    41 
    42                 <category android:name="android.intent.category.LAUNCHER" />
    43             </intent-filter>
    44         </activity>
    45     </application>
    46 
    47 </manifest>
      1 package com.example.androidbaidumap;
      2 
      3 import java.util.List;
      4 
      5 import com.baidu.mapapi.SDKInitializer;
      6 import com.baidu.mapapi.map.BaiduMap;
      7 import com.baidu.mapapi.map.MapStatusUpdate;
      8 import com.baidu.mapapi.map.MapStatusUpdateFactory;
      9 import com.baidu.mapapi.map.MapView;
     10 import com.baidu.mapapi.map.MyLocationData;
     11 import com.baidu.mapapi.model.LatLng;
     12 
     13 import android.app.Activity;
     14 import android.content.Context;
     15 import android.location.Location;
     16 import android.location.LocationListener;
     17 import android.location.LocationManager;
     18 import android.os.Bundle;
     19 import android.util.Log;
     20 import android.widget.Toast;
     21 
     22 public class MainActivity extends Activity {
     23     private MapView mapView;
     24     //总控制器
     25     private BaiduMap baiduMap;
     26     //位置管理器
     27     private LocationManager locationManager;
     28     //位置提供器
     29     private String provider;
     30     //标志符
     31     private boolean isFirstLocate=true;
     32     @Override
     33     protected void onCreate(Bundle savedInstanceState) {
     34         super.onCreate(savedInstanceState);
     35         SDKInitializer.initialize(getApplicationContext());
     36         setContentView(R.layout.activity_main);
     37         mapView=(MapView)findViewById(R.id.map_view);
     38         baiduMap=mapView.getMap();
     39         //开启显示个人位置功能
     40         baiduMap.setMyLocationEnabled(true);
     41         locationManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);
     42         //获取所有的位置提供器
     43         List<String> list=locationManager.getProviders(true);
     44         if(list.contains(LocationManager.GPS_PROVIDER)){
     45             provider=LocationManager.GPS_PROVIDER;
     46         }else if(list.contains(LocationManager.NETWORK_PROVIDER)){
     47             provider=LocationManager.NETWORK_PROVIDER;
     48         }else{
     49             //提示用户无可用的
     50             Toast.makeText(this, "没用可用的定位设置,请确定你已经开启GPS或网络", Toast.LENGTH_SHORT).show();
     51             return;
     52         }
     53         Location location=locationManager.getLastKnownLocation(provider);
     54         if(location!=null){
     55             showLocation(location);
     56         }
     57         locationManager.requestLocationUpdates(provider, 6000, 1, locationListener);
     58         
     59     }
     60     private void showLocation(Location location) {
     61         if(isFirstLocate){
     62             LatLng ll=new LatLng(location.getLatitude(), location.getLongitude());
     63             //获取MapStatusUpdate对象
     64             //封装地理位置
     65             MapStatusUpdate update=MapStatusUpdateFactory.newLatLng(ll);
     66             baiduMap.animateMapStatus(update);
     67             //设置精度
     68             update=MapStatusUpdateFactory.zoomTo(16f);
     69             baiduMap.animateMapStatus(update);
     70             isFirstLocate=false;
     71             
     72         }
     73         //封装个人所在位置
     74         MyLocationData.Builder locationBuilder=new MyLocationData.Builder();
     75         locationBuilder.latitude(location.getLatitude());
     76         locationBuilder.longitude(location.getLongitude());
     77         MyLocationData locationData=locationBuilder.build();
     78         baiduMap.setMyLocationData(locationData);
     79         
     80     }
     81     private LocationListener locationListener=new LocationListener(){
     82 
     83         @Override
     84         public void onLocationChanged(Location location) {
     85             // TODO Auto-generated method stub
     86             if(location!=null){
     87                 showLocation(location);
     88                 Log.i("baidumap", "update");
     89             }
     90         }
     91 
     92         @Override
     93         public void onStatusChanged(String provider, int status, Bundle extras) {
     94             // TODO Auto-generated method stub
     95             
     96         }
     97 
     98         @Override
     99         public void onProviderEnabled(String provider) {
    100             // TODO Auto-generated method stub
    101             
    102         }
    103 
    104         @Override
    105         public void onProviderDisabled(String provider) {
    106             // TODO Auto-generated method stub
    107             
    108         }};
    109     @Override
    110     protected void onDestroy() {
    111         // TODO Auto-generated method stub
    112         super.onDestroy();
    113         baiduMap.setMyLocationEnabled(false);
    114         mapView.onDestroy();
    115         if(locationManager!=null){
    116             locationManager.removeUpdates(locationListener);
    117         }
    118     }
    119     @Override
    120     protected void onPause() {
    121         // TODO Auto-generated method stub
    122         super.onPause();
    123         mapView.onPause();
    124     }
    125     @Override
    126     protected void onResume() {
    127         // TODO Auto-generated method stub
    128         super.onResume();
    129         mapView.onResume();
    130     }
    131 
    132 }
    <!-- 这个权限用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
    <!-- 这个权限用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <!-- 用于读取手机当前的状态-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <!-- 访问网络,网络定位需要上网-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- SD卡读取权限,用户写入离线定位数据-->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

    相关下载里下载最新的库文件。将so文件的压缩文件解压出来,把对应架构下的so文件放入开发者自己APP的对应架构下的文件夹中(建议全部放入以提高程序兼容性),将locSDK_6.X.jar文件拷贝到工程的libs目录下,这样您就可以在程序中使用百度定位SDK了。

    使用eclipse开发的开发者,只需要将SO的文件夹放到libs下即可;使用AndroidStutio的开发者除了上述操作,还需要在build.gradle中配置SO的使用,如下所示:

    sourceSets {
            	main {
        			jniLibs.srcDirs = ['libs']
            	}
    }

    开发者如果开发的是系统应用,则只在工程中配置SO还是不够的,还需要手动把对应架构的SO拷贝到/system/lib下,如果是64位系统的话需要将64位的SO拷贝到/sytem/lib64下。

    注意:每次新版本的定位SDK,开发者除了要更新JAR包之外,也要注意一下SO有无更新,如果SO名称不一样了,也要及时替换老的SO版本,不然会导致定位失败!

    设置AndroidManifest.xml

    在application标签中声明service组件,每个app拥有自己单独的定位service

    <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
    </service>

    【重要提醒】

    定位SDKv3.1版本之后,以下权限已不需要,请取消声明,否则将由于Android 5.0多帐户系统加强权限管理而导致应用安装失败。 <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></uses-permission>

    声明使用权限

    <!-- 这个权限用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
    <!-- 这个权限用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <!-- 用于读取手机当前的状态-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <!-- 访问网络,网络定位需要上网-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- SD卡读取权限,用户写入离线定位数据-->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

    设置AcessKey

    SDK4.2及之后版本需要在Mainfest.xml设置Accesskey,设置有误会引起定位和地理围栏服务不能正常使用,必须进行Accesskey的正确设置。

    设置AccessKey,在application标签中加入

    <meta-data
                android:name="com.baidu.lbsapi.API_KEY"
                android:value="key" />       //key:开发者申请的key

    import相关类

    import com.baidu.location.BDLocation;
    import com.baidu.location.BDLocationListener;
    import com.baidu.location.LocationClient;
    import com.baidu.location.LocationClientOption;
    import com.baidu.location.BDNotifyListener;//假如用到位置提醒功能,需要import该类
    import com.baidu.location.Poi;


  • 相关阅读:
    cocos2d 设置按钮不可用
    cocos2d-js屏幕任何位置点击开始的实现
    cocos2d-js取不到cocostudio里面控件问题
    XMLHttpRequest
    [cocos2d-js]长按按钮事件
    [cocos2d-js]chipmunk例子(二)
    [cocos2d-js]chipmunk例子(一)
    BOX2D测试
    Cocos2d-JS v3.0 alpha 导入 cocostudio的ui配置
    Cocos2d-JS v3.0 alpha不支持cocos2d-x的Physics integration
  • 原文地址:https://www.cnblogs.com/oldcownotGiveup/p/5425500.html
Copyright © 2020-2023  润新知