Android手机定位完整代码

本文介绍了一个Android应用如何通过LocationManager获取当前位置信息,并利用Geocoder将经纬度转换为地址,实现地理位置的精确显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class LocationClient extends Activity implements LocationListener {
    private static final String TAG = LocationClient.class.getSimpleName();
    private static final String[] S = { "Out of Service",
            "Temporarily Unavailable", "Available" };

    private TextView output;
    private LocationManager locationManager;
    private String bestProvider;
    private Geocoder geocoder;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);      
        
        // Get the output UI
        output = (TextView) findViewById(R.id.output);
        
        // Get the location manager
        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        
        geocoder = new Geocoder(this);

        // List all providers:
        List<String> providers = locationManager.getAllProviders();
        for (String provider : providers) {
            printProvider(provider);
        }
        
        System.out.print("The providers: " + providers);
        
        Criteria criteria = new Criteria();
        bestProvider = locationManager.getBestProvider(criteria, false);
        output.append("\n\nBEST Provider:\n");

        printProvider(bestProvider);

        output.append("\n\nLocations (starting with last known):");
        Location location = locationManager.getLastKnownLocation(bestProvider);
        printLocation(location);

    }
    
    /** Register for the updates when Activity is in foreground */
    @Override
    protected void onResume() {
        super.onResume();
        locationManager.requestLocationUpdates(bestProvider, 2000, 1, this);
    }

    /** Stop the updates when Activity is paused */
    @Override
    protected void onPause() {
        super.onPause();
        locationManager.removeUpdates(this);
    }

    public void onLocationChanged(Location location) {
        printLocation(location);
    }

    public void onProviderDisabled(String provider) {
        // let okProvider be bestProvider
        // re-register for updates
        output.append("\n\nProvider Disabled: " + provider);
    }

    public void onProviderEnabled(String provider) {
        // is provider better than bestProvider?
        // is yes, bestProvider = provider
        output.append("\n\nProvider Enabled: " + provider);
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
        output.append("\n\nProvider Status Changed: " + provider + ", Status="
                + S[status] + ", Extras=" + extras);
    }

    private void printProvider(String provider) {
        LocationProvider info = locationManager.getProvider(provider);
        
        Log.d(TAG, "Name:" + info.getName());
        Log.d(TAG, "Accuracy:" + info.getAccuracy());
        Log.d(TAG, "Require Cell?  " + info.requiresCell());
        Log.d(TAG, "Require Network?  " + info.requiresNetwork());
        Log.d(TAG, "Require Satellite?  " + info.requiresSatellite());
        Log.d(TAG, "Supports Altitude? " + info.supportsAltitude());
        Log.d(TAG, "Supports Bearing? " + info.supportsBearing());
        Log.d(TAG, "Supports Speed? " + info.supportsSpeed());
        Log.d(TAG, "Power requirement?" + info.getPowerRequirement());
        Log.d(TAG, "Might steal my money?"+ info.hasMonetaryCost());
        
        output.append(info.toString() + "\n\n");
    }
    
    private void printLocation(Location location){


        if (location == null)
            output.append("\nLocation[unknown]\n\n");
        else
        {        
            String text = String.format("Latitude:\t %f \nLongitude:\t %f\n Altitude:\t %f\n Bearing:\t %f\n",
                    location.getLatitude(), location.getLongitude(), location.getAltitude(), location.getBearing());
            Log.d(TAG, text);
            output.append("\n\n"+text);
        }
        
        try{
            List<Address> addresses = geocoder.getFromLocation(location.getLatitude(),
                    location.getLongitude(), 10);
            for(Address address: addresses)
            {
                output.append("\n"+ address.getAddressLine(0));
            }
            
            
        }catch(Exception e)
        {
            Log.e("WhereAmI", "Couldn't get Geocoder data", e);
        }
    }
    
}
### ClamAV病毒库离线安装 #### 准备工作 为了在CentOS系统中实现ClamAV病毒库的离线安装,需先在一个可以访问互联网的机器上获取最新的病毒定义文件。这一步骤至关重要,因为离线环境中的主机无法直接连接网络来更新病毒库。 #### 获取最新病毒库 在联网环境中的一台计算机上执行以下操作: 1. 更新现有数据库到最新版本: ```bash freshclam ``` 2. 找到存储位置并将整个`/var/lib/clamav`目录打包压缩以便传输给目标离线服务器[^4]: ```bash tar czvf clamav-db.tar.gz /var/lib/clamav/ ``` #### 部署于离线环境 将上述创建好的`.tar.gz`档案通过安全的方式传送到待保护的目标离线CentOS服务器上。接着按照下面指示完成部署过程: 解压已传送过来的数据包至指定路径下(假设为`/usr/local/share/clamav`),如果该路径不存在则需要提前建立好相应目录结构: ```bash mkdir -p /usr/local/share/clamav && tar xzvf clamav-db.tar.gz -C /usr/local/share/clamav/ ``` 调整权限设置确保ClamAV服务账户拥有读取权限: ```bash chown -R clamav:clamav /usr/local/share/clamav/ chmod -R go+rX /usr/local/share/clamav/ ``` 最后修改配置文件指向新的本地病毒库位置,在`/etc/freshclam.conf`以及`/etc/clamd.d/scan.conf`(如果是独立模式的话)两个地方都需要做相应的更改, 添加或编辑如下参数: ```ini DatabaseDirectory /usr/local/share/clamav ``` 重启ClamAV相关服务使改动生效: ```bash systemctl restart clamd@scan.service ``` 此时已经成功完成了ClamAV病毒库的离线安装流程[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值