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

问题描述 投票:0回答:1

我是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类,但似乎只有创建新配置文件和使用自己的服务实现的可能性。那不是我想要的。

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

android vpn android-vpn-service
1个回答
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“MyVPNConnection”无法点击。所以调用node.performAction(AccessibilityNodeInfo.ACTION_CLICK);返回false。

点击其他ui的工作正常。例如,在相同的设置活动中,单击“添加VPN”按钮可以正常使用上面的代码。如果有人有想法请帮助我。真的很令人沮丧。

更新:

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

© www.soinside.com 2019 - 2024. All rights reserved.