ฉันจะทราบได้อย่างไรว่ามีการเปิดใช้งาน GPS ของอุปกรณ์ Android หรือไม่


คำตอบ:


456

วิธีที่ดีที่สุดน่าจะเป็นดังต่อไปนี้:

 final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );

    if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
        buildAlertMessageNoGps();
    }

  private void buildAlertMessageNoGps() {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
           .setCancelable(false)
           .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
               public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                   startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
               }
           })
           .setNegativeButton("No", new DialogInterface.OnClickListener() {
               public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                    dialog.cancel();
               }
           });
    final AlertDialog alert = builder.create();
    alert.show();
}

1
ส่วนใหญ่เกี่ยวกับการตั้งใจที่จะดูการตั้งค่า GPS ดูgithub.com/marcust/HHPT/blob/master/src/org/thiesen/hhpt/ui/…สำหรับรายละเอียด
มาร์คัส

3
โค้ดที่ดี ฉันลบ @SuppressWarnings ออกแล้วและไม่ได้รับคำเตือนใด ๆ ... บางทีพวกมันไม่จำเป็นเลยเหรอ?
ช่วงเวลา

30
ผมจะแนะนำให้ประกาศalertสำหรับกิจกรรมทั้งหมดเพื่อให้คุณสามารถยกเลิกมันใน OnDestroy เพื่อหลีกเลี่ยงการรั่วไหลของหน่วยความจำ ( if(alert != null) { alert.dismiss(); })
คาเมรอน

ดังนั้นถ้าฉันประหยัดแบตเตอรี่จะยังใช้งานได้อยู่
Prakhar Mohan Srivastava

3
@PrakharMohanSrivastava หากการตั้งค่าตำแหน่งของคุณเป็นการประหยัดพลังงานสิ่งนี้จะคืนค่าเป็นเท็จ แต่LocationManager.NETWORK_PROVIDERจะกลับมาจริง
ทิม

129

ใน android เราสามารถตรวจสอบว่ามีการเปิดใช้งาน GPS ในอุปกรณ์หรือไม่โดยใช้ LocationManager

นี่เป็นโปรแกรมง่าย ๆ ในการตรวจสอบ

GPS เปิดใช้งานหรือไม่: - เพิ่มบรรทัดสิทธิ์ผู้ใช้ด้านล่างใน AndroidManifest.xml ไปยังตำแหน่งการเข้าถึง

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

ไฟล์คลาส java ของคุณควรเป็น

public class ExampleApp extends Activity {
    /** Called when the activity is first created. */
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
            Toast.makeText(this, "GPS is Enabled in your devide", Toast.LENGTH_SHORT).show();
        }else{
            showGPSDisabledAlertToUser();
        }
    }

    private void showGPSDisabledAlertToUser(){
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setMessage("GPS is disabled in your device. Would you like to enable it?")
        .setCancelable(false)
        .setPositiveButton("Goto Settings Page To Enable GPS",
                new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                Intent callGPSSettingIntent = new Intent(
                        android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(callGPSSettingIntent);
            }
        });
        alertDialogBuilder.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                dialog.cancel();
            }
        });
        AlertDialog alert = alertDialogBuilder.create();
        alert.show();
    }
}

ผลลัพธ์จะดูเหมือน

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่


1
ไม่มีอะไรเกิดขึ้นเมื่อฉันลองฟังก์ชั่นของคุณ ฉันไม่มีข้อผิดพลาดเมื่อทำการทดสอบ
Airikr

ฉันเข้าใจแล้ว! :) ขอบคุณมาก แต่ฉันลงคะแนนไม่ได้จนกว่าคุณจะได้แก้ไขคำตอบของคุณ: /
Airikr

3
ไม่มีปัญหา @Erik Edgren คุณได้รับการแก้ปัญหาดังนั้นฉันมีความสุขเพลิดเพลินไปกับ ... !!

@ user647826: ยอดเยี่ยม! ทำงานได้ดี คุณช่วยฉันคืน
Addi

1
คำแนะนำ: ประกาศalertสำหรับกิจกรรมทั้งหมดเพื่อให้คุณสามารถยกเลิกได้onDestroy()เพื่อหลีกเลี่ยงการรั่วไหลของหน่วยความจำ ( if(alert != null) { alert.dismiss(); })
naXa

38

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

ตรวจสอบว่ามีผู้ให้บริการตำแหน่งหรือไม่

    String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
    if(provider != null){
        Log.v(TAG, " Location providers: "+provider);
        //Start searching for location and update the location text when update available
        startFetchingLocation();
    }else{
        // Notify users and show settings if they want to enable GPS
    }

หากผู้ใช้ต้องการเปิดใช้งาน GPS คุณอาจแสดงหน้าจอการตั้งค่าด้วยวิธีนี้

Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, REQUEST_CODE);

และใน onActivityResult คุณสามารถดูว่าผู้ใช้ได้เปิดใช้งานหรือไม่

    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(requestCode == REQUEST_CODE && resultCode == 0){
            String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
            if(provider != null){
                Log.v(TAG, " Location providers: "+provider);
                //Start searching for location and update the location text when update available. 
// Do whatever you want
                startFetchingLocation();
            }else{
                //Users did not switch on the GPS
            }
        }
    }

นั่นเป็นวิธีหนึ่งที่จะทำและฉันหวังว่ามันจะช่วย แจ้งให้เราทราบหากฉันทำอะไรผิด


2
สวัสดีฉันมีปัญหาที่คล้ายกัน ... คุณสามารถอธิบายสั้น ๆ ว่า "REQUEST_CODE" คืออะไรและใช้ทำอะไร
poeschlorn

2
@poeschlorn Anna โพสต์ลิงก์ตามรายละเอียดด้านล่าง กล่าวง่ายๆคือ RequestCode ให้คุณใช้startActivityForResultกับหลาย intents ได้ เมื่อเจตนากลับสู่กิจกรรมของคุณคุณตรวจสอบ RequestCode เพื่อดูว่าเจตนาจะกลับมาและตอบสนองตามนั้น
Farray

2
providerสามารถเป็นสตริงที่ว่างเปล่า ฉันต้องเปลี่ยนการตรวจสอบเป็น(provider != null && !provider.isEmpty())
Pawan

เนื่องจากผู้ให้บริการสามารถเป็น "" ให้พิจารณาใช้โหมด int = Settings.Secure.getInt (getContentResolver (), Settings.Secure.LOCATION_MODE); หากโหมด = 0 GPS ปิด
Levon Petrosyan

31

นี่คือขั้นตอน:

ขั้นตอนที่ 1:สร้างบริการที่ทำงานในพื้นหลัง

ขั้นตอนที่ 2:คุณต้องได้รับอนุญาตในไฟล์ Manifest ดังต่อไปนี้:

android.permission.ACCESS_FINE_LOCATION

ขั้นตอนที่ 3:เขียนรหัส:

 final LocationManager manager = (LocationManager)context.getSystemService    (Context.LOCATION_SERVICE );

if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) )
  Toast.makeText(context, "GPS is disabled!", Toast.LENGTH_LONG).show(); 
else
  Toast.makeText(context, "GPS is enabled!", Toast.LENGTH_LONG).show();

ขั้นตอนที่ 4:หรือเพียงแค่คุณสามารถตรวจสอบการใช้:

LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);

ขั้นตอนที่ 5:เรียกใช้บริการของคุณอย่างต่อเนื่องเพื่อตรวจสอบการเชื่อมต่อ


5
มันบอกว่าเปิดใช้งาน GPS แม้ในขณะที่ปิดอยู่
Ivan V

15

ใช่คุณสามารถตรวจสอบด้านล่างเป็นรหัส:

public boolean isGPSEnabled (Context mContext){
    LocationManager locationManager = (LocationManager)
                mContext.getSystemService(Context.LOCATION_SERVICE);
    return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}

9

วิธีนี้จะใช้บริการLocationManager

ลิงค์ที่มา

//Check GPS Status true/false
public static boolean checkGPSStatus(Context context){
    LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE );
    boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    return statusOfGPS;
};

6

GPS จะถูกใช้หากผู้ใช้ได้อนุญาตให้ใช้ในการตั้งค่า

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

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


6

รหัสนี้จะตรวจสอบสถานะ GPS

final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
    buildAlertMessageNoGps();
}

`


3

ในตัวจัดการLocationListenerการนำไปใช้onProviderEnabledและonProviderDisabledตัวจัดการเหตุการณ์ เมื่อคุณโทรrequestLocationUpdates(...)หาก GPS ถูกปิดการใช้งานในโทรศัพท์onProviderDisabledจะถูกเรียก; หากผู้ใช้เปิดใช้งาน GPS onProviderEnabledจะถูกเรียก


2
In Kotlin: - How to check GPS is enable or not

 val manager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
        if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            checkGPSEnable()

        } 


 private fun checkGPSEnable() {
        val dialogBuilder = AlertDialog.Builder(this)
        dialogBuilder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
                .setCancelable(false)
                .setPositiveButton("Yes", DialogInterface.OnClickListener { dialog, id
                    ->
                    startActivity(Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS))
                })
                .setNegativeButton("No", DialogInterface.OnClickListener { dialog, id ->
                    dialog.cancel()
                })
        val alert = dialogBuilder.create()
        alert.show()
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.