我的设备所有者应用程序存在问题:在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);
}
哇...这对我的项目来说是一个严重的缺陷!不开玩笑:用户在安装设备所有者应用程序时是否真的无法备份数据?
那么,希望这里有人可以有信息或经验来分享这个?可悲的是,我不熟悉这个,但可能用反射这可以在以后修复吗?
感谢您阅读!
答案 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
我可以物理访问运行我的应用的设备,因此这个解决方案在我的情况下运行良好。我希望这有助于至少在开发环境下恢复数据。