解决通知栏权限禁止时,不弹出Toast问题
项目里使用Toast时不知道有木有遇到跟我同样困惑的童鞋?
1、自定义系统Toast弹入,弹出动画
2、某些品牌手机里,如果权限管理上禁止了“通知栏消息”权限时,Toast显示不出来。(这里以魅族手机为例,不同厂家手机可能权限名不一样,但大概意思差不多)
下面是个人对这解决这两个问题的一个总结。
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弹出
主要感谢csdn上大神提供的解决方案
http://blog.csdn.net/a3676212/article/details/51830299
Demo代码量有点多,已放到github