实现android基于腾讯的定位并判断网络连接因为定位需要网络,所以如果不判断网络容易引起程序崩溃所以在定位前需要判断网络连接
本例子的源代码已上传我的资源页
http://download.csdn.net/detail/u012373815/9002539
主要步骤:
1. 导入腾讯定位所需jar包
2. 配置androidmanifest.xml权限 并添加腾讯定位的key
3.编写判断网络状态工具类
4.实现判断网络并定位
一, 导入腾讯定位所需jar包
jar 包在我的源代码中有
二, 配置androidmanifest.xml权限 并添加腾讯定位的key
androidmanifest.xml权限:
<!-- 定位的实现 -->
<!-- 通过GPS得到精确位置 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- 通过网络得到粗略位置 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!-- 访问网络. 某些位置信息需要从网络服务器获取 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 访问WiFi状态. 需要WiFi信息用于网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- 修改WiFi状态. 发起WiFi扫描, 需要WiFi信息用于网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!-- 访问网络状态, 检测网络的可用性. 需要网络运营商相关信息用于网络定位 -->
<!-- 判断网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- 访问网络的变化, 需要某些信息用于网络定位 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<!-- 访问手机当前状态, 需要某些信息用于网络定位 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
腾讯定位的key 需要添加在</activity>之后</application>之前
</activity>
<!-- 腾讯地图的key -->
<meta-data
android:name="TencentMapSDK"
android:value="DUSBZ-LL63F-FOIJI-J2GW4-TWNFT-FEFBB"/>
</application>
三, 编写判断网络状态工具类
import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public classPanduanNet {
/**
* 2015.5.18 判断网络 yang
*
*/
public static boolean detect(Activity act) {
ConnectivityManagermanager = (ConnectivityManager) act
.getApplicationContext().getSystemService(
Context.CONNECTIVITY_SERVICE);
if (manager == null) {
return false;
}
NetworkInfonetworkinfo = manager.getActiveNetworkInfo();
if (networkinfo == null ||!networkinfo.isAvailable()) {
return false;
}
return true;
}
}
四, 实现判断网络并定位
public classMainActivity extends Activity implements TencentLocationListener {
private TextView locationtext;
private TencentLocationManager locationManager;
private TencentLocationRequest request;
@Override
protectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationtext=(TextView)findViewById(R.id.location);
boolean networkState=PanduanNet.detect(MainActivity.this);
if(!networkState)//判断网络
{
Toast.makeText(this, "定位失败,请连接网络", Toast.LENGTH_SHORT).show();
}else{
locationManager =TencentLocationManager.getInstance(this);
locationManager .setCoordinateType(TencentLocationManager.COORDINATE_TYPE_GCJ02);
request = TencentLocationRequest.create();
request.setInterval(3000);
request.setRequestLevel(TencentLocationRequest.REQUEST_LEVEL_ADMIN_AREA);
int error = locationManager.requestLocationUpdates(request, this);
if (error == 0) {
System.out.println("地址获取成功");
}
}
}
@Override
public voidonLocationChanged(TencentLocation location, int error, String reason) {
// TODO Auto-generated method stub
// 定位成功,获取城市,街区地址
if (error ==TencentLocation.ERROR_OK) {
Log.d("location",""+ location);
Stringaddress = location.getCity().toString()
+location.getTown().toString();
if(location.getStreet().toString().equals("Unknown")) {
// 未得到街道地址
locationtext.setText(address);
}else{
// 得到街道地址
locationtext.setText(address+ location.getStreet().toString());
}
Toast.makeText(MainActivity.this, "当前位置为" + address + "!!返回可以重新定位",
Toast.LENGTH_SHORT).show();
// 停止定位
stopLocation();
}else{
// 停止定位
stopLocation();
// 定位失败
Toast.makeText(this, "定位失败,请连接网络", Toast.LENGTH_SHORT)
.show();
}
}
@Override
public void onStatusUpdate(Stringarg0, intarg1, String arg2) {
}
public void stopLocation() {
locationManager.removeUpdates(this);
}
}