Start action from preferences.xml

I am trying to go to the settings screen found at <

android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS 

From the record in my setup, but I was out of luck. At the moment, clicking on the button just updates the same screen as me.

My .xml preferences are as follows:

 <Preference android:title="@string/my_location_settings"> <intent android:action="android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS"> </intent> </Preference> 

And my manifest looks like this:

 <activity android:name=".Preferences"> <intent-filter> <action android:name="android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

What am I doing wrong?

LogCat:

 12-11 15:53:34.170: INFO/ActivityManager(173): Starting activity: Intent { act=android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS cmp=com.my.app/.Preferences } 12-11 15:53:34.400: INFO/ActivityManager(173): Displayed activity com.my.app/.Preferences: 229 ms (total 229 ms) 

manifest:

 <?xml version="1.0" encoding="utf-8"?> 

  <activity android:name=".ViewActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MyPageOneActivity"> </activity> <activity android:name=".MyPageTwoActivity"> </activity> <activity android:name=".MyPageThreeActivity"> </activity> <activity android:name=".Preferences"> <intent-filter> <action android:name="com.my.app.PREFERENCES" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="4" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> </uses-permission> </manifest> 

.Java preferences (sorry for the lack of formatting):

  package com.my.app; import android.os.Bundle; import android.preference.PreferenceActivity; public class Preferences extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } } 

and preferences.xml:

 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <EditTextPreference android:title="Address 1" android:key="customURLOne" android:summary="Enter a new address for 1"> </EditTextPreference> <EditTextPreference android:title="Address 2" android:key="customURLTwo" android:summary="Enter a new address for 2"> </EditTextPreference> <EditTextPreference android:title="Address 3" android:key="customURLThree" android:summary="Enter a new address for 3"> </EditTextPreference> <Preference android:title="@string/my_location_settings"> <intent android:action="android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS"> </intent> </Preference> 

+7
android android-activity manifest preferences
Dec 11 '10 at 4:43
source share
2 answers

Well, I think I understand - you may not understand what an intent filter is.

The manifest entry says:

 <activity android:name=".Preferences"> 

This is a definition for your activity called [your package] .Preferences.

  <intent-filter> <action android:name="android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS" /> 

Preferences will trigger when someone starts their intent with ACTION_LOCATION_SOURCE_SETTINGS as the name of the action ...

  <category android:name="android.intent.category.DEFAULT" /> 

This is assumed to be the default action for this action.

  </intent-filter> </activity> 

Obviously, you don’t want to use the Android API action name for your activity (unless you are trying to provide an alternative to the built-in activity of the Android location source). Use a different action name for the basic settings screen, preferably something with your package name.

EDIT: Also try using PreferenceScreen:

 <PreferenceScreen android:title="@string/my_location_settings"> <intent android:action="android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS"> </intent> </PreferenceScreen> 
+10
Dec 11 '10 at 5:13
source share

Nothing works for me, so I did: (I think this is a bad idea, but ...)

1. Remove this filter from the manifest

 <intent-filter> <action android:name="android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> 

1. Make preference easier

 <Preference android:key="simple_key" android:title="@string/title_simple_key"> </Preference> 

2. Add a Clicklistener in your PreferenceFragment

  @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.layout.preferences); // Load the preferences from an XML resource findPreference("simple_key").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { startActivity(new Intent( android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS)); return false; } }); } 

PS sorry for my english

+1
May 27 '15 at
source share



All Articles