我是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类,但似乎只有创建新配置文件和使用自己的服务实现的可能性。那不是我真正想要的。
我阅读了很多帖子,但没有找到满意的解决方案。希望你们中的一个可以帮助我吗?我很满意各种暗示。 感谢
答案 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)。 这导致我的权限失败,但我不知道如何解决这个问题。