我的目标是创建一个隐含的意图并使用
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_VIEW
Intent
,并且用户已选择其中一个浏览器作为默认浏览器(来自以前的一些ACTION_VIEW
请求),则Intent
将被路由到默认浏览器。如果用户没有选择默认浏览器,则会向用户显示一个选择器,以便用户可以选择要使用的两个web浏览器中的哪一个。该选择器将提供一种方法,使用户可以将其选择作为将来请求的默认浏览器。
另一方面,如果您使用createChooser()
来包装您的ACTION_VIEW
Intent
,则您的startActivity()
调用将始终调出选择器,即使用户选择了默认的web浏览器。而且,此选择器没有供用户设置默认值的选项。
因此,通常情况下,您不会使用createChooser()
,除非您认为在这种情况下,用户的默认值可能不是正确的选择。您通常会看到createChooser()
与ACTION_SEND
一起使用,因为这是一个非常普通的请求,默认值可能不是适当的操作过程。
我的第二个问题是为什么我的应用程序没有显示菜单,我可以选择哪个应用程序打开我的网址?
如果在使用createChooser()
时,用户被直接带到某个活动,这是因为该活动是唯一与Intent
匹配的活动。因此,例如,如果用户只安装了一个web浏览器,并且您使用ACTION_VIEW
调出一个url,则系统不会为一个web浏览器提供选择器,而是将请求路由到该浏览器。