Bir Android cihazın GPS'inin etkin olup olmadığını nasıl öğrenebilirim?


Yanıtlar:


456

En iyi yol aşağıdaki gibi görünüyor:

 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
Temel olarak GPS yapılandırmasını görmek niyetindedir , ayrıntılar için github.com/marcust/HHPT/blob/master/src/org/thiesen/hhpt/ui/… adresine bakın.
Marcus

3
Güzel kod snippet'i. @SuppressWarnings'i kaldırdım ve uyarı almıyorum ... belki de gereksizdir?
span

30
alertTüm etkinlik için bildirmenizi öneririm , böylece bir bellek sızıntısını önlemek için onDestroy'da kapatabilirsiniz ( if(alert != null) { alert.dismiss(); })
Cameron

Peki, Pil Tasarrufu içindeysem, bu hala çalışır mı?
Prakhar Mohan Srivastava

3
@PrakharMohanSrivastava Konum ayarlarınız Güç Tasarrufu üzerindeyse, bu yanlış döner, ancak LocationManager.NETWORK_PROVIDERdoğru döner
Tim

129

Android'de, GPS'in cihazda etkinleştirilip etkinleştirilmediğini LocationManager kullanarak kolayca kontrol edebiliriz.

İşte kontrol etmek için basit bir program.

GPS Etkin veya Not: - Konum Konumuna AndroidManifest.xml dosyasında aşağıdaki kullanıcı izin satırını ekleyin

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

Java sınıfı dosyanız

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();
    }
}

Çıktı şöyle görünecek

resim açıklamasını buraya girin

resim açıklamasını buraya girin


1
İşlevi denediğimde hiçbir şey olmuyor. Yine de test ederken hiçbir hatam yok.
Airikr

Çalıştırdım! :) Çok teşekkürler ama cevabınızı düzenleyene kadar oy kullanamıyorum: /
Airikr

3
sorun yok @Erik Edgren çözüm olsun çok mutlu ENjoy ... !!

@ user647826: Mükemmel! Güzel çalışıyor.
Gecemi

1
Bir tavsiye: alerttüm aktiviteyi ilan edin, böylece onDestroy()bir bellek sızıntısını önlemek için işten çıkarabilirsiniz ( if(alert != null) { alert.dismiss(); })
naXa

38

evet GPS ayarları artık gizlilik ayarları oldukları için programlı olarak değiştirilemez ve programın açık olup olmadıklarını kontrol etmeli ve açık değilse işleme koymalıyız. kullanıcıya GPS'nin kapalı olduğunu bildirebilir ve isterseniz ayarlar ekranını kullanıcıya göstermek için böyle bir şey kullanabilirsiniz.

Konum sağlayıcıların mevcut olup olmadığını kontrol edin

    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
    }

Kullanıcı GPS'i etkinleştirmek istiyorsa ayarlar ekranını bu şekilde gösterebilirsiniz.

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

Ve onActivityResult öğenizde kullanıcının etkinleştirip etkinleştirmediğini görebilirsiniz

    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
            }
        }
    }

Bunu yapmanın bir yolu ve umarım yardımcı olur. Yanlış bir şey yapıp yapmadığımı bana bildirin.


2
merhaba, benzer bir sorunum var ... kısaca "REQUEST_CODE" nedir ve ne için olduğunu açıklayabilir misiniz?
poeschlorn

2
@poeschlorn Anna linki aşağıda detaylandı. Basit bir deyişle, RequestCode startActivityForResultbirden fazla niyetle kullanmanıza izin verir . Amaçlar etkinliğinize döndüğünde, hangi amacın geri döndüğünü görmek ve buna göre yanıt vermek için RequestCode'u kontrol edersiniz.
Farray

2
providerBoş bir dize olabilir. Çek işaretini değiştirmek zorunda kaldım(provider != null && !provider.isEmpty())
Pawan

Sağlayıcı "" olabileceği için int mode = Settings.Secure.getInt (getContentResolver (), Settings.Secure.LOCATION_MODE); Mod = 0 GPS kapalıysa
Levon Petrosyan

31

İşte adımlar:

1. Adım: Arka planda çalışan hizmetler oluşturun.

Adım 2: Manifest dosyasında da aşağıdaki izne ihtiyacınız var:

android.permission.ACCESS_FINE_LOCATION

3. Adım: Kod yazma:

 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();

Adım 4: Veya aşağıdakileri kullanarak kontrol edebilirsiniz:

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

5. Adım: Bağlantıyı izlemek için hizmetlerinizi sürekli olarak çalıştırın.


5
GPS, kapalı olsa bile etkinleştirildiğini söyler.
Ivan V

15

Evet aşağıdaki kodu kontrol edebilirsiniz:

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

9

Bu yöntem, LocationManager hizmetini kullanır.

Kaynak Bağlantı

//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

Kullanıcı ayarlarında kullanılmasına izin vermişse GPS kullanılacaktır.

Bunu artık açık bir şekilde açamazsınız, ancak bunu yapmak zorunda değilsiniz - bu gerçekten bir gizlilik ayarıdır, bu yüzden ince ayar yapmak istemezsiniz. Kullanıcı, sorunların tam koordinasyona sahip olduğu uygulamalarda sorun yaşamayacaktır. Daha sonra konum yöneticisi API'sı, mümkünse GPS kullanır.

Uygulamanız GPS olmadan gerçekten kullanışlı değilse ve kapalıysa, kullanıcının etkinleştirebilmesi için bir uygulamayı kullanarak ayarlar uygulamasını doğru ekranda açabilirsiniz.


6

Bu kod parçası GPS durumunu kontrol eder

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

'


3

Sizin LocationListener, uygulama onProviderEnabledve onProviderDisabledolay işleyicilerinizde. Aradığınızda requestLocationUpdates(...), telefonda GPS devre dışı bırakılmışsa aranacaktır onProviderDisabled; kullanıcı GPS'i etkinleştirirse, onProviderEnabledçağrılacaktır.


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()
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.