2010-12-11 19 views
7

Estoy tratando de ir a la configuración de Pantalla encontrar en -iniciar una actividad de preferences.xml

android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS 

Desde una entrada en mi actividad preferencias, pero no estoy teniendo suerte. Por el momento, presionar la entrada solo refresca la misma pantalla que yo.

Mi preferences.xml se ve así:

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

Y mi entrada de manifiesto el aspecto siguiente:

<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> 

¿Qué estoy haciendo mal?

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) 

Manifiesto:

<?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> 

Preferences.java ( lo de la falta de formato):

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

y 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> 

+0

¿Qué dice el logcat? Además, ¿puede publicar la entrada de manifiesto para su página de preferencias principal? ¿Al que sigues volviendo? – EboMike

+0

Esa es la entrada de manifiesto para mi página de preferencias principales, el logcat: – qubz

+0

12-11 15: 53: 34.170: INFO/ActivityManager (173): Actividad de inicio: Intención {act = android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS cmp = com. my.app/.Preferences} 12-11 15: 53: 34.400: INFO/ActivityManager (173): actividad mostrada com.my.app/.Preferences: 229 ms (total 229 ms) – qubz

Respuesta

10

Está bien, creo que entiendo - que puede ser claro acerca de lo que un filtro es la intención.

Su entrada en el manifiesto dice:

<activity android:name=".Preferences"> 

Esta es la definición de su actividad denominada [su paquete] .Preferences.

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

Preferencias se activará cada vez que alguien inicia una intención con ACTION_LOCATION_SOURCE_SETTINGS como el nombre de la acción ...

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

Esto se supone que es la opción por defecto para esa acción.

</intent-filter> 
</activity> 

Obviamente, usted no desea utilizar un nombre de acción API de Android para su actividad (a menos que estés tratando de ofrecer una alternativa a la de Android incorporado en la actividad origen de ubicación). Use un nombre de acción diferente para su pantalla de preferencias principal, preferiblemente algo con el nombre de su paquete.

EDIT: También, trate de usar una pantalla PREFERENCE:

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

Suena bien, tiene razón, no estaba claro acerca de los filtros de intención, gracias. Le daré una oportunidad y veremos cómo va – qubz

+0

¡Buena suerte! ¡Déjame saber como funciona eso! – EboMike

+0

Todavía no estoy teniendo suerte porque siento que realmente no sé lo que estoy haciendo. ¿Estás diciendo que cambio el nombre de la acción en el manifiesto y en el archivo preferences.xml? Si lo hago, ¿cómo comenzaré la actividad de origen de ubicación deseada? – qubz

1

Nada funciona para mí, así que lo hice: (creo que es una mala idea, pero ...)

1.Quitar este filtro de manifiesto

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

1. preferencia facilitar

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

2. Añadir ClickListener en su 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; 
     } 
    }); 

} 

P. S. Lo siento por mi Inglés

+0

No sé por qué, pero con el otro método en lugar de la actividad que declaro, abrió nuevamente la actividad de preferencias, por lo que este método funcionó para mí (: – FeanDoe

Cuestiones relacionadas