2010-12-11 6 views
7

Je suis en train d'aller à l'écran des réglages trouvés à -à partir d'une activité de preferences.xml

android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS 

D'une entrée dans mon activité de préférences, mais je suis pas avoir de chance. Pour le moment, appuyer sur l'entrée rafraîchit juste le même écran que sur la photo.

Mon preferences.xml ressemble à ceci:

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

Et mon entrée manifeste ressemble à ceci:

<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'est-ce que je fais 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) 

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> 

Preferences.java ( désolé pour le manque de mise en forme):

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

et 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

Que dit le logcat? En outre, pouvez-vous poster l'entrée de manifeste pour votre page de préférences principale? Celui que vous continuez à revenir? – EboMike

+0

Ceci est l'entrée du manifeste pour ma page de préférences principale, le logcat: – qubz

+0

12-11 15: 53: 34.170: INFO/ActivityManager (173): Début de l'activité: Intent {act = android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS cmp = com. my.app/.Preferences} 12-11 15: 53: 34.400: INFO/ActivityManager (173): Activité affichée com.my.app/.Préférences: 229 ms (total 229 ms) – qubz

Répondre

10

D'accord, je pense que je comprends - vous pourriez être clair sur ce qu'est un filtre intention.

Votre entrée manifeste dit:

<activity android:name=".Preferences"> 

Telle est la définition de votre activité appelée [votre package] .Preferences.

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

Préférences seront déclenchées chaque fois que quelqu'un commence une intention avec ACTION_LOCATION_SOURCE_SETTINGS comme le nom de l'action ...

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

Ceci est censé être l'option par défaut pour cette action.

</intent-filter> 
</activity> 

De toute évidence, vous ne voulez pas utiliser un nom d'action API Android pour votre activité (à moins que vous essayez de fournir une alternative à l'activité de Android source emplacement intégré). Utilisez un nom d'action différent pour votre écran de préférences principal, de préférence quelque chose avec le nom de votre paquet dedans.

EDIT: Aussi, essayez d'utiliser un PREFERENCE:

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

Sonne bien, votre droite, je n'étais pas clair sur les filtres d'intention merci. Je vais essayer et voir comment ça se passe – qubz

+0

Bonne chance! Dites-moi comment cela fonctionne! – EboMike

+0

Je n'ai toujours pas de chance car je sens que je ne sais pas vraiment ce que je fais. Voulez-vous dire que je change le nom de l'action dans le manifeste et le fichier preferences.xml? Si je fais cela, comment vais-je commencer l'activité de la source de localisation souhaitée? – qubz

1

Rien ne fonctionne pour moi donc je ne: (je pense qu'il est une mauvaise idée, mais ...)

1.Supprimer ce filtre manifeste

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

1. Faire préférence plus facile

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

2. Ajouter clickListener dans votre 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; 
     } 
    }); 

} 

post-scriptum Désolé pour mon anglais

+0

Je ne sais pas pourquoi, mais avec l'autre méthode au lieu de l'activité que je déclare, il a ouvert à nouveau l'activité des préférences, donc cette méthode a fonctionné pour moi (: – FeanDoe

Questions connexes