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 {@Overridepublic 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: