片段和意图过滤器

时间:2011-11-16 15:15:16

标签: android android-manifest android-intent

我们都知道如何在AndroidManifest.xml中使用intent-filters来声明搜索,推送等活动的功能。我目前使用这样的intent-filter以下列方式注册自定义URL方案:

<activity android:name="NameOfActivity" >
    <intent-filter >
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWABLE" />
        <data
            android:host=""
            android:scheme="customscheme" />
    </intent-filter>
</activity>

这一切都很顺利,直到我决定将我的所有活动转换为片段,因为我需要以不同的方式在表格上显示用户界面。现在,在声明为 large 或更高的设备上,而不是在活动之间切换,我有一个活动可以删除并按要求添加新的碎片。这个选择被视为屏幕的左侧始终显示相同的内容,因此我不是添加此内容而是更改所有活动,而是更改片段。

问题在于,虽然intent-filter在手机上启动了正确的活动,但此活动绝不应在平板电脑上启动。相反,我想在片段中处理此URL。截至目前,我认为无法解决这个问题。一种想法是以编程方式添加intent-filter,但经过一些研究后我无法弄清楚这是否可行。另一个想法是以某种方式在片段上添加intent-filter,但这不起作用,因为片段无法在没有托管它的活动的情况下启动。

简而言之: 在手机上,我需要一个活动来处理intent-filter,但在平板电脑上我需要另一个活动来处理intent-filter。

有没有办法实现这个目标?

3 个答案:

答案 0 :(得分:1)

是否可以让您的intent-filter活动确定设备的分辨率,然后为此启动相应的活动?

另外,我认为Fragments的设计考虑了你的情况:描述用户界面的各个方面,然后根据屏幕分辨率显示全部或部分功能。

http://developer.android.com/guide/topics/fundamentals/fragments.html

答案 1 :(得分:1)

一个月后,我还没有找到解决方案。据了解,该活动是在其他一切之上发布的。它打破了整个流程,是一个非常糟糕的解决方法,但至少它是有效的。排除该功能是不行的,因此这是唯一的解决方案。我很高兴看到一个更好的解决方案,但据了解它似乎根本不可能。

答案 2 :(得分:0)

我认为你正朝着错误的方向接近整个片段范式。

  

在手机上,我需要一个活动来处理intent-filter,但在平板电脑上我需要另一个活动来处理intent-filter。

以我接近情况的方式重述您的摘要:

  

在手机上,我需要基于加载特定片段的活动   在设备屏幕上。在这里,手机上加载的片段将有一些机制来启动包含更多信息的另一个活动。

     

在平板电脑上,我需要活动来加载两个片段。在这里,左侧片段将始终显示相同的内容,并且加载的右侧片段将随着交换片段的某种机制而改变。

可以在布局XML中指定不同的片段(对于单个活动,使用不同布局文件夹中的不同XML布局文件 - 使用大小限定符),因此不需要Java来加载基于片段的不同片段/片段关于设备尺寸。

如果不了解您的申请,以及为什么选择(或为什么需要)进行单独的活动,很难进一步阐述。

如果您想继续使用当前的解决方案,可以使用launch modes手动覆盖Backstack。