weixin_39988331
2021-01-03 10:47 阅读 2

魅族 pro6 toast 不弹出。小米app 闪退 bug

前段时间在忙 前端的事。这两天测试 EToast2 发现。魅族 pro6 安卓 6.0 关闭弹窗权限。toast 不弹出。小米note 同样 android 6.0 app 直接闪退。android studio 模拟器 android 5, 7 两个版本没发现问题。android 4.4 没有问题。

该提问来源于开源项目:Blincheng/EToast2

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

35条回答 默认 最新

  • weixin_39729837 weixin_39729837 2021-01-03 10:47

    目前从我测试的情况来看(小米5s 6.0.1、乐视max 6.0.1) 都没出现你说的情况,麻烦你帮我抓下错误日志,好让我定位一下,谢谢。

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    测试了大概六七种 手机。只有 魅族 pro6 这台 关闭通知权限。不弹出 toast。debug 打断点 没发现异常也没报错。 tim 20170721114809

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    小米note 这台机器好像系统有问题,开启调试模式,连数据线 app 都装不上。放弃测试。直接把 打的包 传手机上 安装 点击 弹出 toast 时 app 直接闪退。不知道如何查看 崩溃日志

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    感觉应该是 flyme6 (anroid 6.0) 的问题,可能屏蔽了 Toast TYPE_TOAST 越过通知权限。不过 魅蓝 flyme6 (android 5.1) 没有问题。乐视 android 6.0 也没有问题

    点赞 评论 复制链接分享
  • weixin_39729837 weixin_39729837 2021-01-03 10:47

    问题我已经找到了,的确。按道理说:WindowManager.LayoutParams.TYPE_TOAST这种属性是不需要悬浮窗权限的,也就是说是不需要加uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"这个权限。但是的确是有可能是小米note这台的机器特殊,才导致这样的类型无效。 目前已经临时的解决方案是加入上面的权限,这样想小米note这样的特殊机型至少不会崩溃,做一部分妥协。

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    最后 发现 魅族pro6 不能弹出 toast 是另外一个权限确定的。悬浮窗权限 tim 20170721164506 WindowManager 通过 addView 添加的 布局 在 flyme6 算到 悬浮窗权限里头了。通知权限 控制 原生 toast。 模拟的 刚好 用到 WindowManager 就 很尴尬

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    官方 rom 估计 给 TYPE_HOST 开了后门。魅族flyme 小米 miui 个别分支版本。估计把后门给 去了。只能这样猜测了。想实现个 完美的 toast 就这么难吗。大神还有其他方案否

    点赞 评论 复制链接分享
  • weixin_39729837 weixin_39729837 2021-01-03 10:47

    这个真是蛋疼,Android这边就是规则不一,导致开发者不得不被动适配。暂时也只能这样了,妥协几个分支也没办法,至少绝大多数还是OK的。待以后有空,或者出新技术了,咱们再看看吧。

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    也只能如此了。对了问下 现在 安卓开发。主流一般都是 什么架构? mvvm databinding? rxjava?, 还是原始的 Butter Knife 注解框架。 布局 ConstraintLayout 用的多吗。网络请求框架推荐哪个呢,retrofit2 ? 感觉现在学的 有点迷。kotlin 官方也推荐了。有必要现在入坑吗

    点赞 评论 复制链接分享
  • weixin_39729837 weixin_39729837 2021-01-03 10:47

    这个就要看公司了,一般来说公司是老项目的话基本上就是MVC了,然后新项目可以使用MVP,其余的RxJava的话一般配合RxAndroid使用,建议尝试开发,做到随时可以上手就可以了,但是真正适不适合自己公司项目看情况而议。ConstraintLayout 的话现在新布局一般建议使用,这是没有问题的,有些交互还特别方便。网络请求框架可以用Okhttp、Retrofit等,不过肯定还是要二次封装使用才能满足自己公司项目的。Kotlin的话说不准,可以尝试像我一样用Kotlin写写Demo慢慢熟悉熟悉语法就好。而且studio也提供插件直接将Java转换成Kotlin,所以也不用担心,主流肯定还是java,以后的话 谁知道呢。

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    回答的很详细,非常感谢

    点赞 评论 复制链接分享
  • weixin_39907658 weixin_39907658 2021-01-03 10:47

    请问,有在Android7.0的机器上测试过了吗?在7.0以上貌似TYPE_TOAST也需要权限了。

    点赞 评论 复制链接分享
  • weixin_39729837 weixin_39729837 2021-01-03 10:47

    测试,小米6 小米5c 华为的机器都是OK的

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    7.0 在模拟器上是可以的。测试了一个 摩托罗拉也是 7.0 的也没问题。其他的 就不知道了。 试着用 dialog 模拟了toast。toast 弹出的时候会屏蔽 其他 点击事件。这点不知道怎么解决。这回不要权限了。也可以 覆盖到 popupwindow 上。可以的话可以帮忙优化下 https://github.com/xiaogaofudao/Toast

    点赞 评论 复制链接分享
  • weixin_39729837 weixin_39729837 2021-01-03 10:47

    其实用Dialog有很多问题呢,包括返回键,还有打断用户点击等问题的。

    点赞 评论 复制链接分享
  • weixin_39729837 weixin_39729837 2021-01-03 10:47

    点击事件其实可以往下传递,不过由于Dialog会受theme的影响,所以还是存在蛮多潜在的问题

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    是的,确实存在这个问题。有解决办法吗。我现在遇到一个问题。 textview 一行的时候水平居中显示。换行文字靠左 排列,有什么方案吗

    点赞 评论 复制链接分享
  • weixin_39729837 weixin_39729837 2021-01-03 10:47

    重心设置左右居中,TextView长度设置成match_parent 左右想留点边距就设置一点padding呗

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    不是很理解 重心设置左右居中 这句话。gravity center ? 能详细点吗。我的思路是,自定义 TextView 判断 是否 换行,如果换行,就把文字设置为 靠左排列。 默认设置的 居中

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    不知道 这么判断 TextView 是否已经换行了。

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    获取到了 tim 20170728171121

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    大神问下啊 jitpack 不支持 多 module 吗??

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    找到了 解决 魅族 小米个别 机型 toast 不弹出的 问题。就是 设置 type TYPE_TOAST 的原因。把 这行代码去掉 就 ok了。 tim 20170731113615

    点赞 评论 复制链接分享
  • weixin_39729837 weixin_39729837 2021-01-03 10:47

    那是不是需要悬浮窗权限了?

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    不需要。我发现 Dialog 不需要任何权限可以弹出。看源码 发现也是 基于 windowManager addView 不过 params 的参数不同, 并且是 基于 phoneWindow。反射拿到 phoneWindow addView 发现是可以 弹出的。后来饶了一大圈。发现把 type 去掉就 ok了 不需要 反射什么的。

    点赞 评论 复制链接分享
  • weixin_39729837 weixin_39729837 2021-01-03 10:47

    我来跟进看下

    点赞 评论 复制链接分享
  • weixin_39729837 weixin_39729837 2021-01-03 10:47

    帮我看下小米note上的闪退是不是也一并解决了

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    忘记说了, 闪退应该是其他代码写错造成的。和 toast 没关系。没有闪退现象

    点赞 评论 复制链接分享
  • weixin_39729837 weixin_39729837 2021-01-03 10:47

    之前小米note的闪退是权限问题 uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" 现在去掉这个权限,然后帮我看下,如果真的是 WindowManager.LayoutParams.TYPE_TOAST 的问题的话,那真的太棒了,这样就完美了

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    去掉权限 小米note, 魅族 pro6 都可以 弹出。一切正常

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    我是把 判断是否开启 通知权限 那一块去掉了。 所有机型 不论是否开启权限,直接走 eToast 那一块

    点赞 评论 复制链接分享
  • weixin_39729837 weixin_39729837 2021-01-03 10:47

    可以的,你的发现真的是太棒了。非常感谢,我这就更新下,把权限去掉,这样就完美了。

    点赞 评论 复制链接分享
  • weixin_39988331 weixin_39988331 2021-01-03 10:47

    嗯。很感谢你的这个 插件。刚学 Android 还没两个月。通过 研究 Toast 感觉也学了不少知识

    点赞 评论 复制链接分享
  • weixin_39900023 weixin_39900023 2021-01-03 10:47

    这样仍然有问题,当你多次点击几次,然后退出,正常的Toast 仍然会显示,但是去掉WindowManager.LayoutParams.TYPE_TOAST 是无法正常显示的,但重新切入会继续显示,但是重复几次就可能会报错...

    点赞 评论 复制链接分享
  • weixin_39900023 weixin_39900023 2021-01-03 10:47

    而且这样做在大多数机器上也无法使用ApplicationContext 了

    点赞 评论 复制链接分享

相关推荐