Bagaimana cara saya mengetahui apakah GPS perangkat Android diaktifkan

206

Pada perangkat berkemampuan Android Cupcake (1.5), bagaimana cara memeriksa dan mengaktifkan GPS?

Marcus
sumber
2
bagaimana menerima jawaban? :)
diet

Jawaban:

456

Cara terbaik tampaknya adalah sebagai berikut:

 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();
}
Marcus
sumber
1
Terutama tentang menyalakan niat untuk melihat konfigurasi GPS, lihat github.com/marcust/HHPT/blob/master/src/org/thiesen/hhpt/ui/… untuk detailnya.
Marcus
3
Potongan kode yang bagus. Saya menghapus @SuppressWarnings dan tidak menerima peringatan apa pun ... mungkin tidak perlu?
rentang
30
Saya akan menyarankan alertuntuk mendeklarasikan seluruh aktivitas sehingga Anda dapat mengabaikannya di onDestroy untuk menghindari kebocoran memori ( if(alert != null) { alert.dismiss(); })
Cameron
Jadi bagaimana jika saya sedang Menghemat Baterai, apakah ini masih berfungsi?
Prakhar Mohan Srivastava
3
@PrakharMohanSrivastava jika pengaturan lokasi Anda menggunakan Penghematan Daya, ini akan mengembalikan false, namun LocationManager.NETWORK_PROVIDERakan mengembalikan true
Tim
129

Di android, kita dapat dengan mudah memeriksa apakah GPS diaktifkan di perangkat atau tidak menggunakan LocationManager.

Berikut adalah program sederhana untuk Memeriksa.

GPS Diaktifkan atau Tidak: - Tambahkan baris izin pengguna di bawah ini di AndroidManifest.xml ke Access Location

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

File kelas java Anda seharusnya

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

Outputnya akan terlihat seperti

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

berilium
sumber
1
Tidak ada yang terjadi ketika saya mencoba fungsi Anda. Saya tidak mendapatkan kesalahan saat saya mengujinya.
Airikr
Saya membuatnya bekerja! :) Terima kasih banyak, tetapi saya tidak dapat memberikan suara sampai Anda mengedit jawaban Anda: /
Airikr
3
tidak masalah @Erik Edgren Anda mendapatkan solusi, jadi saya senang sekali. Selamat menikmati ... !!
@ user647826: Luar biasa! Bekerja dengan baik. Anda menyelamatkan malam saya
Addi
1
Sepotong saran: nyatakan alertuntuk seluruh aktivitas sehingga Anda dapat mengabaikannya onDestroy()untuk menghindari kebocoran memori ( if(alert != null) { alert.dismiss(); })
naXa
38

ya pengaturan GPS tidak dapat diubah secara programatik lagi karena itu adalah pengaturan privasi dan kami harus memeriksa apakah mereka diaktifkan atau tidak dari program dan menanganinya jika tidak diaktifkan. Anda dapat memberi tahu pengguna bahwa GPS dimatikan dan menggunakan sesuatu seperti ini untuk menampilkan layar pengaturan kepada pengguna jika Anda mau.

Periksa apakah penyedia lokasi tersedia

    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
    }

Jika pengguna ingin mengaktifkan GPS, Anda dapat menampilkan layar pengaturan dengan cara ini.

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

Dan di onActivityResult Anda, Anda dapat melihat apakah pengguna telah mengaktifkannya atau tidak

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

Itulah satu cara untuk melakukannya dan saya harap ini membantu. Beri tahu saya jika saya melakukan kesalahan.

achie
sumber
2
hai, saya punya masalah yang sama ... bisakah Anda menjelaskan secara singkat, untuk apa "REQUEST_CODE" itu dan untuk apa?
poeschlorn
2
@poeschlorn Anna memposting tautan ke detail di bawah ini. Dalam istilah yang sederhana, RequestCode memungkinkan Anda untuk digunakan startActivityForResultdengan banyak maksud. Ketika niat kembali ke aktivitas Anda, Anda memeriksa RequestCode untuk melihat niat mana yang kembali dan merespons sesuai.
Farray
2
The providerdapat menjadi string kosong. Saya harus mengubah cek ke(provider != null && !provider.isEmpty())
Pawan
Karena penyedia dapat "", pertimbangkan untuk menggunakan mode int = Settings.Secure.getInt (getContentResolver (), Settings.Secure.LOCATION_MODE); Jika mode = 0 GPS mati
Levon Petrosyan
31

Berikut langkah-langkahnya:

Langkah 1: Buat layanan yang berjalan di latar belakang.

Langkah 2: Anda memerlukan izin berikut dalam file Manifest juga:

android.permission.ACCESS_FINE_LOCATION

Langkah 3: Tulis kode:

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

Langkah 4: Atau cukup Anda dapat memeriksa menggunakan:

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

Langkah 5: Jalankan layanan Anda terus-menerus untuk memonitor koneksi.

Rakesh
sumber
5
Ini memberi tahu bahwa GPS diaktifkan bahkan ketika dimatikan.
Ivan V
15

Ya, Anda dapat memeriksa di bawah ini kodenya:

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

Metode ini akan menggunakan layanan LocationManager .

Tautan Sumber

//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;
};
Kode Mata-mata
sumber
6

GPS akan digunakan jika pengguna mengizinkannya digunakan dalam pengaturannya.

Anda tidak bisa lagi mengaktifkannya secara eksplisit, tetapi Anda tidak perlu - ini benar-benar pengaturan privasi, jadi Anda tidak ingin mengubahnya. Jika pengguna tidak masalah dengan aplikasi yang mendapatkan koordinat yang tepat, maka akan aktif. Kemudian API manajer lokasi akan menggunakan GPS jika bisa.

Jika aplikasi Anda benar-benar tidak berguna tanpa GPS, dan tidak aktif, Anda dapat membuka aplikasi pengaturan di layar kanan menggunakan niat sehingga pengguna dapat mengaktifkannya.


sumber
6

Sepotong kode ini memeriksa status GPS

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

`

kashifahmad
sumber
3

Di penangan Anda LocationListener, implement onProviderEnableddan onProviderDisabledevent. Saat Anda menelepon requestLocationUpdates(...), jika GPS dinonaktifkan di telepon, onProviderDisabledakan dipanggil; jika pengguna mengaktifkan GPS, onProviderEnabledakan dipanggil.

Ahmad Pourbafrani
sumber
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()
    }
bhatia safal
sumber