【问题标题】:Android Start VPNClient (com.ipsec.vpnclient) ProgrammaticallyAndroid 以编程方式启动 VPNClient (com.ipsec.vpnclient)
【发布时间】:2014-08-27 13:36:08
【问题描述】:

我有一个需要 VPN 的 Android 应用程序。我的用户将使用 Galaxy Note 3,并将使用内置的“VPN 客户端”(com.ipsec.vpnclient)。在 VPN 掉线的情况下,我需要找到一种从我的应用程序启动此应用程序的方法。我已经想出了一种方法来确定 VPN 是否掉线,但我仍然需要一种方法来启动应用程序。

回答:
感谢@Muthu 的帮助,我能够使用以下方法使其工作。

final Intent intent = new Intent("android.intent.action.VIEW");
intent.setComponent(new ComponentName("com.ipsec.vpnclient", "com.ipsec.vpnclient.MainActivity"));

编辑:
更令人困惑的是,我可以通过 ADW 或 Nova 等另一个启动器轻松地为活动添加快捷方式 (com.ipsec.vpnclient.MainActivity)。我也尝试在下面的方法中使用com.ipsec.vpnclient.MainActivity而不是com.ipsec.vpnclient,但无济于事。

Intent intent = getPackageManager().getLaunchIntentForPackage("com.ipsec.vpnclient");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

上述方法适用于其他软件包,但我似乎无法启动这个。

这是在Android System Info 中查看时的应用程序。

关于如何以编程方式启动此应用程序的任何想法?

【问题讨论】:

    标签: android android-intent vpn


    【解决方案1】:

    您可以使用 Intent 启动任何已安装的应用程序。在你这样的情况下

    Intent LaunchVPN = getPackageManager().getLaunchIntentForPackage("com.ipsec.vpnclient");
    startActivity( LaunchVPN );
    

    编辑 您可以通过

    打开可以在设置页面中找到的预安装应用程序
    final Intent i = new Intent("android.intent.action.VIEW");
    i.setComponent(new   ComponentName("com.android.settings","com.android.settings.InstalledAppDetails"));
    startActivity(i);
    

    【讨论】:

    • 当我从我的片段(必须添加 getActivity())或直接从 startActivity( LaunchVPN ); 的活动中尝试它时,这让我获得了 NPE。
    • 您可以将活动实例传递给片段,您可以将其与片段一起使用。 @JoshI
    • 对不起,我一开始不小心从我的应用程序中复制并粘贴了错误的代码。我已经在使用上面的方法启动了。无论如何,仍然是 NPE。
    • 如果找不到包可能会导致null
    • 这正是我的问题,包存在。我可以使用 Nova 或 ADW 启动器直接创建到 com.ipsec.vpnclient / com.ipsec.vpnclient.MainActivity 的快捷方式,但我无法使用上述方法从我的应用程序中启动它们。
    猜你喜欢
    • 2012-04-28
    • 2011-10-06
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    相关资源
    最近更新 更多