Android_APP调用Location功能

记录一下Android APP调用Location功能的使用方法。
主要是LocationManager,LocationListener这两个:

1.LocationManager
可以用来获取当前的位置,追踪设备的移动路线,或设定敏感区域,在进入或离开敏感区域时设备会发出特定警报 。

requestLocationUpdates(provider,1000L,0.0F,MainActivity.this.locationListener);

2.LocationListener
位置监听,监听位置变化,监听设备开关与状态。

    LocationListener listener=new LocationListener() {
    			
    			@Override
    			public void onStatusChanged(String provider, int status, Bundle extras) {
    				// TODO Auto-generated method stub	
    			}
    		@Override
    			public void onProviderEnabled(String provider) {
    				// TODO Auto-generated method stub	
    			}
    			@Override
    			public void onProviderDisabled(String provider) {
    				// TODO Auto-generated method stub	
    			}
    			@Override
    			public void onLocationChanged(Location location) {
    				// TODO Auto-generated method stub
    			}
    		};

APP 的实现,直接贴代码鸭,主要是两个button控件去控制定位请求的开关,TextView打印定位位置的相关信息

package com.example.gps;
import java.util.Date;
import android.app.Activity;
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends Activity {
	
	//定义控件和位置服务的对象
	public static Button button1;
	public static Button button2;
	public static TextView tv1;
	public LocationManager locationF = null;
	public LocationListener locationListener = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      //加载当前的布局文件
        setContentView(R.layout.activity_main);
        this.button1=((Button)findViewById(R.id.button1));
        this.button2=((Button)findViewById(R.id.button2));
        this.tv1=(TextView)findViewById(R.id.TextView1);
         
       //调用getSystemService()方法来获取位置服务
      final LocationManager locationF=((LocationManager)getSystemService(Context.LOCATION_SERVICE));
      
      	//创建button1的点击事件监听
      	/*button1点击事件主要实现:创建Criteria对象,利用它去获取最优的位置服务
      	 * 创建LocationListener去监听当前位置信息
      	 * 在位置信息变化时在onLocationChanged()方法中获取当前位置信息(经纬度/海拔/时间)
      	 */
        this.button1.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				
				//判断当前locationListener是否空
				if (locationListener != null) {
					locationF.removeUpdates(locationListener);
				}   
				//重置TextView显示的位置信息
				   MainActivity.tv1.setText("");
				    Criteria criteria = new Criteria();
                	criteria.setAccuracy(Criteria.ACCURACY_FINE);
                	criteria.setPowerRequirement(Criteria.POWER_LOW);
                	criteria.setAltitudeRequired(false);
                	criteria.setSpeedRequired(false);
                	criteria.setCostAllowed(false);
                	String provider=locationF.getBestProvider(criteria, true);
                	//查看当前使用的Location Provider
                	 Toast toast=Toast.makeText(getApplicationContext(), "当前使用的provider:"+provider, Toast.LENGTH_SHORT);
                	 toast.show();
                	 
				
				MainActivity.this.locationListener=new LocationListener() {
					
					@Override
					public void onStatusChanged(String provider, int status, Bundle extras) {
						// TODO Auto-generated method stub
						
					}
					
					@Override
					public void onProviderEnabled(String provider) {
						// TODO Auto-generated method stub
						
					}
					
					@Override
					public void onProviderDisabled(String provider) {
						// TODO Auto-generated method stub
						
					}
					
					@Override
					public void onLocationChanged(Location location) {
						// TODO Auto-generated method stub
						  double d1 = location.getLatitude();//获取经度
			              double d2 = location.getLongitude();//获取纬度
			              double d3 =location.getAltitude();//获取海拔
			              Date d4 =new Date(location.getTime());//获取时间
			              MainActivity.this.tv1.setText("经度:"+d1+"\n纬度:"+d2+"\n海拔:"+d3+"\n时间"+d4);//打印位置信息
					}
				};
				//通过requestLocationUpdates()去请求定位
				locationF.requestLocationUpdates(provider,1000L,0.0F,MainActivity.this.locationListener);

			}
		});
        //创建button2的点击事件监听,使用removeUpdates() remove当前的位置监听LocationListener,停止位置请求。
        this.button2.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//判断当前locationListener是否空
			 if (MainActivity.this.locationListener != null) {
			locationF.removeUpdates(MainActivity.this.locationListener);
			}
			}
		});
       
    }
}

Manifest文件必须加上两个权限允许

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

结果截图:
在这里插入图片描述
具体可看代码的备注信息。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值