2012-08-30 31 views
4

我试图从首选项目偏好项目和明确的意图

调用活动在理想情况下,我想简单地指定XML中的一个明确意图为优先项目

但我的谷歌赋已经抛弃了我,我只能找到隐含意图的例子,例如

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

我已经以编程方式在elesewhere中调用了我的活动,例如,

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

,但我想打电话从XML

这是可能的这种直接的还是我找错了树?

+0

@ webnetmobile.com - 我可以回答你的答案吗?它看起来很有用,只是删除了关于不能从xml调用意图的一点,所以你没有得到反对票 – bph

+0

请参阅下面的Dj S响应。似乎应该是被批准的答案。 –

回答

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条目不能编辑的任何活动,则需要以编程方式从你的活动com.example.test.pref.action与打开意图。

+0

我假设从首选项中打开活动是在android开发中非常常见的事情。 “事实上”的方法是以xml还是以编程方式从Activity.java中执行?你会怎么做? – bph

+0

如果您需要打开自己的活动,我会从XML中执行,如图所示。如果您需要打开一个网页,我会以编程方式执行,以避免为此创建另一个活动。 –

+0

这不是问题的正确答案。请参阅下面的DJ S回应。 – Ran

5

targetPackage和targetClass是您搜索的属性。

您可以使用此:

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

是否有意义为明确的意图指定一个动作?并且targetClass与componentName相同?我会认为targetPackage也是多余的? – bph

+0

我认为targetPackage是必需的。行动,我不太确定。 – njzk2

+0

如果指定明确的“Intent”,则__ _ _ _ _和_ _应该省略'android:action'属性。测试从Android 2.2到Android 4.1的设备。 – caw

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.mycom pany.mypackage”是在AndroidManifest.xml
  • 宣布根包如果目标类是没有内部‘com.mycompany.mypackage’,它也行,只要确保在AndroidManifest.xml声明是正确的
+0

这是问题绝对正确的答案! 标记的答案不是明确的意图,按定义“指定组件以名称开头(完全限定的类名称)”。 – Ran