Android VpnService 使用(一)

Android VpnService 使用(一)

本篇算是VpnService 使用的第一篇文章,主要讲述service创建,intent调用.

1: 申请权限

  <service android:name=".MyVpnService" android:permission="android.permission.BIND_VPN_SERVICE">
            <intent-filter>
                <action android:name="android.net.VpnService"/>
            </intent-filter>
        </service>

2: 实现

首选,我们需要调用VpnService.prepare函数. 该方法用于准备建立VPN连接.

  1. 如果VPN应用程序已经准备好,或者用户之前已经同意VPN应用程序 该函数返回null
  2. 否则则返回intent.
 Intent prepare = VpnService.prepare(getApplicationContext());
            if (prepare != null) {
   
                startActivityForResult(prepare, 0);
            } else {
   
                Log.d(TAG, "onCreate: onActivityResult");
                onActivityResult(0, RESULT_OK, null);
            }
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
   
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
   
        Intent intent = new Intent(this, MyVpnService.class);
        startService(intent);
        Log.d(TAG, "onActivityResult: startService");
    }
}
import android.content.Intent;
import android.net.VpnService;
import android.os.ParcelFileDescriptor;
import android.util.Log;

/**
 * @Author: zh
 * @Time: 23-12-11.
 * @Email:
 * @Describe:
 */
public class MyVpnService extends VpnService {
   

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
   
        VpnService.Builder builder = new VpnService.Builder();

        ParcelFileDescriptor parcelFileDescriptor = builder
                .addAddress("192.168.0.1", 24)
                .addRoute("0.0.0.0", 0)
                .addDnsServer("192.168.1.1").establish();
        if (parcelFileDescriptor==null ){
   
            Log.i("MyVpnService","MyVpnService not prepared");
            return START_STICKY;
        }
        return START_STICKY;
    }
}

授权的弹框如下:
在这里插入图片描述
在这里插入图片描述

设置中可以找到对应的Vpnservice:

在这里插入图片描述

相关推荐

  1. dorker使用

    2023-12-12 07:26:03       69 阅读
  2. Polars使用指南(

    2023-12-12 07:26:03       50 阅读
  3. 、Jooq-简单使用

    2023-12-12 07:26:03       46 阅读
  4. PostgreSQL使用

    2023-12-12 07:26:03       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-12 07:26:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-12 07:26:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-12 07:26:03       82 阅读
  4. Python语言-面向对象

    2023-12-12 07:26:03       91 阅读

热门阅读

  1. MATLAB 2021b 安装教程

    2023-12-12 07:26:03       78 阅读
  2. 微服务学习二

    2023-12-12 07:26:03       72 阅读
  3. 洛谷 P8628 [蓝桥杯 2015 国 AC] 穿越雷区

    2023-12-12 07:26:03       70 阅读
  4. 【Fiddler】IDEA配置Fiddler

    2023-12-12 07:26:03       52 阅读
  5. 面试经典150题(14)

    2023-12-12 07:26:03       62 阅读
  6. 面向遥感图像的道路区域提取及优化

    2023-12-12 07:26:03       59 阅读