我正在尝试从首选项中调用活动
理想情况下,我只想在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中调用它
这是可能的还是我在错误的树上咆哮?
答案 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>
注意:
答案 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以意图打开它。