您的位置:首页 > 移动开发 > Android开发

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

2015-06-08 18:05 567 查看
先贴代码(拿过去就可以用):

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号.

如此类推:不想显示信息的直接替换掉即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: