Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีที่ง่ายที่สุดในการรับตำแหน่งปัจจุบันของผู้ใช้บน Android


ตัวอย่างนี้สาธิตวิธีรับตำแหน่งปัจจุบันของผู้ใช้บน Android ด้วยวิธีที่ง่ายที่สุด

ขั้นตอนที่ 1 − สร้างโครงการใหม่ใน Android Studio ไปที่ไฟล์ ⇒ โครงการใหม่และกรอกรายละเอียดที่จำเป็นทั้งหมดเพื่อสร้างโครงการใหม่

ขั้นตอนที่ 2 − เพิ่มรหัสต่อไปนี้ใน res/layout/activity_main.xml

ขั้นตอนที่ 3 − เพิ่มการพึ่งพาต่อไปนี้ใน Gradle

การใช้งาน 'com.google.android.gms:play-services-location:17.0.0'

ขั้นตอนที่ 4 − เพิ่มรหัสต่อไปนี้ใน src/MainActivity.java

<ก่อนหน้า>นำเข้า androidx.annotation.NonNull;นำเข้า androidx.appcompat.app.AppCompatActivity;นำเข้า androidx.core.app.ActivityCompat;นำเข้า androidx.core.content.ContextCompat;นำเข้า android.Manifest;นำเข้า android.content.Intent;นำเข้า android.content.pm.PackageManager;นำเข้า android.location.Geocoder;นำเข้า android.location.Location;นำเข้า android.os.Bundle;นำเข้า android.os.Handler;นำเข้า android.os.ResultReceiver;นำเข้า android.util.Log; นำเข้า android.widget.TextView;นำเข้า android.widget.Toast;นำเข้า com.google.android.gms.location.FusedLocationProviderClient;นำเข้า com.google.android.gms.location.LocationCallback;นำเข้า com.google.android.gms.location .LocationRequest;import com.google.android.gms.location.LocationResult;import com.google.android.gms.location.LocationServices; MainActivity คลาสสาธารณะขยาย AppCompatActivity { FusedLocationProviderClient ส่วนตัว fusedLocationClient; คงที่ส่วนตัว int สุดท้าย LOCATION_PERMISSION_REQUEST_CODE =2; ส่วนตัว LocationAddressResultReceiver addressResultReceiver; TextView ส่วนตัว currentAddTv; ที่ตั้งส่วนตัวปัจจุบันที่ตั้ง; ส่วนตัว LocationCallback locationCallback; @Override ป้องกันโมฆะ onCreate (Bundle saveInstanceState) { super.onCreate (savedInstanceState); setContentView(R.layout.activity_main); addressResultReceiver =ใหม่ LocationAddressResultReceiver (ตัวจัดการใหม่ ()); currentAddTv =findViewById (R.id.textView); fusedLocationClient =LocationServices.getFusedLocationProviderClient (สิ่งนี้); locationCallback =ใหม่ LocationCallback () { @ แทนที่โมฆะสาธารณะ onLocationResult (LocationResult locationResult) { currentLocation =locationResult.getLocations ().get (0); getAddress(); } }; startLocationUpdates(); } @SuppressWarnings ("MissingPermission") เป็นโมฆะส่วนตัว startLocationUpdates () { if (ContextCompat.checkSelfPermission (นี่ Manifest.permission.ACCESS_FINE_LOCATION) !=PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions (นี่ สตริงใหม่ [] {.Manifest ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_REQUEST_CODE); } อื่น { LocationRequest locationRequest =ใหม่ LocationRequest (); locationRequest.setInterval (2000); locationRequest.setFastestInterval(1000); locationRequest.setPriority (LocationRequest.PRIORITY_HIGH_ACCURACY); fusedLocationClient.requestLocationUpdates (locationRequest, locationCallback, null); } } @SuppressWarnings("MissingPermission") private void getAddress() { if (!Geocoder.isPresent()) { Toast.makeText(MainActivity.this, "Can't find current address, ", Toast.LENGTH_SHORT).show() ); กลับ; } เจตนาเจตนา =เจตนาใหม่ (นี่ GetAddressIntentService.class); Intent.putExtra("add_receiver", addressResultReceiver); Intent.putExtra("add_location", ตำแหน่งปัจจุบัน); startService(เจตนา); } @ แทนที่โมฆะสาธารณะ onRequestPermissionsResult (int requestCode, @NonNull String[] การอนุญาต, @NonNullint[] grantResults) { if (requestCode ==LOCATION_PERMISSION_REQUEST_CODE) { if (grantResults.length> 0 &&Grant =Packages[] { startLocationUpdates (); } อื่น { Toast.makeText (นี่คือ "ไม่ได้รับอนุญาตให้ระบุตำแหน่ง" + "รีสตาร์ทแอปหากคุณต้องการคุณลักษณะ", Toast.LENGTH_SHORT).show(); } }} คลาสส่วนตัว LocationAddressResultReceiver ขยาย ResultReceiver { LocationAddressResultReceiver (ตัวจัดการตัวจัดการ) { super (ตัวจัดการ); } @Override ป้องกันโมฆะ onReceiveResult (int resultCode, Bundle resultData) { if (resultCode ==0) { Log.d ("Address", "Location null retrying"); getAddress(); } if (resultCode ==1) { Toast.makeText(MainActivity.this, "Address not found, ", Toast.LENGTH_SHORT).show(); } สตริง currentAdd =resultData.getString("address_result"); แสดงผลลัพธ์ (currentAdd); } } โมฆะส่วนตัว showResults (สตริง currentAdd) { currentAddTv.setText (currentAdd); } @Override ป้องกันโมฆะ onResume () { super.onResume (); startLocationUpdates(); } @Override ป้องกันโมฆะ onPause() { super.onPause(); fusedLocationClient.removeLocationUpdates (locationCallback); }}

ขั้นตอนที่ 5 − สร้างคลาส Java ใหม่ GetaddressIntentService.java และเพิ่มรหัสต่อไปนี้

แพ็คเกจ app.com.sample;import android.app.IntentService;import android.content.Intent;import android.location.Address;import android.location.Geocoder;import android.location.Location;นำเข้า android.os Bundle นำเข้า android.os.ResultReceiver นำเข้า android.util.Log นำเข้า java.util.List นำเข้า java.util.Locale นำเข้า java.util.Objects นำเข้า androidx.annotation.Nullable คลาสสาธารณะ GetAddressIntentService ขยาย IntentService { ตัวระบุสตริงสุดท้ายคงที่ส่วนตัว ="GetAddressIntentService"; ส่วนตัว ResultReceiver ที่อยู่ResultReceiver; สาธารณะ GetAddressIntentService () { super (IDENTIFIER); } @Override ป้องกันโมฆะบน HandleIntent(@Nullable Intent เจตจำนง) { ข้อความข้อความสตริง; addressResultReceiver =Objects.requireNonNull(เจตนา).getParcelableExtra("add_receiver"); ถ้า (addressResultReceiver ==null) { Log.e ("GetAddressIntentService", "ไม่มีผู้รับ ไม่ดำเนินการตามคำขอเพิ่มเติม"); กลับ; } ตำแหน่งที่ตั้ง =Intent.getParcelableExtra("add_location"); if (location ==null) { msg ="ไม่มีตำแหน่ง ไม่สามารถไปต่อได้หากไม่มีตำแหน่ง"; sendResultsToReceiver(0, msg); กลับ; } Geocoder geocoder =ใหม่ Geocoder(นี้, Locale.getDefault()); รายการที่อยู่ <ที่อยู่> =null; ลอง { ที่อยู่ =geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1); } catch (ข้อยกเว้น ioException) { Log.e ("", "ข้อผิดพลาดในการรับที่อยู่สำหรับตำแหน่ง"); } if (addresses ==null || address.size() ==0) { msg ="ไม่พบที่อยู่ของสถานที่"; sendResultsToReceiver(1, msg); } อื่น ๆ { ที่อยู่ =address.get(0); สตริง addressDetails =address.getFeatureName() + "\n" + address.getThoroughfare() + "\n" + "Locality:" + address.getLocality() + "\n" + "County:" + address.getSubAdminArea( ) + "\n" + "สถานะ:" + address.getAdminArea() + "\n" + "ประเทศ:" + address.getCountryName() + "\n" + "รหัสไปรษณีย์:" + address.getPostalCode() + "\n"; sendResultsToReceiver(2, รายละเอียดที่อยู่); }} โมฆะส่วนตัว sendResultsToReceiver (int resultCode ข้อความสตริง) { Bundle Bundle =ชุดใหม่ (); bundle.putString("address_result", ข้อความ); addressResultReceiver.send (รหัสผลลัพธ์ บันเดิล); }}

ขั้นตอนที่ 6 − เพิ่มรหัสต่อไปนี้ใน androidManifest.xml

     <หมวดหมู่ android:name=" android.intent.category.LAUNCHER" />   

มาลองเรียกใช้แอปพลิเคชันของคุณกัน ฉันคิดว่าคุณได้เชื่อมต่ออุปกรณ์มือถือ Android จริงกับคอมพิวเตอร์ของคุณ ในการรันแอพจาก android studio ให้เปิดไฟล์กิจกรรมของโปรเจ็กต์ของคุณแล้วคลิก Run วิธีที่ง่ายที่สุดในการรับตำแหน่งปัจจุบันของผู้ใช้บน Android ไอคอนจากแถบเครื่องมือ เลือกอุปกรณ์มือถือของคุณเป็นตัวเลือก แล้วตรวจสอบอุปกรณ์มือถือของคุณซึ่งจะแสดงหน้าจอเริ่มต้นของคุณ -

วิธีที่ง่ายที่สุดในการรับตำแหน่งปัจจุบันของผู้ใช้บน Android