C'è un modo per mettere extra per Intent dalle preferenze?
-
21-09-2019 - |
Domanda
Ciao io sto lanciando attività dalla schermata delle preferenze. L'attività è condivisa tra tre preferenze. Mi chiedo se posso impostare extra per questa attività in XML
<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 diverse azioni e delle azioni di controllo, invece di extra.
Soluzione
Come gli extra non sono costanti, si dovrebbe passare nel codice Java, invece di XML.
Intent intent = new Intent( this, YourTargetActivity.class );
intent.putExtra( EXTRAS_KEY, extras );
yourPref.setIntent( intent );
Altri suggerimenti
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>
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;
}
});
C'è un campo dati per intenti descritti nella documentazione qui .
E 'utilizzato nella applicazione demo API per le preferenze di XML per lanciare un intento nelle preferenze esempio Intent.
esempio Related XML 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?
a lavorare 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>
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:your_email@gmail.com" />
</Preference>
È 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. Poi nella vostra attività è sufficiente utilizzare:
getIntent().getDataString()
Non proprio una risposta alla tua domanda, ma molto legati. Forse qualcuno lo troverà utile. Per più recenti API (> 11) si dispone di un file di preferenze e-header è 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 vostra 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();
}
}