56 votes

Y a-t-il un moyen de mettre des extras à Intent à partir des préférences ?

Bonjour, je lance une activité à partir de l'écran des préférences. L'activité est partagée entre trois préférences. Je me demande si je peux définir des extras pour cette activité en xml.

<Preference
    android:key="action_1"
    android:title="@string/action_1_title"
>
    <intent
        android:action="com.package.SHAREDACTION"
    >

    </intent>
</Preference>

Je me demande si je peux faire quelque chose comme

<extras>
     <item
      android:name=""
      android:value=""/>
</extras>

Tout ce que j'ai besoin de faire, c'est de passer un nombre entier. Je peux faire différentes actions et vérifier l'action au lieu des extras.

0 votes

113voto

ludwigm Points 1751

J'ai une réponse, tu peux l'utiliser comme ça :

<Preference
    android:key="xxx"
    android:title="xxx"
    android:summary="xxx">
   <intent android:action="xxx" >
         <extra android:name="xxx" android:value="xxx" />
    </intent>        

</Preference>

0 votes

Qu'utilisez-vous pour android:name ? J'ai essayé d'envoyer un courrier et j'ai ajouté android.intent.extra.EMAIL mais cela ne fonctionne pas.

1 votes

Le nom est le nom de votre propre clé supplémentaire, alors vous pouvez récupérer la valeur de cette clé supplémentaire en utilisant activity.getIntent().getStringExtra(xxx) où xxx est votre clé supplémentaire. nom

3 votes

@EthanLeroy Réponse tardive, mais la android.intent.extra.EMAIL extra ne fonctionnera pas en XML parce qu'il attend un fichier String[] et l'utilisation de tableaux comme éléments supplémentaires dans le XML n'est pas prise en charge. Cela doit être fait en code.

13voto

Paul Fernhout Points 91

Il existe un champ de données pour les intentions décrit dans la documentation aquí .

Il est utilisé dans l'application de démonstration de l'API pour les préférences XML afin de lancer une intention dans l'exemple des préférences d'intention.

Exemple connexe xml de cette démo dans preferences.xml :

    <PreferenceScreen
            android:title="@string/title_intent_preference"
            android:summary="@string/summary_intent_preference">

        <intent android:action="android.intent.action.VIEW"
                android:data="http://www.android.com" />

    </PreferenceScreen>

Peut-être que cette approche pourrait fonctionner pour vous ?

0 votes

Merci beaucoup ! Juste ce que je cherchais

13voto

paddydub Points 786

Ajoutez la préférence au fichier preference.xml :

<Preference android:title="user" android:key="user"/>            

Et ensuite, vous pouvez utiliser un setOnPreferenceClickListener pour lancer un Intent avec des extras.

Preference userButton = (Preference) findPreference("user");
userButton.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
    @Override
    public boolean onPreferenceClick(Preference arg0) {
        Intent intent = new Intent(getActivity(), YourTargetActivity.class);
        intent.putExtra(EXTRA, mUser);
        startActivity(intent);
        return true;
    }
});

9voto

tbruyelle Points 5323

Comme vos extras ne sont pas des constantes, vous devez les passer dans le code java au lieu de xml.

Intent intent = new Intent( this, YourTargetActivity.class );
intent.putExtra( EXTRAS_KEY, extras );
yourPref.setIntent( intent );

2 votes

Je le sais, mais j'ai besoin de passer une valeur lors de la sélection d'une préférence définie en xml.

0 votes

Hmm mais vous pouvez aussi récupérer une préférence définie par xml dans le code.

1 votes

Thomas - Je vais accepter votre réponse - je dois implémenter le OnPreferenceClickListener, obtenir l'intention de la préférence et ensuite ajouter un supplément. J'espérais en quelque sorte que cela puisse être fait à partir de xml - eh bien

1voto

Viktor Yakunin Points 6

Pour envoyer un courriel ou un taux sur le marché, vous devez utiliser quelque chose comme

<Preference
        android:title="@string/title_intent_preference"
        android:summary="@string/summary_intent_preference">

    <intent android:action="android.intent.action.VIEW"
            android:data="market://details?id=com.your_package" />

</Preference>
<Preference
        android:title="@string/title_intent_preference"
        android:summary="@string/summary_intent_preference">

    <intent android:action="android.intent.action.VIEW"
            android:data="mailto:your_email@gmail.com" />

</Preference>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X