#android #gps
#Android #gps
Вопрос:
У меня возникла проблема в моей активности, которая может передать управление настройками мобильного GPS Android, чтобы пользователь мог включать / выключать GPS, но я не могу вернуться к своей активности. когда я нажимаю кнопку «Назад», она напрямую переходит на главную страницу мобильного устройства, не возвращая мою активность оттуда, откуда я отправляю сигнал в настройки. кто-нибудь может подсказать мне решение для этого.
if(!lm.isProviderEnabled(LocationManager.GPS_PROVIDER )) {
startActivityForResult(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS), 1);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.e("","OnActivity Result...");
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == GPS_LOC) {
switch (requestCode) {
case GPS_LOC:
//super.onCreate(inst);
super.onResume();
//super.finish();
break;
}
}
}
Ответ №1:
Работает для меня. Вы уверены, что у вас есть разрешение ACCESS_FINE_LOCATION, установленное в вашем манифесте? Вы уверены, что вызывается startActivityForResult ()?
Кроме того, что такое GPS_LOC?
Вот мой код, который работает:
public class main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.button1).setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS), 1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == 1) {
switch (requestCode) {
case 1:
break;
}
}
}
}
Комментарии:
1. GPS_LOC — это просто константа, в вашем коде она равна ‘1’, и я устанавливал все необходимые разрешения, однако я получил решение, на самом деле моя активность автоматически вызывала остановку, когда я нажимал кнопку «Назад» в настройках, поэтому я просто вызвал Restart () из onStop моей активности, проблема решена.
2. Ваша активность должна быть остановлена, поскольку она больше не была видна. Однако, как только дочерняя активность будет отменена, она будет запущена и возобновлена. Вы вызывали функцию finish () из onStop ()?
3. У меня была та же проблема, которая была вызвана тем, что я установил флаг noHistory в манифесте в значение true, поэтому моя активность была удалена из истории, когда я запустил настройки GPS. Может быть, с вами происходит что-то подобное? Похоже, перезапуск в onStop не такая уж хорошая идея… Вы все еще можете удалить активность из истории с помощью «intent.addFlags (намерение. FLAG_ACTIVITY_CLEAR_TOP);»
4. кстати, результирующий код всегда равен 0, независимо от того, включено местоположение пользователя или нет
5. @hasnain_ahmad на этом этапе вам не нужен resultCode, потому что вы можете определить, включены ли пользовательские службы определения местоположения, используя класс LocationManager следующим образом: LocationManager.isProviderEnabled (LocationManager. GPS_PROVIDER) или LocationManager.isProviderEnabled (LocationManager. GPS_NETWORK)
Ответ №2:
android:noHistory="true"
удаление вышеизложенного из файла menifest работает для меня, но данные равны нулю внутри onActivityResult
Ответ №3:
При обратном нажатии из действия «Местоположение настроек», при возобновлении вызывается из действия, которое вызвало startActivityForResult(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS), 1);
Таким образом, оттуда вы можете проверить, включено ли определение местоположения с помощью
`if(lm.isProviderEnabled(LocationManager.GPS_PROVIDER )) {//add your logic here }`