Android Intent createChooser()

Tyk*_*ikk 2 android android-intent

我的目标是创建一个隐式意图并使用 Intent.createChooser() 方法来选择一个应用程序来查看网页我被告知我需要创建一个选择器意图,以选择将执行的活动。

我的第一个问题是为什么我需要 2 个意图?为什么我不能只使用 baseIntent 并将其放入 createChooser() 方法中?

我的第二个问题是为什么我的应用程序没有显示可以选择哪个应用程序打开我的 URL 的菜单?

有人也可以检查我的意图过滤器,看看我是否得到了它们。

主活动.java

static private final String URL = "http://www.google.com";
static private final String TAG = "Lab-Intents";

// For use with app chooser
static private final String CHOOSER_TEXT = "Load " + URL + " with:";



private void startImplicitActivation() {


Log.i(TAG, "Entered startImplicitActivation()");

Uri webpage = Uri.parse(URL);
Intent baseIntent = new Intent(Intent.ACTION_VIEW,webpage);

Intent chooserIntent = null;


startActivity(Intent.createChooser(baseIntent,CHOOSER_TEXT));
Run Code Online (Sandbox Code Playgroud)

}

AndroidManifest.xml

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

        <data android:mimeType="string"/>
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
Run Code Online (Sandbox Code Playgroud)

Com*_*are 5

我被告知我需要创建一个选择器意图,以选择将执行的 Activity。

不必要。

我的第一个问题是为什么我需要 2 个意图?

你没有。

为什么我不能只使用 baseIntent 并将其放入 createChooser() 方法中?

你当然可以做到。什么createChooser(),主要是强制选择器。

假设用户在他们的 Android 设备上安装了 Chrome 和 Firefox,并且您ACTION_VIEW尝试在浏览器中打开网页。

如果您ACTION_VIEW Intent直接使用,并且用户已选择其中一个浏览器作为默认浏览器(来自之前的某些ACTION_VIEW请求),则Intent将被路由到默认浏览器。如果用户没有选择默认浏览器,则会向用户显示一个选择器,因此用户可以选择使用两个 Web 浏览器中的哪一个。该选择器将为用户提供一种方式,让他们选择作为未来请求的默认浏览器。

另一方面,如果您使用createChooser()包装您的ACTION_VIEW Intent,您的startActivity()调用将始终显示一个选择器,即使用户选择了默认的 Web 浏览器。而且,此选择器将没有供用户设置默认值的选项。

因此,通常情况下,您不使用createChooser(),除非您认为存在用户默认值不是这种情况下的正确选择的重大风险。您通常会看到createChooser()使用 with ACTION_SEND,因为这是一个非常通用的请求,默认值可能不是适当的操作过程。

我的第二个问题是为什么我的应用程序没有显示可以选择哪个应用程序打开我的 URL 的菜单?

如果在您使用 时createChooser(),用户被直接带到某个活动,那是因为该活动是Intent. 因此,例如,如果用户只安装了一个 Web 浏览器,而您用来调ACTION_VIEW出 URL,则系统不会只为一个 Web 浏览器显示选择器,而是只会将请求路由到该浏览器.

  • 感谢您的解释 !意图过滤器呢?你知道他们是否正确吗?我是否定义了正确的 &lt;action&gt;、&lt;category&gt; 和 &lt;data&gt; 元素? (3认同)
  • 在 AndroidManifest.xml 文件中,将适当的 Intent Filter 添加到 MyBrowserActivity 中,以便 Android 知道此 Activity 可以查看网页。为了表明 Activity 可以处理这种类型的 Intent,您需要向 Lab3b_MyBrowser 的 AndroidManifest.xml 文件中的 &lt;activity&gt; 添加一个 &lt;intent-filter&gt;。确保将正确的 &lt;action&gt;、&lt;category&gt; 和 &lt;data&gt; 元素添加到 &lt;intent-filter&gt; 元素。 (2认同)