zhitaocai / ToastCompat_Deprecated

【Deprecated】兼容小米MIUI系统上,后台应用没法弹出Toast的问题
63 stars 17 forks source link

Toast 显示的判断 和 MIUI 8 上 TYPE_TOAST 权限导致的崩溃 #1

Open ongakuer opened 8 years ago

ongakuer commented 8 years ago

Hi,原来代码里是否使用自定义Toast,是根据MIUI系统判断的。实际上在 Android 的设置里关闭应用通知,就不能弹出Toast。

Android Support v4 24.0.0 包里提供了是否允许通知的检测(Android 4.4 以上能使用)。考虑到现在小米、魅族、华为的系统基本都是 4.4 以上了。 用这个判断兼容范围更广泛。

另外发现,MIUI 8开发版,如果禁用通知, TYPE_TOAST 会提示没有权限,然后崩溃(不知道小米什么时候会变更)。所以在 show 和 hide 的时候都 Try 一下,防止崩溃。

具体的修改在这里。 https://github.com/ongakuer/ToastCompat/commit/cbc111d4b71e5aefc84b819352a2ef15883773b9

如果需要,我可以Pull Request

Mran commented 8 years ago

HI,我发现,在miui8开发版上,后台又能够使用原生Tosat.但是在之前的miui还是不可以的.建议使用时对miui的版本做一个判断.如果是miui8就使用原生的Toast,不是的话就使用你的这个.

shaobin0604 commented 8 years ago

@Mran 如 @ongakuer 所说,原生的 Toast 在通知权限被禁用的情况下,是弹不出来的。

@ongakuer 根源是缺少了权限声明 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> ,作者已在 README 中说明