`
啸笑天
  • 浏览: 3438671 次
  • 性别: 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呢?

相关推荐

    Android Gps日志记录程序源码

    Android 基础开发 Gps日志记录程序源码 个人觉得还是比较完善的

    Android_GPS.zip_android_android gps

    Android_GPS架构分析,在源码的基础上详细分析

    Android程序设计基础

    Android基础教程(你的第一本Android书) 基本信息 原书名: Hello, Android: Introducing Google's Mobile Development Platform 原出版社: Pragmatic Bookshelf 作者: (美)Ed Burnette 译者: 张波 高朝勤 ...

    Android GPS详解及示例代码

    本文主要讲解Android GPS,这里整理了GPS 的基础知识资料,并提供示例代码和实现效果图,有兴趣的小伙伴可以参考下

    Android 高德地图定位和实时导航

    Android 高德地图基础地图的显示,GPS定位和实时导航。

    Android之GPS架构分析

    以android2.2为基础,阐述GPS的数据流程及重要代码剖析,希望对大家有帮助。

    Android应用开发详解

    Android开发基础,讲述了Android开发环境的搭建、Android常用工具的使用和第一个Android应用程序的开发 第二篇 技术篇 第3章 Android中的资源访问 Android 中的资源访问,讲述了如何定义和访问Android中的外部...

    《Android应用开发详解》源码_文档讲解

    《Android应用开发详解源码》目录第1章 Android概述 第2章 Android开发基础 第3章 Android中的资源访问 第4章 Android用户界面 第5章 Android基本程序单元Activity 第6章 Android组件之间的信使Intent 第7章 Android...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    android一步一步最基础学习__新手

    第一讲:Android开发环境...第二十六讲:Android中的GPS应用入门 第二十七讲:Handler使用入门 第二十八讲:Android多媒体(Media)入门 第二十九讲:WebView学习指南 第三十讲:URLConnection和HttpClient使用入门

    android应用开发详解 郭宏志编著 pdf格式

    第十四章 android中的GPS应用 第三篇 应用篇 第十五章 android应用案例--移动警务室 第十六章 android应用案例--雷电游戏 第十七章 android应用案例--备忘录 第十八章 android应用案例--无线点餐系统

    android开发入门与实战源码

    本书内容上覆盖了用Android开发的大部分场景,从Android基础介绍、环境搭建、SDK介绍、Market使用,到应用剖析、组件介绍、实例演 示等方面。从技术实现上,讲解了5个Android平台下的完整综合实例及源代码分析,分别...

    Android移动应用开发(第3版)卷Ⅰ基础篇 (Shane Conder, Lauren Darcey) PDF扫描版

     《Android移动应用开发(第3版)卷Ⅰ:基础篇》涵盖了Android开发从概念、技术到市场推广应用的全部主题,内容包括Android平台概览、Android应用程序设计精髓、Android用户界面设计精髓、Android应用程序设计精髓、...

    Android GPS定位详解及实例代码

     一、Android基础知识准备  1、Activity类  每一种移动开发环境都有自己的基类。如J2ME应用程序的基类是midlets,BREW的基类是applets,而Android程序的基类是Activity。这个activity为我们提供了对移动操作系统...

    Android高薪之路:Android程序员面试宝典 李宁

    14 4 Google地图与GPS 14 5 桌面插件 14 6 输入法开发 14 7 测试驱动开发 14 8 性能优化"&gt;下载一个cebx阅读器即可 《Android高薪之路:Android程序员面试宝典》目录: 第1章 Android入门 1 1 关于Android的非技术...

    android精品源码

    Android_GoogleMaps基础开发教程.pdf Android_GPS架构分析.doc android_jni操作指南.pdf android_JNI编程_一些技巧.doc Android_NDK开发实例.doc Android_RIL层剖析(官方翻译).doc Android与JUnit深入浅出.pdf ...

    老罗android开发视频教程全集百度网盘下载

    Android基础阶段:平台架构特性(JAVA/C) Market/应用程序组件 环境搭建与部署/打包与发布 AVD/DDMS/AAPT 调试与测试 相关资源访问/资源制作 Activity/Service/Broadcast Receiver/Content Provider/原理(生命周期)及...

    Android应用开发详解pdf.pdf

     第2章 Android开发基础Android开发基础,讲述了Android开发环境的搭建、Android常用工具的使用和第一个Android应用程序的开发  第二篇 技术篇第3章 Android中的资源访问Android 中的资源访问,讲述了如何定义和...

    Android 初学中阶高阶书籍_集合打包2

    段,Android 图像处理篇,Android_CTS测试研,GoogleMaps基础开发教程,Android_GPS架构分析,android_JNI编程_一些技 巧,android_jni操作指南,Android_NDK开发实例,Android_RIL层剖析(官方翻译),Android2.2+API+中文...

Global site tag (gtag.js) - Google Analytics