Existe alguma maneira de colocar extras à intenção das preferências?
-
21-09-2019 - |
Pergunta
Olá, estou lançando atividades da tela Preferências. A atividade é compartilhada entre três preferências. Gostaria de saber se posso definir extras para esta atividade em XML
<Preference
android:key="action_1"
android:title="@string/action_1_title"
>
<intent
android:action="com.package.SHAREDACTION"
>
</intent>
</Preference>
Eu me pergunto se posso fazer algo como
<extras>
<item
android:name=""
android:value=""/>
</extras>
Tudo o que preciso fazer para passar por um número inteiro. Eu posso diferentes ações e verificar a ação em vez de extras.
Solução
Como seus extras não são constantes, você deve passar no código Java em vez de XML.
Intent intent = new Intent( this, YourTargetActivity.class );
intent.putExtra( EXTRAS_KEY, extras );
yourPref.setIntent( intent );
Outras dicas
Eu recebi uma resposta, você pode usá -lo assim:
<Preference
android:key="xxx"
android:title="xxx"
android:summary="xxx">
<intent android:action="xxx" >
<extra android:name="xxx" android:value="xxx" />
</intent>
</Preference>
Adicione a preferência ao arquivo preference.xml:
<Preference android:title="user" android:key="user"/>
E então você pode usar um SetonPreferenceClickListener para lançar uma intenção com 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;
}
});
Existe um campo de dados para as intenções descritas na documentação aqui.
É usado no aplicativo de demonstração da API para as preferências XML iniciarem uma intenção no exemplo de preferências de intenção.
Exemplo relacionado XML dessa demonstração em preferências.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>
Talvez essa abordagem possa funcionar para você?
trabalhando para mim.
<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>
Para enviar e -mail ou classificar no mercado, você precisa usar algo como
<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>
Você pode usar
<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>
Para enviar os dados de intenção. Então, em sua atividade, basta usar:
getIntent().getDataString()
Não é realmente uma resposta para sua pergunta, mas muito relacionada. Talvez alguém ache isso útil. Para API mais recente (> 11), você tem um arquivo de cabeçalhos de preferência e pode definir intenções personalizadas para um dos cabeçalhos. Eu estava tentando adicionar um extra personalizado a um dos cabeçalhos e a solução que encontrei é assim:
Em seus cabeços de preferência.xml:
<header
android:fragment="com.mypackage.MyPreference$Prefs1Fragment"
android:title="Intent"
android:summary="Launches an Intent.">
</header>
Na sua classe "MyPreference" (estende a preferenceatividade) que você possui:
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();
}
}