web-dev-qa-db-fra.com

Est-il possible de mettre des extras à l'intention à partir de préférences?

Bonjour, je lance l'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é au format 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 je dois faire pour passer un entier vraiment. Je peux faire différentes actions et vérifier les actions à la place des extras.

54
Alex Volovoy

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 );
8
tbruyelle

J'ai une réponse, vous pouvez l'utiliser comme ceci:

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

</Preference>
107
ludwigm

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

Il est utilisé dans l'application de démonstration d'API pour que les préférences XML lancent une intention dans l'exemple 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?

13
Paul Fernhout

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

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

Et vous pouvez ensuite utiliser setOnPreferenceClickListener pour lancer une intention 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;
    }
});
13
patrickandroid

travaille pour moi.

<shortcut
    Android:enabled="true"
    Android:icon="@mipmap/xxx"
    Android:shortcutDisabledMessage="@string/xxx"
    Android:shortcutId="xxxx"
    Android:shortcutLongLabel="xxx"
    Android:shortcutShortLabel="xxx">
    <intent
        Android:action="Android.intent.action.VIEW"
        Android:targetClass="xxx"
        Android:targetPackage="xxx">
        <extra
            Android:name="intent_name"
            Android:value="true" />
    </intent>
</shortcut>
9
Gautam

Pour envoyer un email ou évaluer 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:[email protected]" />

</Preference>
1
Viktor Yakunin

Vous pouvez utiliser

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

    <intent Android:action="Android.intent.action.VIEW"
            Android:data="hello world" />

</PreferenceScreen>

envoyer les données d'intention. Ensuite, dans votre activité, utilisez simplement:

getIntent().getDataString()
1
kylarsturn

Pas vraiment une réponse à votre question, mais très liée. Peut-être que quelqu'un le trouvera utile. Pour les API plus récentes (> 11), vous avez un fichier d'en-tête de préférence et vous pouvez définir des intentions personnalisées pour l'un des en-têtes. J'essayais d'ajouter un extra personnalisé à l'un des en-têtes et la solution que j'ai trouvée ressemble à ceci:

Dans votre préférence headers.xml:

<header 
        Android:fragment="com.mypackage.MyPreference$Prefs1Fragment"
        Android:title="Intent"
        Android:summary="Launches an Intent.">
</header>

Dans votre classe "MyPreference" (étend PreferenceActivity), vous avez:

public static class Prefs1Fragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = new Intent(getActivity(), MyTargetActivity.class);
        // set the desired extras, flags etc to the intent
        intent.putExtra("customExtra", "Something that I used to know");
        // starting our target activity
        startActivity(intent);
        // ending the current activity, which is just a redirector to our end goal
        getActivity().finish();
    }
}
0
Andy