Android 定位详解(显示自己想要的定位信息)

来源:互联网 发布:如何用c语言画爱心 编辑:程序博客网 时间:2024/05/18 00:24

 

先贴代码(拿过去就可以用):

 

 

 package com.anjoyo.autolocation;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;

public class MainActivity extends Activity {
 Button btn;
 TextView item_text;
 /**定位相关**/
 public LocationClient mClient;


 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  initViews();//初始化控件
  initLocation();//初始化定位
  mClient.start();
 }
 /**控件初始化**/
 private void initViews() {
  btn = (Button) findViewById(R.id.btn);
//  btn.setOnClickListener(mOnClickListener);
  item_text = (TextView) findViewById(R.id.item_text);
 }
// /**监听btn的点击事件**/
// private OnClickListener mOnClickListener = new OnClickListener() {
//
//  @Override
//  public void onClick(View v) {
//
//   mClient.start();//如果有返回结果,则会调用客户端的监听器 mListener
//  }
// };
 /**定位相关的东西**/
 private void initLocation() {
  //初始化客户端
  mClient = new LocationClient(getApplicationContext());//声明LocationClient类
  //给客户端创建一个"设置"
  LocationClientOption option = new LocationClientOption();
  /**设置定位参数**/
  option.setLocationMode(LocationMode.Hight_Accuracy);//设置定位模式
  option.setIsNeedAddress(true);//返回的定位结果包含地址信息
  option.setNeedDeviceDirect(true);//返回的定位结果包含手机机头的方向
  //将设置好的信息给客户端
  mClient.setLocOption(option);
  /**给客户端设置监听**/
  mClient.registerLocationListener( mListener );    //注册监听函数

 }
 /**客户端的监听函数**/
 public BDLocationListener mListener = new BDLocationListener() {
  @Override
  public void onReceiveLocation(BDLocation arg0) {
   final String address = arg0.getAddrStr();//获取详细地址:(比如:贵州省安顺市西秀区学院路25号)
   final String city = arg0.getCity();//获取城市
   final String district = arg0.getDistrict();//获取区县
   final String province = arg0.getProvince();
   System.out.println(address);
   System.out.println(district);
   /**在XML中显示获取的位置**/
//   item_text.setText(sdd);
   item_text.post(new Runnable() {
    @Override
    public void run() {
     item_text.setText(
       address.replace(province, ""));
    }
   });
  }
 
 };

}

 

XML:

 

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="
http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:background="@drawable/df"
    android:layout_height="match_parent"
    android:layout_gravity="center" >

    <Button
        android:id="@+id/btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="点我自动定位"
        android:textSize="22.0sp" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btn"
        android:layout_marginTop="20dip"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="您现在所处的位置是:"
            android:textColor="#ff4455"
            android:textSize="15.0sp" />

        <TextView
            android:layout_marginTop="20dip"
            android:id="@+id/item_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="18.0sp"
            android:paddingLeft="20.0dip"
            android:text=" "
            android:textColor="#004654" />
    </LinearLayout>

</RelativeLayout>

 

 

 

不要忘了要在清单文件里面加权限(当然不需要加这么多权限 这是解决了许多权限的问题,直接复制粘贴用即可,每个权限的作用我都有注释):

 

  <!-- 这个权限用于进行网络定位 -->
    <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>
    <!-- 允许应用读取低级别的系统日志文件 -->
    <uses-permission android:name="android.permission.READ_LOGS" >
    </uses-permission>

 

问题详解:

  在以上代码中:

      final String address = arg0.getAddrStr();//获取详细地址:(比如:贵州省安顺市西秀区学院路25号)
   final String city = arg0.getCity();//获取城市
   final String district = arg0.getDistrict();//获取区县
   final String province = arg0.getProvince();
   System.out.println(address);
   System.out.println(district);
   /**在XML中显示获取的位置**/
//   item_text.setText(sdd);
   item_text.post(new Runnable() {
    @Override
    public void run() {
     item_text.setText(
       address.replace(province, ""));
    }
   });

 


若要获取详细信息,使用代码:

  final String address = arg0.getAddrStr();//获取详细地址:(比如:贵州省安顺市西秀区学院路25号)

若只需要获取城市,使用代码:

   final String city = arg0.getCity();//获取城市(比如:安顺市)

若只需要获取区县,使用代码:

 final String district = arg0.getDistrict();//获取区县(比如:西秀区)

若只需要获取省份,使用代码:

 final String province = arg0.getProvince();//获取省份(比如:贵州省)

 

但如果我只想获取市级以下的信息,怎么办?这时就需要用到替换:比如我只想定位到安顺市西秀区学院路25号

     address.replace(province, "");//显示安顺市西秀区学院路25号

这句代码的意思是先获取详细地址,然后把省份替换掉。

 

如果想把省份和城市让它不显示,这使用代码:

address.replace(province, "").replace(city,"")//显示西秀区学院路25号.

如此类推:不想显示信息的直接替换掉即可。

 

    

 


 


 


 


 

0 0
原创粉丝点击