2013-04-14 25 views
15

Tôi muốn khởi chạy Cài đặt vị trí của hệ thống từ Intent. Tôi biết rằng theo lập trình nó sẽ như thế nàyKhởi chạy mục đích Cài đặt vị trí từ tùy chọn Tệp XML

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

nhưng tôi cần làm điều đó từ XML của Preference. Tôi cố gắng như thế này

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

nhưng không hoạt động, tôi luôn nhận được ActivityNotFoundException. Làm cách nào để tôi có thể khởi chạy Cài đặt vị trí hệ thống từ mục đích XML?

Trả lời

33

Bạn có thể tạo: PreferenceActivity sẽ đại diện cho bạn ưu tiên và sau đó bạn có thể gán một onClick sở thích của bạn như thế này:

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; 
     } 
    }); 

Và bạn sẽ cần phải gán một phím sở thích của bạn trong file xml :

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

tôi apprecia te câu trả lời của bạn, nhưng nó có nghĩa là không có cách nào để gọi hành động đó từ XML sau đó? – Jago

+0

Tôi không quen với một cách và tôi nghĩ rằng không có một. –

+0

Tôi nhận được 'AndroidRuntimeException':" Gọi 'StartActivity()' từ bên ngoài hoạt động ". Tôi đoán điều này là do bối cảnh của 'onPreferenceClick()' ... – Jago

0

Hãy thử mã này:

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

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

</PreferenceScreen> 
Các vấn đề liên quan