58

嗨,我正在从首选项屏幕启动活动。活动在三个偏好之间共享。我想知道我是否可以在 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>

我需要做的就是真正传递一个整数。我可以不同的动作和检查动作而不是额外的。

4

8 回答 8

113

我得到了答案,你可以这样使用它:

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

</Preference>
于 2010-03-05T20:57:29.307 回答
13

此处的文档中描述了意图的数据字段。

它在 API 演示应用程序中用于 XML 首选项以启动 Intent Preferences 示例中的意图。

来自preferences.xml中该演示的相关示例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>

也许这种方法对你有用?

于 2010-01-20T23:46:01.523 回答
13

将首选项添加到 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;
    }
});
于 2013-11-10T07:56:25.610 回答
13

为我工作。

<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>
于 2016-10-24T10:04:25.310 回答
9

由于您的附加值不是常量,因此您应该在 java 代码而不是 xml 中传递它们。

Intent intent = new Intent( this, YourTargetActivity.class );
intent.putExtra( EXTRAS_KEY, extras );
yourPref.setIntent( intent );
于 2010-01-17T22:52:00.183 回答
2

您可以使用

<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()
于 2016-10-20T04:55:38.547 回答
1

要在市场上发送电子邮件或费率,您需要使用类似的东西

<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>
于 2013-11-05T12:30:43.740 回答
0

不是您问题的真正答案,但非常相关。也许有人会发现它很有用。对于较新的 API (>11),您有一个首选项标头文件,您可以为其中一个标头定义自定义意图。我试图向其中一个标题添加自定义 Extra,我找到的解决方案如下所示:

在您的preference-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();
    }
}
于 2012-11-18T16:05:40.753 回答