解决通知栏权限禁止时,不弹出Toast问题

项目里使用Toast时不知道有木有遇到跟我同样困惑的童鞋?

1、自定义系统Toast弹入,弹出动画

2、某些品牌手机里,如果权限管理上禁止了“通知栏消息”权限时,Toast显示不出来。(这里以魅族手机为例,不同厂家手机可能权限名不一样,但大概意思差不多)

下面是个人对这解决这两个问题的一个总结。

9bcc2c186fd3

1、自定义Toast动画

关于Taost的自定义动画,google官方其实是没有直接暴露更改动画的api。通过查看源码,可以知道系统Toast的动画代码是TN里面实现的,遗憾的是TN被私有了。那么想要直接通过这个方法来更改动画是不行了,只有使用反射去实现了

Toast mToast = Toast.makeText(context, "", Toast.LENGTH_SHORT);

try {

Object mTN = null;

mTN = getField(mToast, "mTN");

if (mTN != null) {

Object mParams = getField(mTN, "mParams");

if (mParams != null

&& mParams instanceof WindowManager.LayoutParams) {

WindowManager.LayoutParams params = (WindowManager.LayoutParams) mParams;

params.windowAnimations = R.style.custom_animation_toast;

}

}

} catch (Exception e) {

}

2、权限限制Toast弹出

Demo代码量有点多,已放到github

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐