Jawaban:
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();
}
alert
untuk mendeklarasikan seluruh aktivitas sehingga Anda dapat mengabaikannya di onDestroy untuk menghindari kebocoran memori ( if(alert != null) { alert.dismiss(); }
)
LocationManager.NETWORK_PROVIDER
akan mengembalikan true
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
alert
untuk seluruh aktivitas sehingga Anda dapat mengabaikannya onDestroy()
untuk menghindari kebocoran memori ( if(alert != null) { alert.dismiss(); }
)
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.
startActivityForResult
dengan banyak maksud. Ketika niat kembali ke aktivitas Anda, Anda memeriksa RequestCode untuk melihat niat mana yang kembali dan merespons sesuai.
provider
dapat menjadi string kosong. Saya harus mengubah cek ke(provider != null && !provider.isEmpty())
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.
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);
}
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;
};
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.
Sepotong kode ini memeriksa status GPS
final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
buildAlertMessageNoGps();
}
`
Di penangan Anda LocationListener
, implement onProviderEnabled
dan onProviderDisabled
event. Saat Anda menelepon requestLocationUpdates(...)
, jika GPS dinonaktifkan di telepon, onProviderDisabled
akan dipanggil; jika pengguna mengaktifkan GPS, onProviderEnabled
akan dipanggil.
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()
}