首选项和显式意图

时间:2012-08-30 14:09:31

标签: android sharedpreferences

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

理想情况下,我只想在xml中为该首选项指定一个显式意图

但是我的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中调用它

这是可能的还是我在错误的树上咆哮?

3 个答案:

答案 0 :(得分: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中的声明正确

答案 1 :(得分:5)

targetPackage和targetClass是您搜索的属性。

您可以使用:

<intent
    android:action="android.intent.action.MAIN"
    android:targetPackage="com.example.package"
    android:targetClass="com.example.package.FileChooserActivity" />

答案 2 :(得分:2)

你可以这样做:

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

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

并在您的Manifest中将此添加到要从首选项打开的Activity:

<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 是唯一的!

注意: 如果您需要打开一个网站或任何您无法编辑其清单条目的活动,您需要以编程方式从您的活动com.example.test.pref.action以意图打开它。