2010-01-17 18 views
53

Ciao sto lanciando l'attività dalla schermata delle preferenze. L'attività è condivisa tra tre preferenze. Mi chiedo se posso impostare extra su questa attività nel xmlC'è un modo per mettere degli extra in Intento dalle preferenze?

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

    </intent> 
</Preference> 

mi chiedo se posso fare qualcosa di simile

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

Tutto quello che devi fare per passare un intero davvero. Posso azioni diverse e controllare l'azione anziché gli extra.

+0

http: // stackoverflow.it/questions/6948479/extras-on-email-intent-preferences-xml – gor

risposta

8

Poiché gli extra non sono costanti, è necessario passarli nel codice java anziché xml.

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

Lo so, ma ho bisogno di passare un valore quando seleziono una preferenza definita in xml. –

+0

hmm ma puoi anche recuperare una preferenza definita xml nel codice. – tbruyelle

+1

Thomas: accetto la risposta, devo implementare OnPreferenceClickListener, ottenere l'intento dalla preferenza e aggiungere altro. Era come sperare che possa essere fatto da xml - oh bene. –

13

V'è un campo dati per intenti descritti nella documentazione here.

Viene utilizzato nell'applicazione demo API per le preferenze XML per avviare un intent nell'esempio delle preferenze Intent.

esempio XML correlati da quella demo in 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> 

Forse questo approccio potrebbe funzionare per voi?

+0

Ha funzionato alla grande per me. Grazie! – ojrac

+0

Grazie mille! Proprio quello che stavo cercando – alekz

+0

Come leggerlo nell'attività? –

101

ho ottenuto una risposta, è possibile utilizzarlo in questo modo:

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

</Preference> 
+0

Cosa usi per 'android: name'? Ho provato a inviare una mail e ho aggiunto 'android.intent.extra.EMAIL' ma non funziona. –

+1

il nome è il nome della propria chiave aggiuntiva, quindi è possibile recuperare il valore di questo extra utilizzando activity.getIntent(). GetStringExtra (xxx) dove xxx è il tuo * nome * – pleerock

+2

@EthanLeroy Risposta tardiva, ma 'android.intent. extra.EMAIL' extra non funzionerà in XML perché si aspetta un 'String []', e l'utilizzo di array come extra in XML non è supportato. Deve essere fatto in codice. –

0

Non proprio una risposta alla tua domanda, ma molto correlati. Forse qualcuno lo troverà utile. Per le API più recenti (> 11) si dispone di un file di intestazioni delle preferenze ed è possibile definire intenti personalizzati per una delle intestazioni. Stavo cercando di aggiungere un extra personalizzato per una delle intestazioni e la soluzione che ho trovato è questa:

Nella tua preferenza-headers.xml:

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

Nella classe "MyPreference" (estende PreferenceActivity) si ha:

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

per inviare e-mail o il tasso sul mercato è necessario usare qualcosa come

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

Aggiungere la preferenza al file preference.xml:

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

E quindi è possibile utilizzare un setOnPreferenceClickListener per lanciare un Intent con extra.

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

È possibile utilizzare

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

per inviare i dati intenti. Quindi nella tua attività usa semplicemente:

getIntent().getDataString() 
6

lavoro per me.

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

Hai ricevuto un valore extra in Activity oncreate come questo Bundle bundle = getIntent(). getExtras(); –

Problemi correlati