当前位置: 首页 > news >正文

织梦模板网萍乡网站seo

织梦模板网,萍乡网站seo,德兴市建设局网站,网站设计 中国风文章目录需求发广播清除的方式改Framework屏蔽未接来电通知的方法未接来电通知代码定位屏蔽未接来电通知Framework代码修改需求 有未接来电时,安卓设备开机会有声音或振动通知,如果不看这个通知,每次启动手机/设备都会再通知,想屏…

文章目录

  • 需求
  • 发广播清除的方式
  • 改Framework屏蔽未接来电通知的方法
    • 未接来电通知代码定位
    • 屏蔽未接来电通知Framework代码修改

需求

有未接来电时,安卓设备开机会有声音或振动通知,如果不看这个通知,每次启动手机/设备都会再通知,想屏蔽这个通知,通过修改framework代码来实现。
在这里插入图片描述
有一些手机可以在设置中配置未接来电的通知,但有些手机是没有的,这种就需要改代码了
在这里插入图片描述

发广播清除的方式

可以使用广播清除未接来电通知
权限要求:需要具有android.permission.CLEAR_APP_USER_DATA权限,这个权限一般只有系统应用或者具有特殊权限的应用才能拥有。普通应用通常无法直接获取此权限,这是为了防止恶意应用随意清除用户的重要数据。

public class MissedCallsActivity extends Activity {public void clearMissedCalls() {Intent intent = new Intent("android.intent.action.ACTION_CLEAR_MISSED_CALLS");sendBroadcast(intent);// 同时可能还会更新界面显示,清除本地未接来电记录等操作updateUI();clearLocalMissedCallsRecords();}
}

试过直接用adb指令发送广播

adb shell am broadcast -a com.android.server.telecom.ACTION_CLEAR_MISSED_CALLS

实测Android11直接发广播会报错,如下:

  W  Permission Denial: broadcasting Intent { act=com.android.server.telecom.ACTION_CLEAR_MISSED_CALLS flg=0x400010 } from null (pid=4202, uid=2000) is not exported from uid 1000 due to receiver com.android.server.telecom/.components.TelecomBroadcastReceiver
2025-01-09 15:47:34.933  1004-1445  PowerController.BgClean system_server                        D  saveShellStartedApp: com.android.server.telecom uid:1000
2025-01-09 15:47:34.933  1004-1054  BroadcastQueue          system_server                        D  Skipping delivery of ordered [background] BroadcastRecord{9ac5fb5 u0 com.android.server.telecom.ACTION_CLEAR_MISSED_CALLS} for reason described above

就算是有root,通过adb指令发送广播清除也不行

Background execution not allowed: receiving Intent { act=com.android.server.telecom.ACTION_CLEAR_MISSED_CALLS

改Framework屏蔽未接来电通知的方法

也可以直接修改Android SDK代码来实现

未接来电通知代码定位

  1. 给一张电话卡打电话,电话卡不插,会形成未接来电
  2. 电话卡插入Android设备中,设备会生成未接来电的通知(声音、振动)
  3. 查看logcat
enqueueNotificationInternal: pkg=com.android.dialer id=1 notification=Notification(channel=phone_missed_call shortcut=null contentView=null vibrate=default sound=default defaults=0x3 flags=0x219 color=0xff2a56c6 groupKey=MissedCallGroup vis=PRIVATE publicVersion=Notification(channel=null shortcut=null contentView=null vibrate=default sound=null defaults=0x2 flags=0x18 color=0xff2a56c6 groupKey=MissedCallGroup vis=PRIVATE))
onNotificationPosted: StatusBarNotification(pkg=com.android.dialer user=UserHandle{0} id=1 tag=GroupSummary_MissedCall key=0|com.android.dialer|1|GroupSummary_MissedCall|10127: Notification(channel=phone_missed_call shortcut=null contentView=null vibrate=default sound=default defaults=0x3 flags=0x219 color=0xff2a56c6 groupKey=MissedCallGroup vis=PRIVATE publicVersion=Notification(channel=null shortcut=null contentView=null vibrate=default sound=null defaults=0x2 flags=0x18 color=0xff2a56c6 groupKey=MissedCallGroup vis=PRIVATE)))
packageName:com.android.dialer has Notification:(Notification(channel=phone_missed_call shortcut=null contentView=null vibrate=default sound=default defaults=0x3 flags=0x219 color=0xff2a56c6 groupKey=MissedCallGroup vis=PRIVATE publicVersion=Notification(channel=null shortcut=null contentView=null vibrate=default sound=null defaults=0x2 flags=0x18 color=0xff2a56c6 groupKey=MissedCallGroup vis=PRIVATE)))
  1. 从打印推断出发出通知的应用包名是com.android.dialer,通知channel=phone_missed_call
  2. 定位到这个包在framework sdk中的位置,并搜索其目录中的文件内容phone_missed_call
    比如
cd vendor/sprd/platform/packages/apps/SprdDialer/
grep -nr "phone_missed_call"

得到以下输出

java/com/android/dialer/notification/NotificationChannelId.java:38:  String MISSED_CALL = "phone_missed_call";

NotificationChannelId.java代码如下

/** Centralized source of all notification channels used by Dialer. */
@Retention(RetentionPolicy.SOURCE)
@StringDef({NotificationChannelId.INCOMING_CALL,NotificationChannelId.ONGOING_CALL,NotificationChannelId.MISSED_CALL,NotificationChannelId.DEFAULT,
})
public @interface NotificationChannelId {// This value is white listed in the system.// See /vendor/google/nexus_overlay/common/frameworks/base/core/res/res/values/config.xmlString INCOMING_CALL = "phone_incoming_call";String ONGOING_CALL = "phone_ongoing_call";String MISSED_CALL = "phone_missed_call";String DEFAULT = "phone_default";
}

通过NotificationChannelId.MISSED_CALL定位到创建它的代码java/com/android/dialer/app/calllog/MissedCallNotifier.java

  private Notification.Builder createNotificationBuilder(@NonNull NewCall call) {Builder builder =createNotificationBuilder().setWhen(call.dateMs).setDeleteIntent(CallLogNotificationsService.createCancelSingleMissedCallPendingIntent(context, call.callsUri)).setContentIntent(createCallLogPendingIntent(call.callsUri));if (BuildCompat.isAtLeastO()) {builder.setChannelId(NotificationChannelId.MISSED_CALL);}return builder;}

屏蔽未接来电通知Framework代码修改

不同芯片厂可能改法不一样,这里以展锐的代码为例,实测过Android11与12。
是把未接来电的通知改成不发出
patch如下:

diff --git a/vendor/sprd/platform/packages/apps/SprdDialer/java/com/android/dialer/app/calllog/MissedCallNotifier.java b/vendor/sprd/platform/packages/apps/SprdDialer/java/com/android/dialer/app/calllog/MissedCallNotifier.java
index 40184955e8..2ed1069a6b 100644
--- a/vendor/sprd/platform/packages/apps/SprdDialer/java/com/android/dialer/app/calllog/MissedCallNotifier.java
+++ b/vendor/sprd/platform/packages/apps/SprdDialer/java/com/android/dialer/app/calllog/MissedCallNotifier.java
@@ -99,6 +99,7 @@ public class MissedCallNotifier implements Worker<Bundle, Void> {@Nullable@Overridepublic Void doInBackground(@Nullable Bundle input) throws Throwable {
+    /*int count = 0;String number = "";String subText = "";
@@ -108,6 +109,7 @@ public class MissedCallNotifier implements Worker<Bundle, Void> {subText = input.getString(MissedCallNotificationReceiver.MAIN_VICE_INFO);}updateMissedCallNotification(count, number, subText);
+    *//* @} */return null;}

就是把updateMissedCallNotification注释掉,改后的源码如下:

  @Nullable@Overridepublic Void doInBackground(@Nullable Bundle input) throws Throwable {/*禁止未接电话通知int count = 0;String number = "";String subText = "";if (input != null) {count = input.getInt(MissedCallNotificationReceiver.COUNT);number = input.getString(MissedCallNotificationReceiver.PHONE_NUMBER);subText = input.getString(MissedCallNotificationReceiver.MAIN_VICE_INFO);}updateMissedCallNotification(count, number, subText);*//* @} */return null;}

作者:帅得不敢出门

http://www.dtcms.com/a/505875.html

相关文章:

  • 广州网站建设找哪里成都网络运营外包
  • 网站建设方法叁金手指下拉丶浙江沉船事故最新消息
  • 泉州建站模板源码个人备案网站可以做电商吗
  • 滨江区建设局网站重庆怎样建设网站
  • 网站开发盈亏平衡分析表做网站去什么公司
  • 全球前10网站开发语言广东手机网站制作电话
  • 做网站网页挣钱不五八同城招聘网找工作
  • 网站做加QQ群链接wordpress 首页文章数量
  • 杭州网站制作方法成都设计公司提成
  • 注册域名以后怎么做网站wordpress 稳定版
  • 郑州做网站费用百度网站权重排名
  • 企业资产管理系统软件合肥网络公司seo建站
  • 中英文网站用同域名网站数据库是干什么的
  • 无锡企业建站程序wordpress 搜索框鼠标点击无效_需要按键盘回车
  • 江西天亿建设有限公司网站儿童编程培训机构
  • 外贸网站 开源长沙百度关键词搜索
  • 携程特牌 的同时做别的网站优化设计答案
  • 网站底部固定代码免费做店招的网站
  • 响应式网站建设服务广告公司名字大全简单
  • 找哪里做网站基本网站怎么做
  • python网站开发学习网站seo设置是什么
  • 怎样建设网站教程上海设计公司电话
  • 网站开发需要什么基础只是做石膏选图形的网站
  • 深圳罗湖住房和建设局网站wordpress时钟插件
  • 西安做网站哪家便宜建设西安网站
  • 手机参数查询网站手机网页版微信登录入口
  • 温州网站专业制作wordpress炫酷模板下载
  • 网站 数据库 sql 导入数据库文件有没有帮人做简历的网站
  • 服装网站建设规划建站之星 网站排名
  • 上海建筑网站设计网站建设与推广的策划方案