Commit 2eb0b193 authored by Max Lv's avatar Max Lv

Tricks to start VPN service in background

parent 18e62360
...@@ -16,13 +16,13 @@ ...@@ -16,13 +16,13 @@
android:targetSdkVersion="16"/> android:targetSdkVersion="16"/>
<application <application
android:name="com.github.shadowsocks.ShadowsocksApplication" android:name=".ShadowsocksApplication"
android:hardwareAccelerated="true" android:hardwareAccelerated="true"
android:icon="@drawable/ic_launcher" android:icon="@drawable/ic_launcher"
android:label="@string/app_name"> android:label="@string/app_name">
<activity <activity
android:name="com.github.shadowsocks.Shadowsocks" android:name=".Shadowsocks"
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@style/Theme.GAEProxy" android:theme="@style/Theme.GAEProxy"
android:launchMode="singleTask"> android:launchMode="singleTask">
...@@ -32,8 +32,14 @@ ...@@ -32,8 +32,14 @@
</intent-filter> </intent-filter>
</activity> </activity>
<activity
android:name=".ShadowVpnActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:launchMode="singleTask">
</activity>
<activity <activity
android:name="com.github.shadowsocks.AppManager" android:name=".AppManager"
android:theme="@style/Theme.GAEProxy" android:theme="@style/Theme.GAEProxy"
android:label="@string/app_name"> android:label="@string/app_name">
<intent-filter> <intent-filter>
...@@ -43,11 +49,11 @@ ...@@ -43,11 +49,11 @@
</activity> </activity>
<service <service
android:name="com.github.shadowsocks.ShadowsocksService" android:name=".ShadowsocksService"
android:enabled="true"/> android:enabled="true"/>
<service <service
android:name="com.github.shadowsocks.ShadowVpnService" android:name=".ShadowVpnService"
android:label="@string/app_name" android:label="@string/app_name"
android:permission="android.permission.BIND_VPN_SERVICE" android:permission="android.permission.BIND_VPN_SERVICE"
android:exported="false"> android:exported="false">
...@@ -56,7 +62,7 @@ ...@@ -56,7 +62,7 @@
</intent-filter> </intent-filter>
</service> </service>
<receiver android:name="com.github.shadowsocks.ShadowsocksReceiver"> <receiver android:name=".ShadowsocksReceiver">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter> </intent-filter>
......
package com.github.shadowsocks
import android.app.Activity
import android.os.Bundle
import android.net.VpnService
import android.content.Intent
import android.util.Log
class ShadowVpnActivity extends Activity {
override def onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
val intent = VpnService.prepare(this)
if (intent != null) {
startActivityForResult(intent, Shadowsocks.REQUEST_CONNECT)
} else {
onActivityResult(Shadowsocks.REQUEST_CONNECT, Activity.RESULT_OK, null)
}
}
override def onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
resultCode match {
case Activity.RESULT_OK => {
val it: Intent = new Intent(this, classOf[ShadowVpnService])
startService(it)
}
case _ => {
Log.e(Shadowsocks.TAG, "Failed to start VpnService")
}
}
finish()
}
}
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
*/ */
package com.github.shadowsocks package com.github.shadowsocks
import android.app.{NotificationManager, Notification, PendingIntent, Service} import android.app._
import android.content._ import android.content._
import android.content.pm.PackageInfo import android.content.pm.PackageInfo
import android.content.pm.PackageManager import android.content.pm.PackageManager
...@@ -166,10 +166,15 @@ class ShadowVpnService extends VpnService { ...@@ -166,10 +166,15 @@ class ShadowVpnService extends VpnService {
} }
def handleCommand(intent: Intent) { def handleCommand(intent: Intent) {
if (intent == null) {
if (VpnService.prepare(this) != null) {
val i = new Intent(this, classOf[ShadowVpnActivity])
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(i)
stopSelf() stopSelf()
return return
} }
appHost = settings.getString("proxy", "127.0.0.1") appHost = settings.getString("proxy", "127.0.0.1")
sitekey = settings.getString("sitekey", "default") sitekey = settings.getString("sitekey", "default")
encMethod = settings.getString("encMethod", "table") encMethod = settings.getString("encMethod", "table")
...@@ -362,7 +367,6 @@ class ShadowVpnService extends VpnService { ...@@ -362,7 +367,6 @@ class ShadowVpnService extends VpnService {
super.onCreate() super.onCreate()
EasyTracker.getTracker.sendEvent("service", "start", getVersionName, 0L) EasyTracker.getTracker.sendEvent("service", "start", getVersionName, 0L)
settings = PreferenceManager.getDefaultSharedPreferences(this) settings = PreferenceManager.getDefaultSharedPreferences(this)
notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) notificationManager = getSystemService(Context.NOTIFICATION_SERVICE)
.asInstanceOf[NotificationManager] .asInstanceOf[NotificationManager]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment