1

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

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

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

Android 使用对话框消除完整操作

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

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

隐含意图(成功运行 - 访问 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>

明确意图(尝试):

public class Warning extends Activity {

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

}
4

1 回答 1

4

你不能。

你所谓的显式意图只针对一个类。

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

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

另一种选择是提出您自己的 URI 方案,例如 Google Play 的market://. 由于您的应用程序将是唯一使用此功能的应用程序,因此它将是唯一可用于处理链接的应用程序。但是,您需要确保所有试图通过其他地方(例如网页上的链接或其他应用程序)打开您的应用程序的第三方都遵循您的 URL 方案。此外,如果用户按下第三方链接之一并且您的应用程序未安装,则可能会导致ActivityNotFoundException用户设备上出现错误。

于 2013-03-26T18:31:44.540 回答