portaldacalheta.pt
  • หลัก
  • การจัดการวิศวกรรม
  • Kpi และ Analytics
  • เทคโนโลยี
  • ว่องไว
มือถือ

คำแนะนำสำหรับนักพัฒนาซอฟต์แวร์ Android สำหรับ API บริการตำแหน่งของ Google



การทราบตำแหน่งของผู้ใช้เป็นข้อมูลที่มีประโยชน์ใน แอพพลิเคชั่นมากมาย เราพัฒนาและใช้วันนี้ มีแอปพลิเคชั่นตามตำแหน่งยอดนิยมมากมายที่ทำให้ชีวิตของเราง่ายขึ้นรวมทั้งเปลี่ยนวิธีการใช้บริการเหล่านี้ ตัวอย่างคือแอปพลิเคชัน Foursquare ที่ได้รับความนิยมอย่างมากซึ่งผู้ใช้ที่ไปสถานประกอบการบ่อยครั้งและ 'เช็คอิน' มักจะได้รับส่วนลด Uber ซึ่งช่วยให้คุณนั่งรถจากโทรศัพท์มือถือในอัตราที่ต่ำกว่ารถแท็กซี่ทั่วไป รายการมีขนาดใหญ่และยังคงเติบโต

API บริการตำแหน่ง



ในบทความนี้เราจะสร้างแอปพลิเคชัน Android อย่างง่ายเพื่อกำหนดละติจูดและลองจิจูดของผู้ใช้โดยใช้ Google Location Services API ของ Android เมื่อไหร่ การพัฒนาแอปพลิเคชัน Android มีสองวิธีในการรับตำแหน่งของผู้ใช้



มีหลักการเกสตัลท์กี่ข้อ

แพ็คเกจ“ android.location”

แพ็คเกจ“ android.location” มีให้บริการตั้งแต่ Android เปิดตัวครั้งแรกและช่วยให้เราสามารถเข้าถึงบริการระบุตำแหน่งได้ บริการเหล่านี้ช่วยให้แอปพลิเคชันรับการอัปเดตตำแหน่งทางภูมิศาสตร์ของอุปกรณ์เป็นระยะ



แพ็คเกจนี้มีสองวิธีในการรับข้อมูลตำแหน่ง:

  • LocationManager.GPS_PROVIDER: กำหนดตำแหน่งโดยใช้ดาวเทียม ผู้ให้บริการรายนี้อาจใช้เวลาสักครู่ในการส่งคืนการแก้ไขตำแหน่งทั้งนี้ขึ้นอยู่กับเงื่อนไข



  • LocationManager.NETWORK_PROVIDER: กำหนดตำแหน่งตามความพร้อมของเสาสัญญาณและจุดเชื่อมต่อ WiFi ในบริเวณใกล้เคียง เร็วกว่า GPS_PROVIDER

เมื่อคุณกำลังมองหาตำแหน่งของผู้ใช้คุณต้องเล่นกับผู้ให้บริการเหล่านี้และความพร้อมให้บริการ ตามหลักการแล้วคุณจะได้รับตำแหน่งแรกโดยใช้ NETWORK_PROVIDER ซึ่งอาจไม่แม่นยำเท่า แต่เร็วกว่ามาก จากนั้นคุณอาจพยายามเพิ่มความแม่นยำด้วยการฟังตำแหน่งที่ดีขึ้นโดยใช้ GPS_PROVIDER



API ที่จัดเตรียมโดยแพ็กเกจนี้ค่อนข้างต่ำและต้องการให้นักพัฒนาแอปพลิเคชันจัดการรายละเอียดปลีกย่อยในการกำหนดเวลาที่จะขอข้อมูลตำแหน่งและกำหนดเวลาการโทรไปยัง API ด้วยวิธีที่เหมาะสมที่สุด เพื่อปรับปรุงประสบการณ์ของนักพัฒนาซอฟต์แวร์ด้วยบริการระบบตามตำแหน่งและลดขั้นตอนในการพัฒนาแอปพลิเคชันที่ทราบตำแหน่ง Google ได้แนะนำวิธีใหม่ในการขอตำแหน่งของผู้ใช้โดยใช้บริการ Google Play มี API ที่ง่ายกว่าพร้อมความแม่นยำสูงขึ้น geofencing พลังงานต่ำและอื่น ๆ อีกมากมาย

API บริการตำแหน่งของ Google

Google Location Services API หรือที่เรียกว่า FusedLocationProviderApi เป็นวิธีที่แนะนำของ Google ในการรับตำแหน่งของผู้ใช้ ให้ความแม่นยำที่ดีที่สุดตามความต้องการของเรา ข้อดีบางประการของการใช้ API นี้กับ API ก่อนหน้านี้คือ:



  • ความเรียบง่าย: แตกต่างจาก API ก่อนหน้านี้คุณไม่จำเป็นต้องติดต่อกับผู้ให้บริการหลายรายอีกต่อไป ให้คุณระบุความต้องการระดับสูงแทนเช่น 'ความแม่นยำสูง' หรือ 'พลังงานต่ำ' และจะใช้แนวทางที่เหมาะสม

  • ความพร้อมใช้งาน: ช่วยให้แอปของคุณสามารถเข้าถึงตำแหน่งที่ดีที่สุดและเป็นที่รู้จักล่าสุดได้ทันที โดยปกติข้อมูลนี้จะพร้อมใช้งานคุณเพียงแค่ต้องถาม



    กลยุทธ์การกำหนดราคาทำหน้าที่เป็นแนวทางในการบรรลุวัตถุประสงค์ด้านราคา
  • ประสิทธิภาพการใช้พลังงาน: ลดการใช้พลังงานของแอปพลิเคชันของคุณ

  • ความคล่องตัว: ตรงตามความต้องการที่หลากหลายตั้งแต่การใช้งานเบื้องหน้า - ต้องการข้อมูลตำแหน่งที่แม่นยำสูงไปจนถึงการใช้งานเบื้องหลัง - ต้องการการอัปเดตตำแหน่งเป็นระยะโดยมีผลกระทบด้านพลังงานเล็กน้อย



ให้เราสร้างแอปพลิเคชัน Android ตามตำแหน่งโดยใช้ API นี้ สำหรับสิ่งนี้เราจะใช้ IDE ที่แนะนำของ Google สำหรับการพัฒนาแอปพลิเคชัน Android - Android Studio . การเริ่มต้นใช้งาน Android Studio นั้นค่อนข้างตรงไปตรงมา เว็บไซต์ของพวกเขาอธิบายขั้นตอนที่เกี่ยวข้องกับการติดตั้งและกำหนดค่า Android Studio โดยละเอียดรวมถึงวิธีบูตแอปพลิเคชัน Android ตัวแรกของคุณสำหรับการพัฒนา

Android Studio ควรทำให้สิ่งต่างๆเป็นเรื่องง่ายสำหรับเรา อย่างไรก็ตามเราจะต้องเริ่มต้นด้วยการกำหนดค่าสคริปต์การสร้างและเพิ่มบริการ Google Play เป็นข้อมูลอ้างอิงสำหรับแอปพลิเคชันนี้ ซึ่งสามารถทำได้โดยการแก้ไขไฟล์“ build.gradle” ดังนี้:

dependencies { compile 'com.android.support:appcompat-v7:21.0.3' compile 'com.google.android.gms:play-services:6.5.87' // Add this line }

ในขณะที่ฉันเขียนบทความนี้บริการ Google Play เวอร์ชันล่าสุดที่มีให้คือ 6.5.87 ตรวจสอบให้แน่ใจว่าคุณได้ตรวจสอบเวอร์ชันล่าสุดก่อนที่จะเริ่ม ในกรณีที่เวอร์ชันใหม่กว่าออกมาในภายหลังและคุณตัดสินใจที่จะอัปเดตสำหรับโครงการของคุณเองให้ทดสอบคุณสมบัติที่เกี่ยวข้องกับตำแหน่งทั้งหมดกับ Android ทุกเวอร์ชันที่คุณรองรับ

ณ จุดนี้เราควรจะเริ่มทำงานจริงสำหรับแอปพลิเคชันของเราได้แล้ว

ขออนุญาตกำหนดค่า AndroidManifest.xml

Android มีคุณลักษณะด้านความปลอดภัยที่เฉพาะเจาะจงซึ่งจะป้องกันไม่ให้แอปพลิเคชันใด ๆ โดยพลการร้องขอตำแหน่งของผู้ใช้ ในการแก้ปัญหานี้เราต้องแก้ไข“ AndroidManifest.xml” และเพิ่มไฟล์ เราต้องการการอนุญาต สำหรับแอปพลิเคชันนี้:

private boolean checkGooglePlayServices(){ int checkGooglePlayServices = GooglePlayServicesUtil .isGooglePlayServicesAvailable(mContext); if (checkGooglePlayServices != ConnectionResult.SUCCESS) { /* * Google Play Services is missing or update is required * return code could be * SUCCESS, * SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED, * SERVICE_DISABLED, SERVICE_INVALID. */ GooglePlayServicesUtil.getErrorDialog(checkGooglePlayServices, mContext, REQUEST_CODE_RECOVER_PLAY_SERVICES).show(); return false; } return true; }

ในขณะที่เราดำเนินการอยู่เราควรกำหนดเวอร์ชันของบริการ Google Play ที่เราใช้สำหรับแอปพลิเคชันนี้:

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_RECOVER_PLAY_SERVICES) { if (resultCode == RESULT_OK) { // Make sure the app is not already connected or attempting to connect if (!mGoogleApiClient.isConnecting() && !mGoogleApiClient.isConnected()) { mGoogleApiClient.connect(); } } else if (resultCode == RESULT_CANCELED) { Toast.makeText(mContext, 'Google Play Services must be installed.', Toast.LENGTH_SHORT).show(); finish(); } } }

กำลังตรวจสอบความพร้อมให้บริการของ Google Play Services

ก่อนที่จะเข้าถึงคุณลักษณะต่างๆของบริการ Google Play เราต้องตรวจสอบว่าอุปกรณ์นั้นติดตั้งบริการ Google Play หรือไม่และเวอร์ชันนั้นเป็นเวอร์ชันที่เราตั้งใจจะใช้ (6.5.87)

protected synchronized void buildGoogleApiClient() { mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); }

วิธีนี้จะตรวจสอบ Google Play Services และในกรณีที่อุปกรณ์ไม่ได้ติดตั้งไว้ (หายาก แต่เคยเจอกรณีเช่นนี้) จะเปิดกล่องโต้ตอบพร้อมข้อผิดพลาดที่เกี่ยวข้องและเชิญผู้ใช้ให้ติดตั้ง / อัปเดต บริการ Google Play จาก Google Play Store

วิธีการเรียนรู้การเขียนโปรแกรม c

บริการ Google Play

หลังจากที่ผู้ใช้ดำเนินการแก้ปัญหาโดย“ GooglePlayServicesUtil.getErrorDialog ()” เสร็จแล้วเมธอดการโทรกลับ“ onActivityResult ()” จะเริ่มทำงานดังนั้นเราจึงต้องใช้ตรรกะบางอย่างเพื่อจัดการกับการเรียกนั้น:

package com.bitwoo.userlocation; import android.content.Intent; import android.location.Location; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesUtil; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.location.LocationServices; public class MainActivity extends ActionBarActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { private static int REQUEST_CODE_RECOVER_PLAY_SERVICES = 200; private GoogleApiClient mGoogleApiClient; private Location mLastLocation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (checkGooglePlayServices()) { buildGoogleApiClient(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } private boolean checkGooglePlayServices() { int checkGooglePlayServices = GooglePlayServicesUtil .isGooglePlayServicesAvailable(this); if (checkGooglePlayServices != ConnectionResult.SUCCESS) { /* * google play services is missing or update is required * return code could be * SUCCESS, * SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED, * SERVICE_DISABLED, SERVICE_INVALID. */ GooglePlayServicesUtil.getErrorDialog(checkGooglePlayServices, this, REQUEST_CODE_RECOVER_PLAY_SERVICES).show(); return false; } return true; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_RECOVER_PLAY_SERVICES) { if (resultCode == RESULT_OK) { // Make sure the app is not already connected or attempting to connect if (!mGoogleApiClient.isConnecting() && !mGoogleApiClient.isConnected()) { mGoogleApiClient.connect(); } } else if (resultCode == RESULT_CANCELED) { Toast.makeText(this, 'Google Play Services must be installed.', Toast.LENGTH_SHORT).show(); finish(); } } } protected synchronized void buildGoogleApiClient() { mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); } @Override public void onConnected(Bundle bundle) { } @Override public void onConnectionSuspended(int i) { } @Override public void onConnectionFailed(ConnectionResult connectionResult) { } }

การเข้าถึง Google API

ในการเข้าถึง Google API เราต้องดำเนินการอีกขั้นตอนหนึ่ง: สร้างอินสแตนซ์ของ GoogleApiClient ไคลเอ็นต์ Google API เป็นจุดเริ่มต้นทั่วไปสำหรับบริการ Google Play ทั้งหมดและจัดการการเชื่อมต่อเครือข่ายระหว่างอุปกรณ์ของผู้ใช้กับบริการ Google แต่ละรายการ ขั้นตอนแรกของเราคือการเริ่มต้นการเชื่อมต่อ ฉันมักจะเรียกรหัสนี้จากวิธีการ 'onCreate' ของกิจกรรม:

@Override protected void onStart() { super.onStart(); if (mGoogleApiClient != null) { mGoogleApiClient.connect(); } }

เรากำลังระบุการใช้งานอินเทอร์เฟซการเรียกกลับและ Location Service API ที่เราต้องการใช้ด้วยการเชื่อมโยงชุดของการเรียกใช้เมธอด การใช้งานอินเทอร์เฟซในกรณีนี้คือ“ this” จะได้รับการตอบสนองต่อเมธอด“ connect ()” แบบอะซิงโครนัสเมื่อการเชื่อมต่อกับบริการ Google Play ประสบความสำเร็จล้มเหลวหรือถูกระงับ หลังจากเพิ่มโค้ดนี้แล้ว“ MainActivity” ของเราควรมีลักษณะดังนี้:

@Override public void onConnected(Bundle bundle) { mLastLocation = LocationServices.FusedLocationApi.getLastLocation( mGoogleApiClient); if (mLastLocation != null) { Toast.makeText(this, 'Latitude:' + mLastLocation.getLatitude()+', Longitude:'+mLastLocation.getLongitude(),Toast.LENGTH_LONG).show(); } }

จากนั้นในเมธอด“ onStart” ของเราเราเรียกเมธอด“ เชื่อมต่อ” และรอให้เรียกใช้เมธอดการโทรกลับ“ onConnected”:

protected void createLocationRequest() { mLocationRequest = new LocationRequest(); mLocationRequest.setInterval(20000); mLocationRequest.setFastestInterval(5000); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); }

เมธอด“ onConnected” จะมีลักษณะดังนี้:

สร้างภาษาโปรแกรมของคุณเอง
protected void startLocationUpdates() { LocationServices.FusedLocationApi.requestLocationUpdates( mGoogleApiClient, mLocationRequest, this); }

การโทรกลับนี้จะเริ่มทำงานเมื่อมีการเชื่อมต่อบริการ Google Play ซึ่งหมายความว่าในตอนนั้นเราควรมีตำแหน่งสุดท้ายที่ทราบ อย่างไรก็ตามตำแหน่งนี้อาจเป็นค่าว่างได้ (หายาก แต่ไม่เป็นไปไม่ได้) ในกรณีนี้สิ่งที่ฉันแนะนำคือรับฟังการอัปเดตตำแหน่งซึ่งจะกล่าวถึงต่อไป

การรับฟังการอัปเดตตำแหน่ง

หลังจากที่คุณเรียกใช้“ getLastLocation” คุณอาจต้องการขอการอัปเดตเป็นระยะจาก Fused Location Provider ขึ้นอยู่กับใบสมัครของคุณช่วงเวลานี้อาจสั้นหรือยาว ตัวอย่างเช่นหากคุณกำลังสร้างแอปพลิเคชันที่ติดตามตำแหน่งของผู้ใช้ในขณะที่เขาขับรถคุณจะต้องฟังข้อมูลอัปเดตเป็นระยะเวลาสั้น ๆ ในทางกลับกันหากแอปพลิเคชันของคุณเกี่ยวกับการแบ่งปันตำแหน่งของผู้ใช้กับเพื่อนของเขาคุณอาจต้องขอตำแหน่งนาน ๆ ครั้ง

การสร้างคำขอนั้นค่อนข้างง่าย - คุณสามารถเรียกเมธอดนี้ภายในเมธอด 'onCreate':

public class MainActivity extends ActionBarActivity implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener { // ... @Override public void onLocationChanged(Location location) { mLastLocation = location; Toast.makeText(this, 'Latitude:' + mLastLocation.getLatitude()+', Longitude:'+mLastLocation.getLongitude(),Toast.LENGTH_LONG).show(); } }

เราจัดเตรียมไฟล์ LocationRequest วัตถุ. ตั้งช่วงเวลาเป็น 20 วินาที (20000 มิลลิวินาที) นอกจากนี้เรายังกำหนดอัตราการอัปเดตที่ควบคุมไว้เป็น 5 วินาที สิ่งนี้บอกให้ API จัดเตรียมการอัปเดตทุก ๆ 20 วินาที (โดยเฉพาะอย่างยิ่ง) แต่หากมีการเปลี่ยนแปลงภายในช่วงเวลา 5 วินาทีก็ควรให้ข้อมูลนั้นด้วย สุดท้ายเรากำหนดลำดับความสำคัญเป็น“ PRIORITY_HIGH_ACCURACY ” ในตัวเลือกลำดับความสำคัญอื่น ๆ ที่มีให้: PRIORITY_BALANCED_POWER_ACCURACY , PRIORITY_LOW_POWER , PRIORITY_NO_POWER .

เมื่อคุณสร้างคำขอแล้วคุณก็พร้อมที่จะเริ่มฟังการอัปเดตตำแหน่งหลังจากที่เมธอด“ onConnected ()” เริ่มทำงานแล้ว:

protected void stopLocationUpdates() { if (mGoogleApiClient != null) { LocationServices.FusedLocationApi.removeLocationUpdates( mGoogleApiClient, this); } }

สิ่งที่เหลืออยู่ตอนนี้คือการใช้วิธีการโทรกลับเพื่อตอบสนอง LocationListener อินเตอร์เฟซ:

@Override protected void onStop() { super.onStop(); if (mGoogleApiClient != null) { mGoogleApiClient.disconnect(); } }

หยุดฟังการอัปเดต

หยุดฟังการอัปเดต

สิ่งสำคัญคือต้องหยุดฟังการอัปเดตอย่างชัดเจนเมื่อคุณไม่ต้องการใช้งานอีกต่อไปหรือหากผู้ใช้ออกจากแอปพลิเคชันของคุณ ควรเรียกใช้วิธีการต่อไปนี้จากภายใน 'onPause' callback:

|_+_|

…และการยกเลิกการเชื่อมต่อ Google API:

ห่อ

อย่างที่คุณเห็นแนวคิดพื้นฐานที่อยู่เบื้องหลังการใช้แอปพลิเคชันที่ทราบตำแหน่งใน Android นั้นง่ายมาก ยิ่งไปกว่านั้นด้วย API ที่มีอยู่ซึ่งใช้งานง่ายและเข้าใจง่ายจึงไม่ควรสร้างแอปพลิเคชันพื้นฐานสำหรับ Android แอปพลิเคชันตัวอย่างขนาดเล็กที่เราสร้างขึ้นที่นี่มีขึ้นเพื่อแสดงให้เห็นว่า คุณสามารถค้นหาไฟล์ ซอร์สโค้ดสำหรับสิ่งนี้บน GitHub . โปรดทราบว่าเพื่อให้สิ่งต่างๆเรียบง่ายแอปพลิเคชันไม่ได้จัดการวิธีการโทรกลับ“ onConnectionFailed”

หวังว่าบทช่วยสอนนี้จะช่วยคุณในการเริ่มต้นใช้งาน Google Location Services API

กฎการออกแบบ Front-End สิบอันดับแรกสำหรับนักพัฒนา

ส่วนหน้าของเว็บ

กฎการออกแบบ Front-End สิบอันดับแรกสำหรับนักพัฒนา
วิธีการสร้างมูลค่าให้กับ Fintech Startup

วิธีการสร้างมูลค่าให้กับ Fintech Startup

นักลงทุนและเงินทุน

โพสต์ยอดนิยม
Nvidia Shield - สิ่งที่แตกต่างบนคอนโซลเกม Android
Nvidia Shield - สิ่งที่แตกต่างบนคอนโซลเกม Android
แผ่นโกงการจัดการโครงการ
แผ่นโกงการจัดการโครงการ
เริ่มต้นใช้งาน Microservices: บทช่วยสอน Dropwizard
เริ่มต้นใช้งาน Microservices: บทช่วยสอน Dropwizard
การแยกการเรียกเก็บเงิน: เรื่องของการเพิ่มประสิทธิภาพ API ภายใน GraphQL
การแยกการเรียกเก็บเงิน: เรื่องของการเพิ่มประสิทธิภาพ API ภายใน GraphQL
กรณีศึกษา: การใช้ ApeeScape เพื่อม้วนปลาใหญ่
กรณีศึกษา: การใช้ ApeeScape เพื่อม้วนปลาใหญ่
 
การประมาณต้นทุนซอฟต์แวร์ในการจัดการโครงการแบบ Agile
การประมาณต้นทุนซอฟต์แวร์ในการจัดการโครงการแบบ Agile
แชทล่ม - เมื่อ Chatbot ล้มเหลว
แชทล่ม - เมื่อ Chatbot ล้มเหลว
ที่ปรึกษาการระดมทุนกับนายหน้า - ตัวแทนจำหน่าย
ที่ปรึกษาการระดมทุนกับนายหน้า - ตัวแทนจำหน่าย
ทำให้ Web Front-end เชื่อถือได้ด้วย Elm
ทำให้ Web Front-end เชื่อถือได้ด้วย Elm
คู่มือสำหรับนักลงทุนเกี่ยวกับน้ำมันปาล์ม
คู่มือสำหรับนักลงทุนเกี่ยวกับน้ำมันปาล์ม
โพสต์ยอดนิยม
  • ตัวอย่างหลักเกสตัลท์ในชีวิตจริง
  • ผังบัญชีการเงินส่วนบุคคล
  • วิธีคิดราคาใบอนุญาตซอฟต์แวร์
  • วิธีใช้บูตสแตรปใน html
  • สุดยอดเฟรมเวิร์กส่วนหน้าของเว็บ
  • พอร์ตโฟลิโอของเว็บที่ใช้ลำดับชั้นภาพ
หมวดหมู่
  • การจัดการวิศวกรรม
  • Kpi และ Analytics
  • เทคโนโลยี
  • ว่องไว
  • © 2022 | สงวนลิขสิทธิ์

    portaldacalheta.pt