Android开发之GPS定位获取位置


在Android应用开发过程中,通常需要获取用户的位置。这就需要通过gps或者网络得到用户的地址。

下面代码实现了:

  • 检测GPS是否开启
  • 打开GPS应用
  • 获取用户位置

添加权限:

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />



代码:

	
	/**
	 * 判断GPS是否开启,GPS或者AGPS开启一个就认为是开启的
	 * @param context
	 * @return true 表示开启
	 */
	public static final boolean isOPen(final Context context) {
		LocationManager locationManager 
		                         = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
		// 通过GPS卫星定位,定位级别可以精确到街(通过24颗卫星定位,在室外和空旷的地方定位准确、速度快)
		boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
		// 通过WLAN或移动网络(3G/2G)确定的位置(也称作AGPS,辅助GPS定位。主要用于在室内或遮盖物(建筑群或茂密的深林等)密集的地方定位)
		boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
		
		if(gps==true)
		{
			Log.e(TAG, "Test" + "GPS is open");
		}
		
		if(network==true)
		{
			Log.e(TAG, "Test" + "network is open");
		}
		
		if (gps || network) {
			return true;
		}
		return false;
	}
	
	
	/*
	 * Toast.makeText( this, “Please turn on GPS”, Toast.LENGTH_SHORT ).show();
		Intent myIntent = new Intent( Settings.ACTION_SECURITY_SETTINGS );
		startActivity(myIntent);
	 */
	
	/**
	 * 强制帮用户打开GPS
	 * @param context
	 */
	public static final void openGPS(Context context) {
		Intent GPSIntent = new Intent();
		GPSIntent.setClassName("com.android.settings",
				"com.android.settings.widget.SettingsAppWidgetProvider");
		GPSIntent.addCategory("android.intent.category.ALTERNATIVE");
		GPSIntent.setData(Uri.parse("custom:3"));
		try {
			PendingIntent.getBroadcast(context, 0, GPSIntent, 0).send();
		} catch (CanceledException e) {
			e.printStackTrace();
		}
	}
	
	
	 //Get the Location by GPS or WIFI  
    public static Location getLocation(Context context) {  
        LocationManager locMan = (LocationManager) context  
                .getSystemService(Context.LOCATION_SERVICE);  
        Location location = locMan  
                .getLastKnownLocation(LocationManager.GPS_PROVIDER);  
        if (location == null) {  
            location = locMan  
                    .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);  
        }  
        return location;  
    }  

    //get address from location
     public static  Address getAddressbyLocation(Context context, Location location) {  
         Address result = null;  
         try {  
             if (location != null) {  
                 Geocoder gc = new Geocoder(context, Locale.CHINA);  
                  
                 double geoLatitude = location.getLatitude();  
                 double geoLongitude = location.getLongitude();  
                   
                 List<Address> lstAddress = gc.getFromLocation(geoLatitude,  
                         geoLongitude, 1);  
                 if (lstAddress.size() > 0) {  
                     result = lstAddress.get(0);  
                 }  
             }  
         } catch (Exception e) {  
             e.printStackTrace();  
         }  
         return result;  
     }  

测试代码:

	public static  void test(Context context) {

			Log.e(TAG, "Test" + isOPen(context));
			Log.e(TAG, "Test" + getAddressbyLocation(context, getLocation(context)).getAddressLine(0));
			Log.e(TAG, "Test" + getAddressbyLocation(context, getLocation(context)).getLocality());
			
	}





  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值