设备所有者现在禁用备份服务

时间:2015-05-20 07:38:15

标签: android android-backup-service device-owner

我的设备所有者应用程序存在问题:在Android 5.1之前它运行良好,但现在在更新到Android 5.1之后,安装设备所有者App会禁用备份服务。

现在在设备设置中,进入备份和放大器时重置选项,备份服务显示为灰色,说明:备份服务处于非活动状态。这是由您的设备政策

设置的

我可以在google git存储库中找到this source ...代码不是很长且易于理解,他们使用android.app.backup.IBackupManager来禁用服务......但更容易的是提交评论:

  

设置设备所有者时关闭备份管理器服务

以下是他们的所作所为:

import android.app.backup.IBackupManager;

// Shutting down backup manager service permanently.
long ident = Binder.clearCallingIdentity();
try {
    IBackupManager ibm = IBackupManager.Stub.asInterface(
        ServiceManager.getService(Context.BACKUP_SERVICE));
    ibm.setBackupServiceActive(UserHandle.USER_OWNER, false);
} catch (RemoteException e) {
    throw new IllegalStateException("Failed deactivating backup service.", e);
} finally {
    Binder.restoreCallingIdentity(ident);
}
哇...这对我的项目来说是一个严重的缺陷!不开玩笑:用户在安装设备所有者应用程序时是否真的无法备份数据?

那么,希望这里有人可以有信息或经验来分享这个?可悲的是,我不熟悉这个,但可能用反射这可以在以后修复吗?

感谢您阅读!

2 个答案:

答案 0 :(得分:3)

因为这是Google搜索设备所有者和备份

从Android O开始,您可以使用DevicePolicyManager

启用它
setBackupServiceEnabled (ComponentName admin, Boolean enabled)

https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html

您可以使用isBackupServiceEnabled

检查是否启用

或设置

答案 1 :(得分:0)

我遇到了同样的问题,此外 adb backup 将无法运行,因为连接被拒绝(我假设因为备份服务已关闭)。就像参考一样,这是我在logcat中看到的错误之一:

W/main(22253): type=1400 audit(0.0:106): avc: denied { ioctl } for path="socket:[76146]" dev="sockfs" ino=76146 ioctlcmd=7704 scontext=u:r:shell:s0tcontext=u:r:adbd:s0 tclass=unix_stream_socket permissive=0

虽然我还没弄清楚如何重新启动备份服务(我相信有办法),但我找到了一个非常有用的替代 adb backup 来访问数据的方法: https://stackoverflow.com/a/30265804/3317381

我可以物理访问运行我的应用的设备,因此这个解决方案在我的情况下运行良好。我希望这有助于至少在开发环境下恢复数据。