# Android 11 去掉VPN授权弹窗

Android 11 去掉VPN授权弹窗


前言

在进行Frameworks开发过程中遇到需要客户需要使用VPN进行翻墙,但是在使用的时候总是会有授权弹窗,需要去掉

一、问题解决

1.定位问题

android/frameworks/base/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java

2.解决问题

--- a/android/frameworks/base/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java
+++ b/android/frameworks/base/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java
@@ -53,6 +53,13 @@ public class ConfirmDialog extends AlertActivity
         mPackage = getCallingPackage();
         mService = IConnectivityManager.Stub.asInterface(
                 ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
+                // add by  ltj   默认授予 vpn权限
+         if (true) {
+            setResult(RESULT_OK);
+            finish();
+            return;
+        }
+                                // add by  ltj  end
         if (prepareVpn()) {
             setResult(RESULT_OK);
@@ -69,21 +76,23 @@ public class ConfirmDialog extends AlertActivity
             finish();
             return;
         }
-        View view = View.inflate(this, R.layout.confirm, null);
-        ((TextView) view.findViewById(R.id.warning)).setText(
-                Html.fromHtml(getString(R.string.warning, getVpnLabel()),
-                        this, null /* tagHandler */));
-        mAlertParams.mTitle = getText(R.string.prompt);
-        mAlertParams.mPositiveButtonText = getText(android.R.string.ok);
-        mAlertParams.mPositiveButtonListener = this;
-        mAlertParams.mNegativeButtonText = getText(android.R.string.cancel);
-        mAlertParams.mView = view;
-        setupAlert();
-
-        getWindow().setCloseOnTouchOutside(false);
-        getWindow().addPrivateFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
-        Button button = mAlert.getButton(DialogInterface.BUTTON_POSITIVE);
-        button.setFilterTouchesWhenObscured(true);
+        //add by ltj
+        // View view = View.inflate(this, R.layout.confirm, null);
+        // ((TextView) view.findViewById(R.id.warning)).setText(
+        //         Html.fromHtml(getString(R.string.warning, getVpnLabel()),
+        //                 this, null /* tagHandler */));
+        // mAlertParams.mTitle = getText(R.string.prompt);
+        // mAlertParams.mPositiveButtonText = getText(android.R.string.ok);
+        // mAlertParams.mPositiveButtonListener = this;
+        // mAlertParams.mNegativeButtonText = getText(android.R.string.cancel);
+        // mAlertParams.mView = view;
+        // setupAlert();
+
+        // getWindow().setCloseOnTouchOutside(false);
+        // getWindow().addPrivateFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
+        // Button button = mAlert.getButton(DialogInterface.BUTTON_POSITIVE);
+        // button.setFilterTouchesWhenObscured(true);
+    //  add by ltj end
     }

总结

通过查询弹出框字段,通过grep 命令 找到字段id然后定位到弹出框位置,粗暴解决

每日赠言

不抬腿,跨不过栅栏;

不迈步,登不上高山;

空想家,沃土上收获不到五谷;

实干者,沙漠里能挖出清泉。

丢掉幻想扎实干,奋斗前景才灿烂

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个简单的 Android 应用程序,用于连接到 OpenVPN 服务器。这个应用程序使用 OpenVPN 作为 VPN 客户端,可以通过配置文件连接到服务器。 首先,在 AndroidManifest.xml 文件中添加以下权限: ``` <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> ``` 接下来,在 MainActivity.java 文件中添加以下代码: ``` import android.content.Context; import android.content.Intent; import android.net.VpnService; import android.os.Bundle; import android.os.ParcelFileDescriptor; import androidx.appcompat.app.AppCompatActivity; import java.io.IOException; import java.util.concurrent.TimeUnit; public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private static final int VPN_REQUEST_CODE = 0x0F; private ParcelFileDescriptor mInterface; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Start OpenVPN connection startVPN(); } private void startVPN() { try { // Load OpenVPN configuration file String config = "client\n" + "dev tun\n" + "proto udp\n" + "remote yourserver.com 1194\n" + "resolv-retry infinite\n" + "nobind\n" + "persist-key\n" + "persist-tun\n" + "cipher AES-256-CBC\n" + "auth SHA256\n" + "key-direction 1\n" + "remote-cert-tls server\n" + "comp-lzo\n" + "verb 3\n" + "<ca>\n" + "-----BEGIN CERTIFICATE-----\n" + "...certificate body...\n" + "-----END CERTIFICATE-----\n" + "</ca>\n" + "<cert>\n" + "-----BEGIN CERTIFICATE-----\n" + "...certificate body...\n" + "-----END CERTIFICATE-----\n" + "</cert>\n" + "<key>\n" + "-----BEGIN PRIVATE KEY-----\n" + "...private key body...\n" + "-----END PRIVATE KEY-----\n" + "</key>\n"; // Start OpenVPN service VpnService.Builder builder = new VpnService.Builder(); builder.setSession("MyVPN"); builder.addAddress("10.0.0.2", 24); builder.addRoute("0.0.0.0", 0); builder.setMtu(1500); builder.setBlocking(true); builder.setConfigureIntent(createConfigureIntent()); mInterface = builder.establish(); if (mInterface != null) { mInterface.close(); } } catch (IOException e) { e.printStackTrace(); } } private PendingIntent createConfigureIntent() { Intent intent = new Intent(this, MainActivity.class); return PendingIntent.getActivity(this, VPN_REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT); } } ``` 在代码中,我们使用 `VpnService.Builder` 类来创建一个 VPN 服务,并且使用一个 OpenVPN 配置文件来连接到服务器。我们将配置文件的内容嵌入到代码中,但是我们也可以将其存储在文件中,并在代码中读取。在这个例子中,我们只连接到了一个服务器,但是你可以通过添加多个 `remote` 行来连接到多个服务器。 注意,在 Android 7.0 及以上版本中,由于 Android 限制了 VPN 服务的启动方式,你需要在应用程序中添加一个按钮或其他 UI 元素,来让用户手动启动 VPN 服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值