使用隐式intent过滤器时,如何绕过Complete Action Using菜单?

时间:2013-03-26 18:26:03

标签: java android eclipse android-intent

我正在尝试在此示例中访问URL(test.com)时自动启动我的应用程序

然而,每次我这样做时,都会被问到应该使用哪种应用程序。我想要一种方法来每次启动我的应用程序而不提示用户交互。

我已经研究过如何做到这一点,并找到了以下内容:

Android Eliminate Complete Action Using dialog

但是如果我实现一个明确的意图而不是一个隐含的意图 - 我如何指定在访问test.com时启动我的活动,因为我不会使用

<data android:scheme="http" android:host="test.com" android:pathPrefix="/" />

IMPLICIT INTENT(成功运行 - 在访问test.com时启动应用程序,但提示用户选择应用程序 - 这是不受欢迎的 - 需要启动我的应用程序而不使用提示的完整操作)

<activity android:name="com.nfc.linked.Warning">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"></action>
        <category android:name="android.intent.category.LAUNCHER"></category>
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.VIEW"></action>
        <category android:name="android.intent.category.DEFAULT"></category>
        <category android:name="android.intent.category.BROWSABLE"></category>
        <data android:scheme="http" android:host="test.com" android:pathPrefix="/" />
    </intent-filter>
</activity>

显性意图(ATTEMPT):

public class Warning extends Activity {

    Intent intent = new Intent(this, Warning.class);
    startActivity(intent); 

}

1 个答案:

答案 0 :(得分:4)

你不能。

你所谓的明确意图完全是一个类。

您之前所做的是在清单中创建一个intent-filter,它会跟踪与http://*.test.com/*行相关的网址相关的Intent。但是,由于HTTP是一种非常常见的协议,并且您的URI只是一个网站,因此其他应用程序(如侦听http://*等网址的浏览器)也会提供显示内容的功能。因此,Android会创建一个选择器,用户必须从中选择您的应用程序。

解决此问题的唯一方法是使用一个按钮打开应用中http://test.com的选择器,要求用户按下它并选择您的应用作为此类网址的默认处理程序。出于安全原因,无法以编程方式完成此操作,因为恶意应用程序可以将自己设置为各种操作的默认设置。

另一种选择是提出自己的URI方案,例如Google Play的market://。由于您的应用程序将是唯一使用此应用程序的应用程序,因此它将是唯一可用于处理链接的应用程序。但是,您需要确保所有第三方尝试通过其他位置(如网页上的链接或其他应用)打开您的应用,并遵循您的网址方案。此外,如果用户按下其中一个第三方链接并且未安装您的应用,则可能会在用户的设备上生成ActivityNotFoundException