2013-04-14 2 views
15

Я хочу запустить настройки местоположения системы с Intent. Я знаю, что программно это идет как этотЗадание настройки местоположения из настроек XML-файла

Intent viewIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
startActivity(viewIntent); 

, но мне нужно сделать это из XML в виде Preference. Я стараюсь, как этот

<Preference 
    android:title="@string/pref_title" > 
    <intent android:action="android.settings.ACTION_LOCATION_SOURCE_SETTINGS" /> 
</Preference> 

, но он не работает, я всегда получаю ActivityNotFoundException. Как запустить этот параметр настройки системы из XML-намерения?

ответ

33

Вы можете создать: PreferenceActivity, который будет представлять вас предпочтения, а затем вы можете назначить onClick по вашему выбору, как это:

Preference goToLocationSettings = (Preference) findPreference("goToLocationSettings"); 
goToLocationSettings.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 

     public boolean onPreferenceClick(Preference preference) { 
      Intent viewIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
      startActivity(viewIntent); 

      return true; 
     } 
    }); 

И вам нужно будет назначить ключ к вашему выбору в файле XML :

<Preference 
    android:key="goToLocationSettings" 
    android:title="@string/pref_title" /> 
+1

I apprecia т. е. ваш ответ, но означает ли это, что нет способа вызвать это действие из XML? – Jago

+0

Я не знаком с образом, и я думаю, что его нет. –

+0

Я получаю «AndroidRuntimeException»: «Вызов' StartActivity() 'извне активности». Я думаю, это из-за контекста 'onPreferenceClick()' ... – Jago

0

Попробуйте этот код:

<PreferenceScreen 
    android:key="key_location" 
    android:summary="location settings" 
    android:title="Open location settings"> 

    <intent android:action="android.settings.ACTION_LOCATION_SOURCE_SETTINGS"/> 

</PreferenceScreen> 
Смежные вопросы