Есть ли способ добавить дополнения к Intent из настроек?

Привет, я запускаю активность с экрана настроек. Активность распределяется между тремя предпочтениями. Интересно, могу ли я установить дополнения для этого действия в xml

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

    </intent>
</Preference>

интересно, могу ли я сделать что-то вроде

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

Все, что мне нужно сделать, чтобы действительно передать целое число. Я могу разные действия и проверить действие вместо дополнительных.


person Alex Volovoy    schedule 17.01.2010    source источник


Ответы (8)


Поскольку ваши дополнения не являются константами, вы должны передавать их в коде java вместо xml.

Intent intent = new Intent( this, YourTargetActivity.class );
intent.putExtra( EXTRAS_KEY, extras );
yourPref.setIntent( intent );
person tbruyelle    schedule 17.01.2010
comment
Я знаю это, но мне нужно передать значение при выборе предпочтения, определенного в xml. - person Alex Volovoy; 18.01.2010
comment
хм, но вы также можете получить определенное предпочтение xml в коде. - person tbruyelle; 18.01.2010
comment
Томас - я приму ваш ответ - нужно реализовать OnPreferenceClickListener, получить намерение от предпочтения, а затем добавить дополнительные. Как-то надеялся, что это можно сделать из xml - да ладно. - person Alex Volovoy; 18.01.2010

Я получил ответ, вы можете использовать его так:

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

</Preference>
person ludwigm    schedule 05.03.2010
comment
Что вы используете для android:name? Я попытался отправить письмо и добавил android.intent.extra.EMAIL, но это не работает. - person Ethan Leroy; 29.08.2012
comment
имя — это ваше собственное имя дополнительного ключа, затем вы можете получить значение этого дополнительного значения, используя activity.getIntent().getStringExtra(xxx), где xxx — ваше имя - person pleerock; 13.11.2012
comment
@EthanLeroy Поздний ответ, но дополнение android.intent.extra.EMAIL не будет работать в XML, поскольку ожидается String[], а использование массивов в качестве дополнений в XML не поддерживается. Это должно быть сделано в коде. - person Jason Robinson; 30.01.2013
comment
Android Studio (v2.2.2) Проблема (только в режиме разработки): Исключение, возникающее во время рендеринга: ‹extra› требуется атрибут android:value или android:resource в строке двоичного XML-файла #-1. Хотя я использовал android:value="xxx". Кто-нибудь знает решение? - person Mir-Ismaili; 04.01.2017
comment
Если вы получаете, что дополнительный элемент не разрешен здесь в Android Studio, просто игнорируйте его, все работает нормально с дополнительным тегом :) - person Micha F.; 06.01.2017
comment
@МихаФ. кажется, для этого code.google.com/ открыт отчет об ошибке. p/android/issues/detail?id=230209 - person gbhall; 29.01.2017

Добавьте предпочтение в файл preference.xml:

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

И затем вы можете использовать setOnPreferenceClickListener для запуска Intent с дополнительными функциями.

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;
    }
});
person patrick-fitzgerald    schedule 10.11.2013


работает на меня.

<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>
person Gautam    schedule 24.10.2016
comment
Получили ли вы дополнительную ценность в Activity oncreate, как это Bundle bundle = getIntent().getExtras(); - person Akash kumar; 02.12.2017

Вы можете использовать

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

для отправки данных о намерениях. Затем в своей деятельности просто используйте:

getIntent().getDataString()
person kylarsturn    schedule 20.10.2016

Чтобы отправить электронное письмо или оценить на рынке, вам нужно использовать что-то вроде

<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>
person Viktor Yakunin    schedule 05.11.2013

Не совсем ответ на ваш вопрос, но очень связанный. Может быть, кто-то найдет это полезным. Для более нового API (> 11) у вас есть файл заголовков предпочтений, и вы можете определить собственные намерения для одного из заголовков. Я пытался добавить пользовательский Extra в один из заголовков, и решение, которое я нашел, выглядит следующим образом:

В ваших предпочтениях-headers.xml:

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

В вашем классе "MyPreference" (расширяет PreferenceActivity) у вас есть:

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();
    }
}
person Andy    schedule 18.11.2012