亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Android_GPS

系統(tǒng) 2250 0

Android可以通過多種方式獲取用戶位置。本文主要將GPS和NETWORK兩種方式。

先簡(jiǎn)單的介紹下怎么在Android設(shè)備上獲取用戶位置。

  1. //獲取系統(tǒng)位置服務(wù)的引用
  2. LocationManagerlocationManager=(LocationManager) this .getSystemService(Context.LOCATION_SERVICE);
  3. //定義對(duì)位置變化的監(jiān)聽函數(shù)
  4. LocationListenerlocationListener= new LocationListener(){
  5. public void onLocationChanged(Locationlocation){
  6. //Calledwhenanewlocationisfoundbythenetworklocationprovider.
  7. makeUseOfNewLocation(location);
  8. }
  9. public void onStatusChanged(Stringprovider, int status,Bundleextras){}
  10. public void onProviderEnabled(Stringprovider){}
  11. public void onProviderDisabled(Stringprovider){}
  12. };
  13. //向位置服務(wù)注冊(cè)監(jiān)聽函數(shù)來接受位置更新
  14. locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0 , 0 ,locationListener);

首先要獲取LocationManager對(duì)象,LocationManager不能直接new出來,他是系統(tǒng)的一項(xiàng)服務(wù)。

requestLocationUpdates()方法是來更新用戶的位置的。第一個(gè)參數(shù)是Location Provider(位置提供者)的使用類型。(本例中使用的是基于手機(jī)信號(hào)塔和Wi_FI基站的網(wǎng)絡(luò)位置提供者)。二個(gè)參數(shù)是通知之間的最小時(shí)間間隔(單位微秒),第三個(gè)是通知之間最小的距離變化(單位米)。將兩個(gè)的值設(shè)置為零可以盡可能頻繁的獲取位置的通知。最后一個(gè)參數(shù)是 接受位置更新回調(diào)函數(shù)LocationListener。

為了使用GPS提供者來獲取位置的更新,可以將NETWORK_PROVIDER.更改為GPS_PROVIDER。也可以通過兩次調(diào)用requestLocationUpdates()(一次 NETWORK_PROVIDER ,一次GPS_PROVIDER.)來同時(shí)使用GPS和Network Location 內(nèi)容提供者獲取位置更新。

為了能夠接受來自 NETWORK_PROVIDER或者GPS_PROVIDER的位置更新,必須在Android 的mainifest的文件中聲明ACCESS_COARSE_LOCATION 或者ACCESS_FINE_LOCATION的用戶權(quán)限。如果沒有這些權(quán)限,會(huì)報(bào)錯(cuò)。NETWORK_PROVIDER需要ACCESS_COARSE_LOCATION權(quán)限(粗糙的定位權(quán)限),GPS_PROVIDER需要ACCESS_FINE_LOCATION權(quán)限(精確的定位權(quán)限)。當(dāng)然,如果有ACCESS_FINE_LOCATION權(quán)限,NETWORK_PROVIDER和GPS_PROVIDER都能用

LocationListener中的四個(gè)回調(diào)函數(shù)

onLocationChanged:當(dāng)位置變化時(shí)調(diào)用

onStatusChanged: 此方法在 Provider 的狀態(tài)在可用、暫時(shí)不可用和無服務(wù)三個(gè)狀態(tài)直接切換時(shí)被調(diào)用。 試了一下,在位置提供者為network的前提下,聯(lián)網(wǎng)和斷網(wǎng)此方法會(huì)被調(diào)用

onProviderEnabled和onProviderDisabled:provider 被用戶開啟或關(guān)閉后調(diào)用 。試了一下,在位置提供者為GPS的前提下,打開和關(guān)閉GPS此方法會(huì)被調(diào)用。

最后附上一個(gè)Demo:

  1. package com.tianjf.locationgpsdemo;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.location.Criteria;
  6. import android.location.Location;
  7. import android.location.LocationListener;
  8. import android.location.LocationManager;
  9. import android.os.Bundle;
  10. import android.provider.Settings;
  11. import android.widget.TextView;
  12. import android.widget.Toast;
  13. public class MainActivity extends Activity{
  14. TextViewmTextView;
  15. LocationManagermLocationManager;
  16. @Override
  17. protected void onCreate(BundlesavedInstanceState){
  18. super .onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_main);
  20. mTextView=(TextView)findViewById(R.id.text_view);
  21. mLocationManager=(LocationManager) this
  22. .getSystemService(Context.LOCATION_SERVICE);
  23. openGPSSetting();
  24. getLocation();
  25. }
  26. private void openGPSSetting(){
  27. if (mLocationManager
  28. .isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)){
  29. Toast.makeText( this , "GPS模塊正常" ,Toast.LENGTH_SHORT).show();
  30. return ;
  31. }
  32. Toast.makeText( this , "請(qǐng)開啟GPS!" ,Toast.LENGTH_SHORT).show();
  33. //跳轉(zhuǎn)到GPS的設(shè)置頁(yè)面
  34. Intentintent= new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
  35. startActivityForResult(intent, 0 ); //此為設(shè)置完成后返回到獲取界面
  36. }
  37. private void getLocation(){
  38. //android通過criteria選擇合適的地理位置服務(wù)
  39. Criteriacriteria= new Criteria();
  40. criteria.setAccuracy(Criteria.ACCURACY_FINE); //高精度
  41. criteria.setAltitudeRequired( false ); //設(shè)置不需要獲取海拔方向數(shù)據(jù)
  42. criteria.setBearingRequired( false ); //設(shè)置不需要獲取方位數(shù)據(jù)
  43. criteria.setCostAllowed( true ); //設(shè)置允許產(chǎn)生資費(fèi)
  44. criteria.setPowerRequirement(Criteria.POWER_LOW); //低功耗
  45. Stringprovider=mLocationManager.getBestProvider(criteria, true ); //獲取GPS信息
  46. Locationlocation=mLocationManager.getLastKnownLocation(provider); //通過GPS獲取位置
  47. updateUIToNewLocation(location);
  48. //設(shè)置監(jiān)聽器,自動(dòng)更新的最小時(shí)間為間隔N秒(這里的單位是微秒)或最小位移變化超過N米(這里的單位是米)
  49. mLocationManager.requestLocationUpdates(provider, 1 * 1000 , 0 .00001F,
  50. locationListener);
  51. }
  52. private void updateUIToNewLocation(Locationlocation){
  53. if (location!= null ){
  54. mTextView.setText( "緯度:" +location.getLatitude()+ "\n經(jīng)度"
  55. +location.getLongitude());
  56. //Location類的方法:
  57. //getAccuracy():精度(ACCESS_FINE_LOCATION/ACCESS_COARSE_LOCATION)
  58. //getAltitude():海撥
  59. //getBearing():方位,行動(dòng)方向
  60. //getLatitude():緯度
  61. //getLongitude():經(jīng)度
  62. //getProvider():位置提供者(GPS/NETWORK)
  63. //getSpeed():速度
  64. //getTime():時(shí)刻
  65. } else {
  66. mTextView.setText( "無法獲取地理信息" );
  67. }
  68. }
  69. //定義對(duì)位置變化的監(jiān)聽函數(shù)
  70. LocationListenerlocationListener= new LocationListener(){
  71. public void onLocationChanged(Locationlocation){
  72. System.out.println( "onLocationChanged" );
  73. System.out.println( "緯度:" +location.getLatitude()+ "\n經(jīng)度"
  74. +location.getLongitude());
  75. }
  76. public void onStatusChanged(Stringprovider, int status,Bundleextras){
  77. System.out.println( "onStatusChanged" );
  78. System.out.println( "privider:" +provider);
  79. System.out.println( "status:" +status);
  80. System.out.println( "extras:" +extras);
  81. }
  82. public void onProviderEnabled(Stringprovider){
  83. System.out.println( "onProviderEnabled" );
  84. System.out.println( "privider:" +provider);
  85. }
  86. public void onProviderDisabled(Stringprovider){
  87. System.out.println( "onProviderDisabled" );
  88. System.out.println( "privider:" +provider);
  89. }
  90. };
  91. }

轉(zhuǎn)自:http://blog.csdn.net/tianjf0514/article/details/8295099

Android_GPS


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!?。?/p>

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 99色视频在线| 日本色图在线 | 日本一级淫片a免费播放 | 福利一区在线视频 | 亚洲图片 中文字幕 | 日本免费网址 | 欧美成人高清免费大片观看 | 波多野结衣一区在线 | 一级一片免费看 | 亚洲精品欧洲精品 | 欧美视频一区二区三区在线观看 | 欧美成人香蕉在线观看 | 国产亚洲精品一区二区三区 | 久久精品视频亚洲 | 国产美女精品在线观看 | 黄色一级免费网站 | 日本成人一区二区三区 | 久久青草91免费观看 | 免费久久精品视频 | 天天成人 | 四虎在线最新地址4hu | 国产亚洲精品一区999 | 久草免费资源视频 | 狠狠色很很在鲁视频 | 国产精品福利视频一区二区三区 | 日韩国产成人资源精品视频 | 亚洲a视频在线观看 | 欧美日韩免费看 | 四虎影视久久久免费 | 国产精品视频色拍拍 | 久久精品亚洲欧美日韩久久 | 久久天天躁综合夜夜黑人鲁色 | 香蕉网站在线观看影院 | 一区在线播放 | 天天干天天爽天天操 | 日本工番囗番全彩本子大全 | 毛片视频免费观看 | 亚洲黄色片视频 | 久久在线精品视频 | 免费看日韩欧美一级毛片 | 色综合图区 |