Как включить сеть и местоположение GPS из моего приложения?
Я пытаюсь узнать местоположение пользователя:
// получение статуса GPS
isGPSEnabled = locationManage.isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status
isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled) {
// no network provider is enabled
Log.e(MyLogger.TAG, "Non providers are enabled");
Мне нужен пользователь, чтобы установить enable network location
или же turn on GPS
,
Как я могу помочь пользователю сделать каждый из этих вариантов?
откройте страницу настроек устройства и вернитесь к моей активности, нажав назад.
изменить эти две настройки устройства только из моего приложения?
Это означает открытие диалогового окна подтверждения, которое активирует эти две настройки.
3 ответа
После 4.1 изменения этих настроек в коде больше невозможны (они могут быть обходными путями, чтобы включить его, потому что об ошибке смотрите здесь, но она не будет работать на 4.3 или 4.4 или вам нужны рутированные телефоны, что вы можете сделать, это показать диалог с пользователем, чтобы перейти к настройкам, чтобы включить GPS
public static void LocationAlertDialog(final Context context) {
AlertDialog.Builder d = new AlertDialog.Builder(context);
d.setTitle("No Providers");
d.setMessage("Unfortunately, you don't have any providers to get your location, would you like to turn on your GPS?");
d.setNegativeButton(context.getResources().getString(R.string.dialogCancel), new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
d.setPositiveButton(context.getResources().getString(R.string.dialogAccept), new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
context.startActivityForResult(i, 0);
}
});
d.show();
}
вызвать предыдущую функцию в
if (!isGPSEnabled && !isNetworkEnabled) {
LocationAlertDialog(this);
Log.e(MyLogger.TAG, "Non providers are enabled");
тогда в вашем onActivityResult
Вы можете проверить код 0, если GPS включен или нет
startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0);
С последним API местоположения вы можете предложить пользователю динамически менять настройки местоположения через диалог настроек внутри приложения.
https://developer.android.com/training/location/change-location-settings.html