Comments (28)
@ sdandroid 如果你的手机有 google play service 同时手机登录了 google 账户, 翻墙梯子没问题的话, 会同步到 google calendar
from birthday.
@scola 不是同步到日历,是app data 同步到 google account。这样可以恢复数据。
from birthday.
@sdandroid 应用数据可以同步到 google 账户, 有这样的 api?
from birthday.
@scola 有的,看看 https://developer.android.com/guide/topics/data/backup.html 这个行不行
from birthday.
@sdandroid 看了那个文档, 好像需要 GMS 支持, 国行手机估计无福享用了
from birthday.
我的建议是直接用联系人的生日即可. 联系人统一保存阳历生日. 由谷歌去实现联系人同步
from birthday.
@xuefer 那不是又要申请一个联系人的权限,权限申多了,隐私风险,所以一直都尽量简单
from birthday.
软件实现是简单了, 用户就麻烦了. 结果反倒有另外的思路说要同步到谷歌云什么的 又纠结翻墙问题. 实际上如果跟联系人同步这些都不是问题, 而且未必是谷歌账号 别的账号都可以
很明显在软件里用到联系人的权限就没什么盗隐私可以怀疑. 不像某个奇葩搜狗输入法还用到定位权限, 他们还特意在平时弹出个提醒要用户允许, 而不是真的需要的时候才提醒(比如在下载细胞词库的时候想知道用户在哪儿自动把城市排在前面)
而且新的 sdk 可以动态申请权限, 用户可以不给权限嘛. 就是你代码写起来麻烦多了
from birthday.
@xuefer 一直以来谢谢大家的建议,但是很多东西都必须要有取舍
比如最初这个 app 的版本没有年龄信息, 后来很多用户要求加上年龄, 于是某个版本加上了
这两天又有用户说不需要年龄,不知道哪年生,要求去除年龄,或者增加一个选项由用户选择
现在我觉得 @sdandroid 提到的备份用户数据,这个比较重要,我一直也在考虑
from birthday.
如果不知道哪年生的话, 确实在联系人里记录阳历压根没法计算出农历, 只能直接记录农历(如果知道). 这点也是算法技术上逻辑上不可能用联系人记录来实现的
感谢你的 app 贡献
from birthday.
@sdandroid 我尝试了 https://developer.android.com/guide/topics/data/keyvaluebackup.html
这种方法备份, 在恢复数据的时候有错误, 按理使用这种方法不用上传到 google play 就能调试吧
也不知道是不是我手机 rom 的问题, 我用的三星手机调试的
12-05 08:46:42.899 E/BackupManagerService( 987): Error finishing restore
12-05 08:46:42.899 E/BackupManagerService( 987): java.lang.NullPointerException: Attempt to read from field 'java.util.Set gxu.d' on a null object reference
12-05 08:46:42.899 E/BackupManagerService( 987): at android.os.Parcel.readException(Parcel.java:1552)
12-05 08:46:42.899 E/BackupManagerService( 987): at android.os.Parcel.readException(Parcel.java:1499)
12-05 08:46:42.899 E/BackupManagerService( 987): at com.android.internal.backup.IBackupTransport$Stub$Proxy.finishRestore(IBackupTransport.java:819)
12-05 08:46:42.899 E/BackupManagerService( 987): at com.android.server.backup.BackupManagerService$PerformUnifiedRestoreTask.finalizeRestore(BackupManagerService.java:7980)
12-05 08:46:42.899 E/BackupManagerService( 987): at com.android.server.backup.BackupManagerService$PerformUnifiedRestoreTask.execute(BackupManagerService.java:7361)
12-05 08:46:42.899 E/BackupManagerService( 987): at com.android.server.backup.BackupManagerService$BackupHandler.handleMessage(BackupManagerService.java:770)
12-05 08:46:42.899 E/BackupManagerService( 987): at android.os.Handler.dispatchMessage(Handler.java:102)
12-05 08:46:42.899 E/BackupManagerService( 987): at android.os.Looper.loop(Looper.java:135)
12-05 08:46:42.899 E/BackupManagerService( 987): at android.os.HandlerThread.run(HandlerThread.java:61)
12-05 08:46:42.899 I/BackupRestoreController( 987): restoreFinished for 0
12-05 08:46:42.899 I/BackupManagerService( 987): Restore complete.
from birthday.
@scola 我没开发过android,你上传一个apk,我来试试,我是nexus。
from birthday.
@sdandroid 先报告一下你目前用的 app 版本
怕损坏了你现有的 app 数据
from birthday.
话说现在这个 app 已经用到 Contacts 权限了. MM 下就有勾选这个权限
from birthday.
@sdandroid 还有就是你的google calendar 创建了 Lunar Birthday 这个 日历了没有
from birthday.
@xuefer 嗯, 需要搞一个运行时权限, 下一个版本加,针对6.0以上版本
from birthday.
@scola 1.9.2 有创建这个日历
from birthday.
我是说已经有用到联系人权限了, 看麻烦度, 心情好的时候想做的话就做上存取联系人生日的功能吧
概括下几个细节
-
Google API 看起来很酷. 但是很慢/需要软件联机去操作. 正规的做法是在 system Accounts 里添加个账号并且实现 Sync (adapter?). 现在没有 Account 里的 Sync, 由 app 来 sync, 一旦关掉软件就不同步了. 网络不好/离线状态, 代码再丰富再 geek, 都不如 Calendar Provider 更简单/有问题找 google account 设置
-
app 自己存储生日记录. 脱离联系人资料维护一套. 用户角度来说使用略微麻烦. 已经保存了十几个好友的生日又要重新设置一遍了. 从程序角度来说, 要想不设置/保存年份, 在联系人里又没法记录. 没了年份就必须额外记录这是农历还是阳历生日, 因为有了年份可以统一记录成阳历
如果不考虑缺少年份的情况也不考虑开发麻烦的话. 最傻瓜式的还是联系人里保存生日之后, 同时出现日历里阳历/农历生日. (谷歌有个自动的 Birthdays 日历, 这个app负责实现个"自动"的农历生日即可了)
from birthday.
@sdandroid 测试这个需要安装新app,然后会自动备份app数据,再卸载app 重装, 如果有问题的话你的 数据就都没有了, 如果你的手机root 了的话, 倒是有别方法先备份一下
https://www.dropbox.com/s/f43griwiggzu4di/birthday-release-1.9.2.apk?dl=0
from birthday.
@xuefer Calendar Provider 这个已经实现了
https://github.com/scola/birthday/blob/master/app/src/main/java/io/github/scola/birthday/BirthdayListProviderFragment.java
从联系人读取的话有个问题是,很多人注册 google 的时候生日是随意填写的,或者不记得年份,或者不知道用户填写的是农历还是阳历,所以这个真不好弄
from birthday.
@scola 没有恢复。在google drive 也没看到这个应用。
from birthday.
@sdandroid 我这里也是不恢复,目前没找到原因,android 还提供了另一种备份的方法
https://developer.android.com/guide/topics/data/autobackup.html
不过需要 6.0 以上才支持, 所以很多用户用不了。。。
你的android 版本是多少?
from birthday.
android 7
from birthday.
我看到实现代码了. 但是也看到右上角的图标转啊转, 转好久提示 [Error] Closed 跟 [Error] Unexpected stream close 以及如果关掉 wifi 会提示 Unable to resolve www.googleapis.com 什么的. 离线的时候软键修改生日日期, 日历里并没有更新记录
from birthday.
@xuefer 因为代码判断了你之前使用了 google calendar api, 所以就一直 使用 api, 之前只支持那种方式, 如果新安装的话 都使用 provider, 你可以清除一下数据试试, 1.9.2 版本
这样做是怕影响老用户升级版本
from birthday.
@sdandroid 这个问题应该已经解决了,android 每个版本的备份策略都可能不一样,为了省电考虑,有的一天备份一次,有的一周备份一次,不是应用数据改变实时备份的,所以我先上传一个版本,大家帮忙测试反馈吧,可能需要一段时间之后用别的手机安装,登录同一个google 账号,才能看到效果,手机设置里面的备份与恢复需要打开,恢复的时候需要联网,翻墙正常,心累。。。
手动触发备份
adb shell bmgr backup io.github.scola.birthday
adb shell bmgr run
from birthday.
@scola 现在app 删除一条记录,对应日历里面的记录会自动删除吗?
from birthday.
@sdandroid 会的, 这个功能一直都有
from birthday.
Related Issues (14)
- 感谢作者 HOT 5
- 安卓8.0同步失败 HOT 4
- 建议可以用阴历的时间,自动换算农历
- 希望可以设置为「全天」提醒的日历事项 HOT 1
- repeat设置为10年但是只出现在本年度
- 不能设置农历 二月三十 HOT 1
- 添加新日历出错
- 岁数提醒能不能直接加在标题或者说明里 HOT 2
- 6.0 下闪退 HOT 7
- Why not use Calendar Provider instead HOT 1
- Read & list birthday from contacts
- 勾选农历的时候自动换算日期
- Calendar Provider 的农历生日会丢失 HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from birthday.