Düz ve basit. Bir Etkinlik başlatıyorum ve telefonun GPS modülünün etkin olup olmadığını kontrol ediyorum. Etkin değilse, kullanıcıyı bir iletişim kutusuyla sorar ve el ile etkinleştirmek isteyip istemediğini sorar. Açık Evet, Konum Ayarları'nı etkinleştiririm. Artık kullanıcı istediği takdirde etkinleştirebilir, ancak ne yaptığını kontrol etmem gerekiyor. o kodda benim mantığı ile devam etmek için geri geldiğindeİstenirse kullanıcının GPS özelliğini etkinleştirip etkinleştirmediğini kontrol edin
try {
isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {}
if (isGPSEnabled) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 0, 0, locationListenerGps);
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(
"Your GPS module is disabled. Would you like to enable it ?")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
// Sent user to GPS settings screen
final ComponentName toLaunch = new ComponentName(
"com.android.settings",
"com.android.settings.SecuritySettings");
final Intent intent = new Intent(
Settings.ACTION_LOCATION_SOURCE_SETTINGS);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setComponent(toLaunch);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(intent, 1);
dialog.dismiss();
}
})
.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
Ben, kullanıcı Konum ayarlarında seçtiğini bilmek gerekir. Temel olarak kullanıcının bir seçim yapmasını ve etkinliğime dönmesini ve ayrıca gps modülünün durumunu tekrar kontrol etmesini beklemem gerekiyor.
Yukarıda yazdığım kod ile, onActivityResults, Ayarlar amacının başlatılmasından hemen sonra patlar ... böylece kullanıcının işlemlerini yapmasını beklemez. Garip davranışlar ama ben hata ayıklayıcı ile izledim. – Alin
Ayarlar amacına merakla: \t startActivityForResult (yeni Intent (android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0); onActivityResult tetiğini doğru şekilde yapın – Alin
Belki de ihtiyacınız olan davranışı engelleyen FLAG_ACTIVITY_NEW_TASK idi. –