web-dev-qa-db-de.com

Gibt es eine Möglichkeit, die Präferenzen von Intent auf Extras zu beziehen?

Hallo, ich starte die Aktivität vom Bildschirm "Einstellungen" aus. Die Aktivität wird von drei Präferenzen geteilt. Ich frage mich, ob ich für diese Aktivität Extras in xml einstellen kann

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

    </intent>
</Preference>

ich frage mich, ob ich sowas machen kann

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

Alles was ich tun muss, um wirklich eine ganze Zahl zu übergeben. Ich kann verschiedene Aktionen anstelle von Extras überprüfen.

54
Alex Volovoy

Da Ihre Extras keine Konstanten sind, sollten Sie sie anstelle von XML im Java-Code übergeben.

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

Ich habe eine Antwort, du kannst sie so verwenden:

<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

In der Dokumentation hier ist ein Datenfeld für Absichten beschrieben.

Sie wird in der API-Demoanwendung für die XML-Voreinstellungen verwendet, um eine Absicht im Intent-Voreinstellungsbeispiel zu starten. 

Verwandte Beispiel-XML aus dieser 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>

Vielleicht könnte dieser Ansatz für Sie funktionieren?

13
Paul Fernhout

Fügen Sie die Voreinstellung zur Datei preference.xml hinzu:

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

Und dann können Sie einen setOnPreferenceClickListener verwenden, um einen Intent mit Extras zu starten.

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

für mich arbeiten.

<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

Um E-Mails zu senden oder auf dem Markt zu bewerten, müssen Sie so etwas wie verwenden

<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

Sie können verwenden

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

um die Absichtsdaten zu senden. Dann verwenden Sie in Ihrer Aktivität einfach:

getIntent().getDataString()
1
kylarsturn

Nicht wirklich eine Antwort auf Ihre Frage, aber sehr verwandt. Vielleicht wird es für jemanden nützlich sein .. Für neuere APIs (> 11) haben Sie eine Preferences-Header-Datei und können benutzerdefinierte Intents für einen der Header definieren. Ich habe versucht, einer Kopfzeile ein benutzerdefiniertes Extra hinzuzufügen, und die gefundene Lösung sieht folgendermaßen aus:

In Ihrer Einstellung-headers.xml:

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

In Ihrer "MyPreference" -Klasse (erweitert PreferenceActivity) haben Sie:

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