在 Android 中启动特定应用

Posted

技术标签:

【中文标题】在 Android 中启动特定应用【英文标题】:Starting a specific app in Android 【发布时间】:2011-01-18 05:09:03 【问题描述】:

我知道如何在 android 中加载 PDF 文件。但如果安装了多个 PDF 查看器,Android 会显示一个可供选择的列表。我想用特定的 PDF 查看器(比如 DroidReader)加载我的 PDF 文件。如何做到这一点?

【问题讨论】:

【参考方案1】:

我强烈建议不要像接受的答案所建议的那样在 Intent 中指定显式类名,因为这是应用程序的实现细节,您可以随时更改。

相反,像往常一样构建您的 Intent,但使用 Intent.setPackage() 指定系统应仅在所需应用的包名称中查找匹配的活动。那就是:

Intent intent = new Intent(Intent.ACTION_VIEW, uriToView);
intent.setPackage("com.package.name.of.droidreader");
startActivity(intent)

【讨论】:

但这也会将我绑定到那个特定的包。 是的,但是包名不会在版本之间改变,但活动名称(即实现细节)可能会。【参考方案2】:

然后指定活动的完整名称:

    Intent intent = new Intent();
    ComponentName comp = new ComponentName("com.package.name.of.droidreader", "com.package.name.of.droidreader.DroidReader");
    intent.setComponent(comp);
    startActivity(intent);

要知道包名称和活动是什么,您可以查看adb logcat 输出:当您打开活动时,它会记录在那里。当然,正确配置 Intent 以便 DroidReader 知道要打开什么文件。

最后,但很重要的是,您应该在 startActivity 方法周围加上一个 try-catch 块来捕获 ActivityNotFoundException(我确信大多数手机不会有那个特定的应用程序)。

【讨论】:

感谢您的快速回复,克里斯蒂安。让我看看。 @Cristian: 请告诉我如何在 DroidReader 中显示适合窗口的页面?我必须通过额外的东西吗?我已经发布了这个问题,但还没有回复。 ***.com/questions/4720443/… 直接询问 DroidReader 的作者,你的运气会更好。也许他们甚至没有放那样的东西,而您正在浪费时间。 嗨 Cristian,你知道其他支持此功能的 PDF 查看器吗? 注意——请看下面我的回答。这不是一个好建议,因为它会将您与目标应用的实现细节联系在一起,这些细节可能随时更改并破坏您的代码。

以上是关于在 Android 中启动特定应用的主要内容,如果未能解决你的问题,请参考以下文章

基于 Qt 的 android 应用程序在一台特定设备上启动时崩溃。 “dlopen 失败:libqtforandroid”

从原生 iOS 和 Android 应用程序启动到 OutSystem 移动应用程序的特定屏幕

当应用程序从商店更新或首次安装在 Android 中时,如何调用特定函数?

在android应用程序中启动浏览器[重复]

四大组件:Activity生命周期-Android12

四大组件:Activity生命周期-Android12