4

我正在尝试从首选项项目中调用活动

理想情况下,我想简单地在 xml 中为该 Preference 项指定一个明确的意图

但是我的 google fu 抛弃了我,我只能找到隐含意图的例子,例如

<Preference android:title="@string/prefs_web_page" >
    <intent android:action="android.intent.action.VIEW"
            android:data="http://www.example.com" />
</Preference>

我已经以编程方式在其他地方调用了我的活动,例如

Intent intent = new Intent(this, FileChooserActivity.class);

但我想直接从 xml 调用它

这是可能的还是我叫错了树?

4

3 回答 3

7

我相信当前选择的答案不是明确的意图,而是隐含的。
为了使它成为一个明确的意图,

您的偏好 XML 应如下所示(定义 targetPackage 和 targetClass):

<Preference android:title="@string/preference_title__intent_act" >
    <intent 
        android:targetPackage="com.mycompany.mypackage"
        android:targetClass="com.mycompany.mypackage.IntentActivityFromPreferences" />
</Preference>

您在 AndroidManifest.xml 中的活动声明应如下所示:

<manifest 
    ...
    package="com.mycompany.mypackage">
    ...
    ...
        <activity 
            android:name="com.mycompany.mypackage.IntentActivityFromPreferences"
            android:label="@string/activity_intentactivityfromprefs_name">
        </activity>
</manifest>

笔记:

  • “com.mycompany.mypackage”是AndroidManifest.xml中声明的根包
  • 如果目标类不在“com.mycompany.mypackage”中,也可以,只要确保AndroidManifest.xml中的声明正确即可
于 2014-03-19T05:57:37.147 回答
5

targetPackage 和 targetClass 是您搜索的属性。

你可以使用这个:

<intent
    android:action="android.intent.action.MAIN"
    android:targetPackage="com.example.package"
    android:targetClass="com.example.package.FileChooserActivity" />
于 2012-08-30T14:23:17.250 回答
2

你可以这样做:

将此添加到您的首选项 XML:

<Preference
  android:key="TODO"
  android:title="@string/TODO"
  android:summary="@string/TODO">
    <intent
      android:action="com.example.test.pref.action"/>
</Preference>

并将其添加到您的清单中以从首选项中打开的活动:

<activity android:name=".todo"
  android:label="@string/todo">
  <intent-filter>
    <action android:name="com.example.test.pref.action" />
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

确保com.example.test.pref.action是唯一的!

注意: 如果您需要打开一个网站或任何您无法编辑其 Manifest 条目的 Activity,您需要使用 Intent 从您的 Activity com.example.test.pref.action 以编程方式打开它。

于 2012-08-30T14:18:17.223 回答