android.provider.Settings.Secure类。
记得在
AndroidManifest.xml中声明相关权限:
<uses-permission
android:name
=
“android.permission.ACCESS_NETWORK_STATE”
/>
<uses-permission
android:name
=
“android.permission.ACCESS_WIFI_STATE”
/>
<uses-permission
android:name
=
“android.permission.CHANGE_NETWORK_STATE”
/>
<uses-permission
android:name
=
“android.permission.CHANGE_WIFI_STATE”
/>
1. 打开WiFi最简单,直接调用系统的方法即可:
/**
* WIFI网络开关
*/
private
void
toggleWiFi
(
Context
context
,
boolean
enabled
)
{
WifiManager
wm
=
(
WifiManager
)
context
.
getSystemService
(
Context
.
WIFI_SERVICE
);
wm
.
setWifiEnabled
(
enabled
);
}
2. 打开移动网络比较麻烦,系统没有直接提供开放的方法,只在ConnectivityManager类中有一个不可见的setMobileDataEnabled方法,查看源代码发现,它是调用I<wbr><span style=”line-height:22px”>ConnectivityManager类中的</span><span style=”line-height:22px”>setMobileDataEnabled(boolean)方法。由于方法不可见,只能采用反射来调用:</span></wbr>
/**
* 移动网络开关
*/
private
void
toggleMobileData
(
Context
context
,
boolean
enabled
)
{
ConnectivityManager
conMgr
=
(
ConnectivityManager
)
context
.
getSystemService
(
Context
.
CONNECTIVITY_SERVICE
);
Class
<?>
conMgrClass
=
null
;
// ConnectivityManager类
Field
iConMgrField
=
null
;
// ConnectivityManager类中的字段
Object
iConMgr
=
null
;
// IConnectivityManager类的引用
Class
<?>
iConMgrClass
=
null
;
// IConnectivityManager类
Method
setMobileDataEnabledMethod
=
null
;
// setMobileDataEnabled方法
try
{
// 取得ConnectivityManager类
conMgrClass
=
Class
.
forName
(
conMgr
.
getClass
().
getName
());
// 取得ConnectivityManager类中的对象mService
iConMgrField
=
conMgrClass
.
getDeclaredField
(
“mService”
);
// 设置mService可访问
iConMgrField
.
setAccessible
(
true
);
// 取得mService的实例化类IConnectivityManager
iConMgr
=
iConMgrField
.
get
(
conMgr
);
// 取得IConnectivityManager类
iConMgrClass
=
Class
.
forName
(
iConMgr
.
getClass
().
getName
());
// 取得IConnectivityManager类中的setMobileDataEnabled(boolean)方法
setMobileDataEnabledMethod
=
iConMgrClass
.
getDeclaredMethod
(
“setMobileDataEnabled”
,
Boolean
.
TYPE
);
// 设置setMobileDataEnabled方法可访问
setMobileDataEnabledMethod
.
setAccessible
(
true
);
// 调用setMobileDataEnabled方法
setMobileDataEnabledMethod
.
invoke
(
iConMgr
,
enabled
);
}
catch
(
ClassNotFoundException
e
)
{
e
.
printStackTrace
();
}
catch
(
NoSuchFieldException
e
)
{
e
.
printStackTrace
();
}
catch
(
SecurityException
e
)
{
e
.
printStackTrace
();
}
catch
(
NoSuchMethodException
e
)
{
e
.
printStackTrace
();
}
catch
(
IllegalArgumentException
e
)
{
e
.
printStackTrace
();
}
catch
(
IllegalAccessException
e
)
{
e
.
printStackTrace
();
}
catch
(
InvocationTargetException
e
)
{
e
.
printStackTrace
();
}
}
/**
* <p>GPS开关
* <p>当前若关则打开
* <p>当前若开则关闭
*/
private
void
toggleGPS
()
{
Intent
gpsIntent
=
new
Intent
();
gpsIntent
.
setClassName
(
“com.android.settings”
,
“com.android.settings.widget.SettingsAppWidgetProvider”
);
gpsIntent
.
addCategory
(
“android.intent.category.ALTERNATIVE”
);
gpsIntent
.
setData
(
Uri
.
parse
(
“custom:3”
));
try
{
PendingIntent
.
getBroadcast
(
this
,
0
,
gpsIntent
,
0
).
send
();
}
catch
(
CanceledException
e
)
{
e
.
printStackTrace
();
}
}