如何使用 Android 中的应用选择器选择要启动的应用?
How to choose any app to launch with the app chooser in Android?
下面的代码基本上是从Android document复制过来的:
Intent intent = new Intent(Intent.ACTION_SEND);
// Create intent to show chooser
Intent chooser = Intent.createChooser(intent, "Choose an app");
// Verify the intent will resolve to at least one activity
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(chooser);
}
很遗憾,应用选择器未显示。谁能指出上面的代码有什么问题?
我想使用选择器允许用户 select 一个应用程序,并让该应用程序记住这个应用程序,稍后在另一个 activity 代码中启动它,
您的 Intent
与设备上的任何应用都不匹配。我的猜测是它是缺少的 MIME 类型。在 intent
上调用 setType()
,传入您尝试共享的内容的 MIME 类型。
你更大的问题是你实际上没有分享任何东西(没有 EXTRA_TEXT
,也没有 EXTRA_STREAM
),所以你可能会崩溃 activity 响应你的 Intent
.
UPDATE:根据您更新后的问题,您似乎从字面上理解了 "chooser"。 :-) While the chooser allows the user to choose from one of several possible matching activities, the chooser then starts the chosen activity.在 Android(5.1+,IIRC)的较新版本中,您可以通过多种方式了解选择器选择的内容。但是,如果您的 objective 是 而不是 来启动 activity,而只是让用户选择一个...据我所知,您需要自己推出 UI 基于 PackageManager
和 queryIntentActivities()
。这基本上就是主屏幕的作用:找到所有实现 ACTION_MAIN
/CATEGORY_LAUNCHER
的活动,然后显示它们供用户选择。我的 Launchalot
sample app 演示了这个过程。
下面的代码基本上是从Android document复制过来的:
Intent intent = new Intent(Intent.ACTION_SEND);
// Create intent to show chooser
Intent chooser = Intent.createChooser(intent, "Choose an app");
// Verify the intent will resolve to at least one activity
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(chooser);
}
很遗憾,应用选择器未显示。谁能指出上面的代码有什么问题?
我想使用选择器允许用户 select 一个应用程序,并让该应用程序记住这个应用程序,稍后在另一个 activity 代码中启动它,
您的 Intent
与设备上的任何应用都不匹配。我的猜测是它是缺少的 MIME 类型。在 intent
上调用 setType()
,传入您尝试共享的内容的 MIME 类型。
你更大的问题是你实际上没有分享任何东西(没有 EXTRA_TEXT
,也没有 EXTRA_STREAM
),所以你可能会崩溃 activity 响应你的 Intent
.
UPDATE:根据您更新后的问题,您似乎从字面上理解了 "chooser"。 :-) While the chooser allows the user to choose from one of several possible matching activities, the chooser then starts the chosen activity.在 Android(5.1+,IIRC)的较新版本中,您可以通过多种方式了解选择器选择的内容。但是,如果您的 objective 是 而不是 来启动 activity,而只是让用户选择一个...据我所知,您需要自己推出 UI 基于 PackageManager
和 queryIntentActivities()
。这基本上就是主屏幕的作用:找到所有实现 ACTION_MAIN
/CATEGORY_LAUNCHER
的活动,然后显示它们供用户选择。我的 Launchalot
sample app 演示了这个过程。