Android studio:如何从android设置连接到现有的VPN

时间:2018-02-10 12:46:16

标签: android vpn android-vpn-service

我是android的初学者,正在开发一个应用程序,我希望在启动期间连接到现有的VPN连接(已经在android设置中配置)。

到目前为止,我能够通过意图打开设置活动:

Intent intent = new Intent(android.provider.Settings.ACTION_VPN_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

但我不想每次手动打开应用程序时点击进行连接。

有没有办法以编程方式点击?我认为应该有办法,因为应用程序" Automagic Premium"正是这样,但我不知道如何。

我找到了例如:

View.performClick()

但如何查看当前启动的意图?

还是有另一种连接方式吗?

我还测试了VpnService类,但似乎只有创建新配置文件和使用自己的服务实现的可能性。那不是我真正想要的。

我阅读了很多帖子,但没有找到满意的解决方案。希望你们中的一个可以帮助我吗?我很满意各种暗示。 感谢

1 个答案:

答案 0 :(得分:0)

我找到了一种使用AccessibilityService在设置活动中执行按钮单击的方法。我已经使用onAccessibilityEvent方法实现了一个AccessibilityService类,如下所示:

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
    Log.i(TAG, "ACC::onAccessibilityEvent: " + event.getEventType());    
    if(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED== event.getEventType()){
        AccessibilityNodeInfo nodeInfo = event.getSource();
        if (nodeInfo == null) {
            return;
        }

        List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("MyVPNConnection");
        for (AccessibilityNodeInfo node : list) {
            node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
        }
    }
return;
}

不幸的是AccessibilityNodeInfo&#34; MyVPNConnection&#34;不可点击。所以调用node.performAction(AccessibilityNodeInfo.ACTION_CLICK);返回false。

点击其他ui按预期工作。例如,在相同的设置活动中,单击按钮&#34;添加VPN&#34;与上面的代码一起工作正常。如果有人有想法请帮助我。这真的令人沮丧。

更新

使用AccessibilityService,我可以导航到我的HomeScreen并点击一些小部件。我在主屏幕上显示的所有小部件都是可点击的,点击的应用程序打开,除了一个应该连接到VPN的小部件(MYFritz!App 2)。 这导致我的权限失败,但我不知道如何解决这个问题。