Yanıtlar:
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();
}
alert
Tü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(); }
)
LocationManager.NETWORK_PROVIDER
doğru döner
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
alert
tü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(); }
)
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.
startActivityForResult
birden 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.
provider
Boş bir dize olabilir. Çek işaretini değiştirmek zorunda kaldım(provider != null && !provider.isEmpty())
İş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.
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);
}
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;
};
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.
Bu kod parçası GPS durumunu kontrol eder
final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
buildAlertMessageNoGps();
}
'
Sizin LocationListener
, uygulama onProviderEnabled
ve onProviderDisabled
olay 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.
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()
}