Android 定位详解(显示自己想要的定位信息)
2015-06-08 18:05
579 查看
先贴代码(拿过去就可以用):
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号.
如此类推:不想显示信息的直接替换掉即可。
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号.
如此类推:不想显示信息的直接替换掉即可。
相关文章推荐
- Android 环境变量配置(Mac)
- Android 环境变量配置(Mac)
- Android 线性布局(LinearLayout)相关官方文档 - 指南部分
- 有关Android 平台解析XML
- android Intent Flags详解
- Android_Activity详解
- Android中通过反射获取资源Id
- 修改AndroidStudio中的Logcat中的默认设置
- Android dp和sp的用法汇总
- xUtils在开发过程中DbUtils的使用(save,update方法)
- 异步加载AsyncTask
- 浅谈android中的目录结构
- 本人初学android,希望大神帮忙指点学习路线,现在好迷茫
- Android 调用本地通讯录,广播接收
- android EditText中的inputType
- Android自定义attr和style
- Android学习之ION memory manager
- Android studio快速开发工具合集
- Libs文件夹下的Jar文件为什么不会自动放在Android Private Libraries目录下
- Android 强制软键盘关闭