Android:使用意图过滤器启动应用程序不起作用

时间:2011-12-10 02:05:16

标签: android android-manifest android-intent

我知道这个问题在SO上被多次询问和回答,但我无法让它发挥作用。这是我的清单文件(我有3个活动,我正在显示我想要关联时唯一显示的文件):

    <activity
        android:name=".MyActivity"
        android:label="@string/app_name"
        android:theme="@style/HoloDarkTheme" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <action android:name="android.intent.action.ACTION_SEND" />
            <action android:name="android.intent.action.EXTRA_TEXT" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.action.BROWSABLE" />
            <category android:name="android.intent.action.DEFAULT" />
            <data android:scheme="http" />
            <data android:host="example.com" />
        </intent-filter>
    </activity>

当我启动浏览器并转到“example.com”时,我的应用程序未启动。上面的XML有什么问题吗?

不确定是否相关,但此活动使用MediaPlayer播放视频。另外,我使用的是SDK版本11。

4 个答案:

答案 0 :(得分:1)

我明白了。这只是一个拼写错误的案例。而不是这个,

        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.action.BROWSABLE" />
        <category android:name="android.intent.action.DEFAULT" />

我需要在最后两行用“android.intent.category”替换“android.intent.action”:

        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />

答案 1 :(得分:0)

我在这里添加这个答案,因为这个帖子是谷歌搜索“意图过滤从http无法启动应用程序”的热门点击之一。我想我的根本原因也可能被认为是一个错字,但我将其称为“Android文档缺陷”。

this page的底部有一条线路,将URI分解为:

<scheme>://<host>:<port>/<path>

此细分表示我会添加“://”,“:”和“/”,因此我在intent-filter中使用了以下数据:

<data android:scheme="http" />
<data android:host="my.school.edu" />
<data android:path="thingy" />

然后我给自己发了一条短信,其中包含以下文字:“my.school.edu/thingy”,我的短信客户端(环聊)将其识别为网址,因此可以点击它。但是,点击它只是给了我一个浏览器选择,我的应用程序没有显示。

所以我删除了主机和路径,我的应用程序针对任何链接(或至少我尝试的每个链接)启动。我把主机放回去了,它仍然有效。把路径放回去,我们又恢复了工作。一时兴起,我决定在路径前加一条斜线:

<data android:path="/thingy" />

...etvoilà!浏览器中有我的应用程序!所以我的视图中的错误是Android的文档,它表明斜杠是自动插入的。 :)显然不是。

更多信息:我正在使用HTTP方案,因为这是可以在短信和电子邮件中点击的内容,让我可以免费搭乘这一点。

请注意,如果您指定一个唯一的主机(和路径),并且用户在从列表中选择您的应用时选择“始终”,则链接上的未来点击将绕过该选择对话框并直接转到您的应用,很好。

答案 2 :(得分:-1)

确保您的清单中有互联网权限。

答案 3 :(得分:-1)

我怀疑您是否可以覆盖http计划以指回您的应用。