我的目标是创建一个隐含的意图并使用
intent.createChooser()方法选择用于查看网页的应用程序
有人告诉我,我需要创建一个选择者意图,来选择将要执行的活动。
我的第一个问题是为什么我需要两个意图?为什么我不能使用BaseIntent并将其放入createChooser()方法中?
我的第二个问题是为什么我的应用程序没有显示菜单,我可以选择哪个应用程序打开我的网址?
有人也可以检查我的意图过滤器,看看我是否得到所有。
main活动.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));

}
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>

最佳答案

有人告诉我,我需要创建一个选择者意图,来选择将要执行的活动。
不一定。
我的第一个问题是为什么我需要两个意图?
你没有。
为什么我不能使用BaseIntent并将其放入createChooser()方法中?
你当然可以。createChooser()的主要作用是强制选择。
假设用户的android设备上同时安装了chrome和firefox,并且您使用ACTION_VIEW尝试在浏览器中打开网页。
如果您直接使用ACTION_VIEWIntent,并且用户已选择其中一个浏览器作为默认浏览器(来自以前的一些ACTION_VIEW请求),则Intent将被路由到默认浏览器。如果用户没有选择默认浏览器,则会向用户显示一个选择器,以便用户可以选择要使用的两个web浏览器中的哪一个。该选择器将提供一种方法,使用户可以将其选择作为将来请求的默认浏览器。
另一方面,如果您使用createChooser()来包装您的ACTION_VIEWIntent,则您的startActivity()调用将始终调出选择器,即使用户选择了默认的web浏览器。而且,此选择器没有供用户设置默认值的选项。
因此,通常情况下,您不会使用createChooser(),除非您认为在这种情况下,用户的默认值可能不是正确的选择。您通常会看到createChooser()ACTION_SEND一起使用,因为这是一个非常普通的请求,默认值可能不是适当的操作过程。
我的第二个问题是为什么我的应用程序没有显示菜单,我可以选择哪个应用程序打开我的网址?
如果在使用createChooser()时,用户被直接带到某个活动,这是因为该活动是唯一与Intent匹配的活动。因此,例如,如果用户只安装了一个web浏览器,并且您使用ACTION_VIEW调出一个url,则系统不会为一个web浏览器提供选择器,而是将请求路由到该浏览器。

10-07 23:13