如何使用Android中的应用程序选择器选择要启动的任何应用程序?

如何使用Android中的应用程序选择器选择要启动的任何应用程序?,android,android-intent,android-intent-chooser,Android,Android Intent,Android Intent Chooser,以下代码基本上是从中复制的: 不幸的是,应用程序选择器没有显示。有人能指出上面的代码有什么问题吗 我想使用选择器允许用户选择一个应用程序,并允许该应用程序记住此应用程序,然后在代码中的另一个活动中启动此应用程序。您的意图与设备上的任何应用程序都不匹配。我猜这是缺少的MIME类型。根据意图调用setType,传入您试图共享的内容的MIME类型 你更大的问题是你实际上没有共享任何东西,没有额外的文本,也没有额外的流,因此你可能会破坏任何响应你意图的活动 更新:根据您更新的问题,您似乎对chooser

以下代码基本上是从中复制的:

不幸的是,应用程序选择器没有显示。有人能指出上面的代码有什么问题吗

我想使用选择器允许用户选择一个应用程序,并允许该应用程序记住此应用程序,然后在代码中的另一个活动中启动此应用程序。

您的意图与设备上的任何应用程序都不匹配。我猜这是缺少的MIME类型。根据意图调用setType,传入您试图共享的内容的MIME类型

你更大的问题是你实际上没有共享任何东西,没有额外的文本,也没有额外的流,因此你可能会破坏任何响应你意图的活动

更新:根据您更新的问题,您似乎对chooser的理解过于字面化了。:-当选择器允许用户从几个可能的匹配活动中选择一个时,选择器将启动所选活动。在新版安卓5.1+、IIRC上,您可以通过多种方式了解选择器的选择。但是如果你的目标不是开始一项活动,而是让用户选择一项。。。好的,您需要基于PackageManager和QueryInputActivities推出自己的UI。这就是主屏幕的基本功能:找到实现ACTION\u MAIN/CATEGORY\u LAUNCHER的所有活动,然后显示它们供用户选择。My演示了此过程。

您的意图与设备上的任何应用程序都不匹配。我猜这是缺少的MIME类型。根据意图调用setType,传入您试图共享的内容的MIME类型

你更大的问题是你实际上没有共享任何东西,没有额外的文本,也没有额外的流,因此你可能会破坏任何响应你意图的活动


更新:根据您更新的问题,您似乎对chooser的理解过于字面化了。:-当选择器允许用户从几个可能的匹配活动中选择一个时,选择器将启动所选活动。在新版安卓5.1+、IIRC上,您可以通过多种方式了解选择器的选择。但是如果你的目标不是开始一项活动,而是让用户选择一项。。。好的,您需要基于PackageManager和QueryInputActivities推出自己的UI。这就是主屏幕的基本功能:找到实现ACTION\u MAIN/CATEGORY\u LAUNCHER的所有活动,然后显示它们供用户选择。我的示例演示了这个过程。

谢谢您的提示。事实上,没有什么可以分享的。我只想通过选择器选择一个应用程序。这可能需要太多的空间来解释我为什么要这样做,因为代码不是生产代码。这可能吗?@Hong:我只想通过选择器选择一个应用程序-选择器不允许用户选择应用程序。它允许用户选择一个活动。所以,如果说应用程序,你真的是指主屏幕启动器活动,请使用ACTION\u MAIN/CATEGORY\u启动器意图,而不是ACTION\u SEND。再次感谢。我想我应该告诉你我到底想要什么,但是为了节省空间,跳过背景。我想使用选择器允许用户选择一个应用程序,让应用程序记住这个应用程序,并在以后的另一个活动中以代码形式启动它,而不是立即启动。我走错方向了吗?我以为选择器会提供包名,以后可以用它来启动应用程序。@Hong:不,选择器只会转身启动所选的活动。使用PackageManager和QueryInputActivities获取符合您意图的活动列表,然后呈现您自己的UI供用户选择。如果您在Stack Overflow中搜索Launchalot,这是我的一个示例应用程序,用于向用户提供启动程序活动列表。@Hong:如果您知道程序包名称,并且准备处理没有启动程序活动的应用程序,您的方法应该可以。感谢您提供的提示。事实上,没有什么可以分享的。我只想通过选择器选择一个应用程序。这可能需要太多的空间来解释我为什么要这样做,因为代码不是生产代码。这可能吗?@Hong:我只想通过选择器选择一个应用程序-选择器不允许用户选择应用程序。它允许用户选择一个活动。所以,如果说应用程序,你真的是指主屏幕启动器活动,请使用ACTION\u MAIN/CATEGORY\u启动器意图,而不是ACTION\u SEND。再次感谢。我想我应该告诉你我到底想要什么,但是为了节省空间,跳过背景。我想使用选择器允许用户选择一个应用程序,让应用程序记住这个应用程序,并在以后的另一个活动中以代码形式启动它,而不是立即启动。我走错方向了吗?我以为选择器会提供包名,以后可以用它来启动应用程序。@Hong:不,选择器只会转身启动所选的活动。使用PackageManager和QueryInputActivities获取活动列表
符合您的意图,然后呈现您自己的UI供用户选择。如果您在Stack Overflow中搜索Launchalot,这是我的一个示例应用程序,用于向用户提供启动程序活动列表。@Hong:如果您知道程序包名称,并且准备处理没有启动程序活动的应用程序,那么您的方法应该可以。
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);
}