Хороший фрагмент кода. Я удалил @SuppressWarnings и не получаю никаких предупреждений ... возможно, они не нужны?
продолжительность
30
Я бы посоветовал декларировать alertвсю активность, чтобы вы могли отклонить ее в onDestroy, чтобы избежать утечки памяти ( if(alert != null) { alert.dismiss(); })
Кэмерон
Так что, если я нахожусь на Экономии батареи, это все еще будет работать?
Прахар Мохан Шривастава
3
@PrakharMohanSrivastava, если настройки вашего местоположения находятся в режиме энергосбережения, это вернет ложь, однако LocationManager.NETWORK_PROVIDERвернет истину
Тим
129
В Android мы можем легко проверить, включен ли GPS на устройстве или нет с помощью LocationManager.
Вот простая программа для проверки.
GPS включен или нет: - Добавьте приведенную ниже строку с правами доступа пользователя в AndroidManifest.xml, чтобы получить доступ к местоположению
publicclassExampleAppextendsActivity{/** Called when the activity is first created. */protectedvoid 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();}}privatevoid showGPSDisabledAlertToUser(){AlertDialog.Builder alertDialogBuilder =newAlertDialog.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",newDialogInterface.OnClickListener(){publicvoid onClick(DialogInterface dialog,int id){Intent callGPSSettingIntent =newIntent(
android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(callGPSSettingIntent);}});
alertDialogBuilder.setNegativeButton("Cancel",newDialogInterface.OnClickListener(){publicvoid onClick(DialogInterface dialog,int id){
dialog.cancel();}});AlertDialog alert = alertDialogBuilder.create();
alert.show();}}
Ничего не происходит, когда я пробую твою функцию. Я не получил никаких ошибок, когда я проверяю это все же.
Airikr
Я получил это работает! :) Большое спасибо, но я не могу голосовать, пока вы не отредактируете свой ответ: /
Airikr
3
нет проблем @Erik Edgren вы получите решение, так что я счастлив, наслаждайтесь ... !!
@ user647826: Отлично! Работает красиво. Вы спасли мою ночь
Адди
1
Совет: объявите alertвсе действия, чтобы их можно было отклонить, onDestroy()чтобы избежать утечки памяти ( if(alert != null) { alert.dismiss(); })
naXa
38
да, настройки GPS больше нельзя изменять программно, так как они являются настройками конфиденциальности, и мы должны проверить, включены они или нет из программы, и обработать их, если они не включены. Вы можете уведомить пользователя, что GPS отключен, и использовать что-то подобное, чтобы показать экран настроек пользователю, если хотите.
Проверьте, доступны ли провайдеры местоположения
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}
Если пользователь хочет включить GPS, вы можете показать экран настроек таким образом.
И в вашем onActivityResult вы можете увидеть, включил ли пользователь его или нет
protectedvoid 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}}}
Это один из способов сделать это, и я надеюсь, что это поможет. Дайте мне знать, если я делаю что-то не так.
привет, у меня похожая проблема ... не могли бы вы вкратце объяснить, что такое "REQUEST_CODE" и для чего он нужен?
poeschlorn
2
@poeschlorn Анна разместила ссылку на подробное описание ниже. Проще говоря, RequestCode позволяет использовать startActivityForResultс несколькими намерениями. Когда намерения возвращаются к вашей активности, вы проверяете код запроса, чтобы увидеть, какое намерение возвращается, и отвечаете соответствующим образом.
Farray
2
providerМожет быть пустой строкой. Я должен был изменить чек на(provider != null && !provider.isEmpty())
Паван
Поскольку провайдер может быть "", рассмотрите возможность использования int mode = Settings.Secure.getInt (getContentResolver (), Settings.Secure.LOCATION_MODE); Если режим = 0 GPS отключен
Левон Петросян
31
Вот шаги:
Шаг 1. Создайте службы, работающие в фоновом режиме.
Шаг 2: Вам также необходимо следующее разрешение в файле манифеста:
android.permission.ACCESS_FINE_LOCATION
Шаг 3: Написать код:
finalLocationManager manager =(LocationManager)context.getSystemService (Context.LOCATION_SERVICE );if(!manager.isProviderEnabled(LocationManager.GPS_PROVIDER ))Toast.makeText(context,"GPS is disabled!",Toast.LENGTH_LONG).show();elseToast.makeText(context,"GPS is enabled!",Toast.LENGTH_LONG).show();
GPS будет использоваться, если пользователь разрешил использовать его в своих настройках.
Вы не можете явно включить это больше, но вам не нужно - это действительно настройка конфиденциальности, так что вы не хотите ее настраивать. Если пользователь в порядке с приложениями, получающими точные координаты, он будет включен. Тогда API менеджера местоположений будет использовать GPS, если это возможно.
Если ваше приложение действительно бесполезно без GPS и оно выключено, вы можете открыть приложение настроек на правом экране, используя намерение, чтобы пользователь мог включить его.
В вашем LocationListener, реализуйте onProviderEnabledи onProviderDisabledобработчики событий. При звонке requestLocationUpdates(...), если GPS отключен на телефоне, onProviderDisabledбудет вызываться; если пользователь включает GPS, onProviderEnabledбудет вызван.
InKotlin:-How to check GPS is enable ornot
val manager = getSystemService(Context.LOCATION_SERVICE)asLocationManagerif(!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()}
Ответы:
Лучший способ выглядит следующим образом:
источник
alert
всю активность, чтобы вы могли отклонить ее в onDestroy, чтобы избежать утечки памяти (if(alert != null) { alert.dismiss(); }
)LocationManager.NETWORK_PROVIDER
вернет истинуВ Android мы можем легко проверить, включен ли GPS на устройстве или нет с помощью LocationManager.
Вот простая программа для проверки.
GPS включен или нет: - Добавьте приведенную ниже строку с правами доступа пользователя в AndroidManifest.xml, чтобы получить доступ к местоположению
Ваш файл классов Java должен быть
Вывод будет выглядеть как
источник
alert
все действия, чтобы их можно было отклонить,onDestroy()
чтобы избежать утечки памяти (if(alert != null) { alert.dismiss(); }
)да, настройки GPS больше нельзя изменять программно, так как они являются настройками конфиденциальности, и мы должны проверить, включены они или нет из программы, и обработать их, если они не включены. Вы можете уведомить пользователя, что GPS отключен, и использовать что-то подобное, чтобы показать экран настроек пользователю, если хотите.
Проверьте, доступны ли провайдеры местоположения
Если пользователь хочет включить GPS, вы можете показать экран настроек таким образом.
И в вашем onActivityResult вы можете увидеть, включил ли пользователь его или нет
Это один из способов сделать это, и я надеюсь, что это поможет. Дайте мне знать, если я делаю что-то не так.
источник
startActivityForResult
с несколькими намерениями. Когда намерения возвращаются к вашей активности, вы проверяете код запроса, чтобы увидеть, какое намерение возвращается, и отвечаете соответствующим образом.provider
Может быть пустой строкой. Я должен был изменить чек на(provider != null && !provider.isEmpty())
Вот шаги:
Шаг 1. Создайте службы, работающие в фоновом режиме.
Шаг 2: Вам также необходимо следующее разрешение в файле манифеста:
Шаг 3: Написать код:
Шаг 4: Или просто вы можете проверить, используя:
Шаг 5: Постоянно запускайте свои сервисы для мониторинга соединения.
источник
Да, вы можете проверить ниже код:
источник
Этот метод будет использовать сервис LocationManager .
Ссылка на источник
источник
GPS будет использоваться, если пользователь разрешил использовать его в своих настройках.
Вы не можете явно включить это больше, но вам не нужно - это действительно настройка конфиденциальности, так что вы не хотите ее настраивать. Если пользователь в порядке с приложениями, получающими точные координаты, он будет включен. Тогда API менеджера местоположений будет использовать GPS, если это возможно.
Если ваше приложение действительно бесполезно без GPS и оно выключено, вы можете открыть приложение настроек на правом экране, используя намерение, чтобы пользователь мог включить его.
источник
Этот кусок кода проверяет статус GPS
`
источник
В вашем
LocationListener
, реализуйтеonProviderEnabled
иonProviderDisabled
обработчики событий. При звонкеrequestLocationUpdates(...)
, если GPS отключен на телефоне,onProviderDisabled
будет вызываться; если пользователь включает GPS,onProviderEnabled
будет вызван.источник
источник