我编写了一个 BackupAgent 来备份我的数据,但我只想在连接 WiFi 而不是 GPRS/3G/4G 时启用备份。我可以以编程方式控制它吗?
3 回答
Wifi 状态始终可以如下所示:
1) 使用 Context.getSystemService(Context.WIFI_SERVICE) 方法获取 WifiManager 对象
2) 使用 isWifiEnabled类了解 Wifi 的状态。
要知道手机数据连接的状态,使用
TelephonyManager tm = Context.getSystemService(Context.TELEPHONY_SERVICE) 获取一个Instance,然后使用
Tm值。getDataState了解数据连接的状态。
现在,当 getDataState 的返回值为 TelephonyManager.DATA_DISCONNECTED 且 isWifiEnabled 的返回值为 true 时运行 BackupAgent。
为了能够在连接(3G/WiFi)断开后禁用备份,创建一个新方法如下:
enter code here
protected void checkMyConnectivity()
{
if (tm.getDataState == TelephonyManager.DATA_DISCONNECTED && wm.isWifiEnabled==true)
return true;
else
return false;
}`
并在您想要检查连接性时使用此代码,如果返回值为 false,请停止上传。如果您想非常具体,请改用 while 循环。
1) 每当您没有使用 Wifi 服务的 wifi 时,如果没有 wifi,则以编程方式从手机设置中取消帐户
AccountManager accountManager = AccountManager.get(this); 帐户[] 帐户 = accountManager.getAccounts(); Log.i(TAG,"账户大小"+accounts.length); for(Account acc:accounts){
Log.d(TAG,"acc name "+acc.name+" acc type "+acc.type);
boolean isSync = ContentResolver.isSyncActive(acc, ContactsContract.Settings.CONTENT_URI.toString());
Log.d(
在此处输入代码`TAG,"isSync "+isSync); cr.setSyncAutomatically(acc, , false);// 此处取消同步邮件帐户 }
protected boolean isWifiConnectivity() {
TelephonyManager telephonyManager = (TelephonyManager) getContext().getSystemService(Context.TELEPHONY_SERVICE);
WifiManager wifiManager = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE);
return (telephonyManager.getDataState() == TelephonyManager.DATA_DISCONNECTED && wifiManager.isWifiEnabled());
}