解决Android关闭通知消息权限无法弹出Toast的问题

在Android开发中,当用户关闭通知消息权限时,可能会导致Toast无法正常显示。本文分析了Toast的显示原理,并提出通过自建消息队列来绕过权限限制,详细介绍了实现方法,包括关键代码和注意事项,如避免使用ScrollView和处理键盘遮挡SnackBar的情况。
摘要由CSDN通过智能技术生成

最近在做项目时,遇到一个问题,有部手机就是Toast弹不出来。仔细想想可能权限的问题。后面网上搜索给出如下答案:

跟踪Toast的源代码, make方法省略,做了一些初始化的工作, show方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public void show() {
      
  if (mNextView == null) {
      
    throw new RuntimeException("setView must have been called");
  }

  INotificationManager service = getService();
  String pkg = mContext.getPackageName();
  TN tn = mTN;
  tn.mNextView = mNextView;

  try {
      
    service.enqueueToast(pkg, tn, mDuration);
  } catch (RemoteException e) {
      
    // Empty
  }
}

static private INotificationManager getService() {
      
    if (sService != null) {
      
      return sService;
    }
    sService = INotificationManager.Stub.asInterface(ServiceManager.getService("notification"));
     return sService;
}

熟悉binder通讯的同学应该都知道,其实调用了NotificationManagerService.service.enqueueToast方法进入toast队列,进行相应的逻辑处理后回调给Toast中的TNTN其实就是一个aidlstub实现,相当于Client端,用来接收Service端发来的消息。看下TN中的show方法

1
2
3
4
5
6
7
8
9
public 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a3676212

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值