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连接.
- 如果VPN应用程序已经准备好,或者用户之前已经同意VPN应用程序 该函数返回null
- 否则则返回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:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现