`
啸笑天
  • 浏览: 3462067 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

Android GPS基础

阅读更多
package org.example.locationtest;
import java.util.List;
import android.app.Activity;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.widget.TextView;

public class LocationTest extends Activity implements
      LocationListener { 
   // Define human readable names
   private static final String[] A = { "invalid", "n/a", "fine", "coarse" };
   private static final String[] P = { "invalid", "n/a", "low", "medium",
         "high" };
   private static final String[] S = { "out of service", "temporarily unavailable", "available" };
   
   private LocationManager mgr;
   private TextView output;
   private String best;

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      mgr = (LocationManager) getSystemService(LOCATION_SERVICE); 
      output = (TextView) findViewById(R.id.output);

      log("Location providers:");
      dumpProviders(); 

      Criteria criteria = new Criteria(); 
      best = mgr.getBestProvider(criteria, true);//获取最好的提供者
      log("\nBest provider is: " + best);

//      注:这里取到的GPS值是目前存储在GPS上的Location值,
//      如果刚刚打开GPS就用这个方法取Location取到的会是上一次代开GPS时取到的旧值。
//      等待GPS取得新值需要用LocationListener里的 onLocationChanged。
      log("\nLocations (starting with last known):");
      Location location = mgr.getLastKnownLocation(best); //通过最好的提供者获得GPS的方法
      dumpLocation(location);
   }
   
   @Override
   protected void onResume() {
      super.onResume();
      // Start updates (doc recommends delay >= 60000 ms)
      mgr.requestLocationUpdates(best, 15000, 1, this);//通过best启动(例如设置成LocationManager.GPS_PROVIDER就是通过gps启动),Location更新的设置是每隔15000ms更新一次,最后一个参数是LocationListener的一个引用,这个类需要实现
   }

   @Override
   protected void onPause() {
      super.onPause();
//      停止GPS运行:
      mgr.removeUpdates(this);
   }
   //如果需要去到GPS启动后取到的Location,必须用这个!  
   public void onLocationChanged(Location location) {
      dumpLocation(location);
   }
   // Provider被disable时触发此函数,比如GPS被关闭   
   public void onProviderDisabled(String provider) {
      log("\nProvider disabled: " + provider);
   }
   //  Provider被enable时触发此函数,比如GPS被打开   
   public void onProviderEnabled(String provider) {
      log("\nProvider enabled: " + provider);
   }
   // Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数   
   public void onStatusChanged(String provider, int status,
         Bundle extras) {
      log("\nProvider status changed: " + provider + ", status="
            + S[status] + ", extras=" + extras);
   }

   /** Write a string to the output window */
   private void log(String string) {
      output.append(string + "\n");
   }

   /** Write information from all location providers */
   private void dumpProviders() {
      List<String> providers = mgr.getAllProviders();
      for (String provider : providers) {
         dumpProvider(provider);
      }
   }

   /** Write information from a single location provider */
   private void dumpProvider(String provider) {
      LocationProvider info = mgr.getProvider(provider);
      StringBuilder builder = new StringBuilder();
      builder.append("LocationProvider[")
            .append("name=")
            .append(info.getName())
            .append(",enabled=")
            .append(mgr.isProviderEnabled(provider))//检测GPS是否已经启动:
            .append(",getAccuracy=")
            .append(A[info.getAccuracy() + 1])
            .append(",getPowerRequirement=")
            .append(P[info.getPowerRequirement() + 1])
            .append(",hasMonetaryCost=")
            .append(info.hasMonetaryCost())
            .append(",requiresCell=")
            .append(info.requiresCell())
            .append(",requiresNetwork=")
            .append(info.requiresNetwork())
            .append(",requiresSatellite=")
            .append(info.requiresSatellite())
            .append(",supportsAltitude=")
            .append(info.supportsAltitude())
            .append(",supportsBearing=")
            .append(info.supportsBearing())
            .append(",supportsSpeed=")
            .append(info.supportsSpeed())
            .append("]");
      log(builder.toString());
   }

   /** Describe the given location, which might be null */
   private void dumpLocation(Location location) {
      if (location == null)
         log("\nLocation[unknown]");
      else
//    	  double latitude = location.getLatitude();     //经度   
//        double longitude = location.getLongitude(); //纬度   
//        double altitude =  location.getAltitude();     //海拔   
         log("\n" + location.toString());
   }

}

 

分享到:
评论
1 楼 yagamil 2015-03-18  
你好,写的很好的demo程序。

不过有个问题, 当我用这个程序在手机上应用时, 我打开gps,停止使用网络wifi定位,但是onProviderDisabled 这个函数输出没有变化?

请问需要怎样才能真正的disable network 这个provider呢?

相关推荐

    AndroidGPS定位源码

    在Android平台上,GPS(全球定位系统)定位是开发者常用的功能之一,用于获取设备的精确位置信息。本资源提供了Android GPS定位的实例源码,对于学习和理解如何在Android应用中集成GPS定位至关重要。通过分析这些...

    Android GPS获得定位数据源代码

    尽管现在的Android开发更倾向于使用Google Play Services的FusedLocationProviderClient,但对于学习和理解Android定位机制的基础概念,这段代码仍具有参考价值。不过,实际应用中应考虑更多的因素,如定位精度、...

    android_gps

    一、Android GPS基础 1. AndroidManifest.xml配置:在开发Android应用时,首先要在`AndroidManifest.xml`文件中声明对GPS权限的使用,添加`&lt;uses-permission&gt;`标签,如: ```xml &lt;uses-permission android:name=...

    androidGPS下载

    综上所述,这个“androidGPS下载”资源集合为Android开发者提供了一个全面的学习平台,从理论知识到实践案例,覆盖了Android GPS定位的各个方面。无论你是初学者还是经验丰富的开发者,都可以从中找到有价值的信息,...

    Android读取GPS数据demo

    总之,“Android读取GPS数据demo”是一个实用的教学工具,它演示了如何集成和处理Android中的GPS数据,对于初学者来说,这是一个很好的起点,可以帮助他们理解和掌握Android定位服务的基础操作。

    Android Gps日志记录程序源码

    这个“Android Gps日志记录程序源码”提供了一个基础的框架,可以帮助开发者理解如何在Android平台上实现这样的功能。以下是基于这个项目的一些关键知识点: 1. **AndroidManifest.xml**:这是Android应用的核心...

    android GPS 数据采集源码

    这个"android GPS 数据采集源码"提供了一个基础框架,帮助开发者了解如何实现GPS数据的实时获取和处理。下面我们将深入探讨相关知识点。 1. GPS(全球定位系统): GPS是一种全球卫星导航系统,用于提供地理位置和...

    android gps 获取经纬度

    在Android开发中,获取GPS(全球定位系统)的经纬度是一项基本操作,它允许应用程序获取用户的实时地理位置信息。本文将详细讲解如何在Android应用中实现这个功能,以及相关的知识点。 首先,我们需要在...

    Android内置GPS与百度GPS对比.zip

    首先,内置GPS是Android系统中提供的一种基础定位服务。它依赖于手机硬件中的GPS芯片,该芯片接收到至少四颗卫星的信号后,通过三角定位计算出设备的经纬度坐标。这一过程通常需要较长时间,尤其是在室内或信号弱的...

    Android GPS运行线路轨迹

    在Android平台上,GPS(全球定位系统)的使用是开发者实现位置服务、导航和跟踪功能的基础。本项目聚焦于如何在地图上绘制GPS定位的运行轨迹,这是一个常见的需求,例如在运动健康类应用或者物流跟踪应用中。下面...

    Android Gps Test源码-IT计算机-毕业设计.zip

    通过这个项目,学生可以了解到Android应用开发的基础知识,包括Android Studio的使用、布局设计、事件处理、GPS服务的调用以及数据处理等多个方面。 1. **Android Studio入门**:首先,Android Studio是Android开发...

    Android GPS的小案例

    在Android平台上,GPS(全球定位系统)是移动应用开发中不可或缺的一部分,它允许开发者获取设备的位置信息,包括经纬度坐标、速度、海拔以及精确的时间戳等。本小案例旨在通过一个实际的应用示例来深入理解如何在...

    Android获取GPS定位示例程序

    在Android平台上,获取GPS定位是移动应用开发中的基础功能,尤其对于那些依赖地理位置信息的应用,如导航、社交、天气预报等。本示例程序"LocationDemo"是专门为开发者设计的,用于展示如何在Android Studio环境下...

    Android GPS定位 代码+APK

    在Android开发中,GPS定位是一项基础且重要的功能,它允许应用程序获取用户的位置信息,从而实现各种基于位置的服务,如导航、地图应用、社交网络签到等。本资源提供了一个实现Android GPS定位的源码示例,并附带了...

    Android Gps Test源码.rar

    《Android GPS测试应用源码深度解析》 在移动设备领域,Android系统因其开源特性而备受开发者青睐,其中GPS(全球定位系统)功能是Android应用程序的重要组成部分。本篇将深入探讨"Android Gps Test源码",它是一个...

    基于android的GPS系统

    综上所述,基于Android 2.3的GPS系统不仅涉及到基础的GPS定位,还包括与用户交互的设置、地址转换以及导航功能。通过合理利用Android提供的API和服务,开发者可以构建出功能完善的定位导航应用。而“iTracks”这个...

    android GPS获取经纬度

    在Android平台上,获取GPS经纬度是一项基础且重要的功能,它涉及到地理位置服务,广泛应用于地图导航、定位服务、社交应用等领域。下面将详细讲解如何在Android中实现这一功能,以及涉及的相关知识点。 首先,我们...

Global site tag (gtag.js) - Google Analytics