Android11 应用默认获取通知使用权限(可以获取系统所有通知信息)
1.Android 11 -- 强制清理app后台,关于权限引发的问题2.Android 11 (MTK)状态栏图标反色-->跟随当前应用变化代码流程3.Android 11 --关于Toast的异常4.Android 11 -- 关于dialog和悬浮窗导致SystemUI状态栏下拉频繁闪烁(窗口焦点问题)5.Android 11 下拉菜单长按WiFi图标SystemUI ANR6.Android 11 sim卡来电不弹出悬浮通知,默认来电默认全屏7.Android Bluetooth 蓝牙开发/蓝牙协议 小结8.Android11 —— 自定义添加一个System Services9.Android系统——AOSP相关-->随记10.Android11 , Launcher3 切换阿拉伯语,最近应用(后台)不能滑动11.Android 底层问题日志记录12.Android 11 -- app 服务保活13.Android11 - 添加自定义服务注意事项14.Android 11 导航栏添加一个虚拟按钮--问题合集15.Android 11--设置第三方Launcher并默认 与 如何预置apk16.Android11 系统修改 AOSP输入法的默认输入键盘布局17.Settings里面切换不同Launcher的代码流程18.关于Android`系统默认屏保`19.关于Android 11 Settings添加新的选项界面的细节20.Android 11 自由窗口模式 || 全屏模式启动app21.强制app横屏显示或者竖屏显示(动态)22.Android 11 禁止从SD卡上安装第三方应用23.实体物理音量键替换为home键24.AMS- kill Launcher进程的代码流程25.Android 11 recovery恢复出厂设置保留某些文件26.Android 11 禁用 adb root (userdebug版本)
27.Android11 应用默认获取通知使用权限(可以获取系统所有通知信息)
28.Android 11 UsbDebug 关于adb RSA 认证29.Android 11 NavigationBar && Status Bar 如果改变背景颜色30.Anroid 11 关于NotificationManager && NotificationManagerService -- 衍生到权限管理31.Android13 控制设置界面 双栏显示或单栏显示32.Android 13 大屏显示时关于SystemUI和Launcher3问题33.Android 系统适配无源码app34.Android 11 关于app的权限重置35.Android 11.0 关于app进程保活36.Android 11 关于按键拦截/按键事件处理分享37.Android R Settings关于屏保/PowerManagerService欺骗系统不让其进入休眠状态38.Android13 关于SystemUI更新/Nav Bar add volume button&&other button39.Android 13 移植EthernetSettings/Ethernet更新40.Anrdoir 13 关于设置静态IP后,突然断电,在上电开机卡动画41.Android T(13) The app is granted permissions by default42.Android T 关于屏幕旋转 (一)43.Android T about screen rotation(二)44.Android 13 about launcher3 (1)45.Android T don't abort background activity starts46.Android T adout replace bootanimation47.Launcher start App WINDOWING_MODE_FREEFORM48.Android 11 About SleepToken / (Settings)Screen timeout49.Settings.System数据监听/prop&SystemProperties数据监听在 Android 11 中,系统对应用的权限管理进行了进一步的细化和增强。关于默认给予应用通知权限这一特性,通常情况下,
应用在安装后并不会自动获得所有的权限,包括通知权限。应用必须明确请求所需的权限,并且用户需要在权限请求对话框中授权。
//检查是否具有通知使用权,都是在系统中的secure 数据库,利用命令adb shell settings list secure可以查看
C:\Users\xx>adb shell settings list secure可以查看
accessibility_display_inversion_enabled=null
accessibility_display_magnification_enabled=0
accessibility_display_magnification_scale=2.0
accessibility_enabled=0
adaptive_sleep=null
android_id=6bcce84ef38428a
autofill_service=
aware_enabled=0
aware_lock_enabled=0
backup_enabled=0
backup_transport=com.android.localtransport/.LocalTransport
bluetooth_name=rk3566
charging_sounds_enabled=0
charging_vibration_enabled=1
clock_seconds=null
default_input_method=com.android.inputmethod.latin/.LatinIME
double_tap_to_wake=1
doze_pulse_on_double_tap=null
doze_tap_gesture=null
enabled_input_methods=com.android.inputmethod.latin/.LatinIME
enabled_notification_assistant=android.ext.services/android.ext.services.notification.Assistant
enabled_notification_policy_access_packages=com.android.demo:com.android.camera2//这里
high_priority=null
....
方案一:
刷机第一次开机NotificationManagerService开启流程:
loadPolicyFile()->allowDefaultApprovedServices(USER_SYSTEM)
->allowDndPackage(...)
->getBinderService().setNotificationPolicyAccessGranted(packageName, true);
protected void allowDefaultApprovedServices(int userId) {
ArraySet<ComponentName> defaultListeners = mListeners.getDefaultComponents();
for (int i = 0; i < defaultListeners.size(); i++) {
ComponentName cn = defaultListeners.valueAt(i);
allowNotificationListener(userId, cn);
}
ArraySet<String> defaultDnds = mConditionProviders.getDefaultPackages();
//add text 添加需要开机通知权限的包名
defaultDnds.add("com.xx.xx");
//add text
for (int i = 0; i < defaultDnds.size(); i++) {
allowDndPackage(defaultDnds.valueAt(i));
}
setDefaultAssistantForUser(userId);
}
private void allowDndPackage(String packageName) {
try {
getBinderService().setNotificationPolicyAccessGranted(packageName, true);
} catch (RemoteException e) {
e.printStackTrace();
}
}
方案二:(试过不太能行)
./frameworks/base/core/res/res/values/config.xml
通过在 config.xml 或任何原始设备制造商 (OEM) 叠加层中将某个应用的软件包名称添加到 config_defaultListenerAccessPackages,
可以将此应用指定为默认通知监听器。默认通知监听器有权访问所有传入通知,
但用户可以在“设置”应用中的“通知使用权”设置中关闭对通知的使用权。
通知使用权和通知监听器政策 | Android Open Source Project (google.cn)
默认授予通知监听器访问权限,多个用冒号分隔的包名 如:com.xx.xx:com.android.camera2
<!-- Colon separated list of package names that should be granted Notification Listener access -->
<string name="config_defaultListenerAccessPackages" translatable="false">com.xxx.xxx</string>
./frameworks/base/services/core/java/com/android/server/notification/NotificationManagerService.java
@Override
protected void loadDefaultsFromConfig() {
String defaultListenerAccess = mContext.getResources().getString(
R.string.config_defaultListenerAccessPackages);
if (defaultListenerAccess != null) {
//private static final String ENABLED_SERVICES_SEPARATOR = ":";
String[] listeners =
defaultListenerAccess.split(ManagedServices.ENABLED_SERVICES_SEPARATOR);//用":"分割成数组
for (int i = 0; i < listeners.length; i++) {
if (TextUtils.isEmpty(listeners[i])) {
continue;
}
ArraySet<ComponentName> approvedListeners =
this.queryPackageForServices(listeners[i],
MATCH_DIRECT_BOOT_AWARE
| MATCH_DIRECT_BOOT_UNAWARE, USER_SYSTEM);
for (int k = 0; k < approvedListeners.size(); k++) {
ComponentName cn = approvedListeners.valueAt(k);
addDefaultComponentOrPackage(cn.flattenToString());
}
}
}
}
方案三:给予某个app通知权限(app启动时)
final NotificationManager mgr = context.getSystemService(NotificationManager.class);
mgr.setNotificationPolicyAccessGranted(pkg, access);
--- a/sprd/frameworks/base/core/java/android/app/ActivityThread.java
+++ b/sprd/frameworks/base/core/java/android/app/ActivityThread.java
@@ -242,6 +242,7 @@ import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import android.app.LinkTurboApp;
+import android.app.NotificationManager;
public final class ActivityThread extends ClientTransactionHandler {
//applicationContext.getSystemService(WindowManager.class).getDefaultDisplay();
@Override
public Activity handleLaunchActivity(ActivityClientRecord r,
PendingTransactionActions pendingActions, Intent customIntent) {
unscheduleGcIdler();
mSomeActivitiesChanged = true;
//add text
//uid 权限问题 报异常 java.lang.SecurityException
try{
}catch(Exception e) {
final NotificationManager mgr = mInitialApplication.getApplicationContext().getSystemService(NotificationManager.class);
mgr.setNotificationPolicyAccessGranted("com.xx.xx", true);
}
//add text
if (r.profilerInfo != null) {
mProfiler.setProfiler(r.profilerInfo);
mProfiler.startProfiling();
}
...
方案四:在某个启动的系统服务类,调用setNotificationPolicyAccessGranted(...)
frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
//系统启动,当主要服务启动完毕后,调用systemReady()来启动其它的功能!这里是每次开机必走的!
@Override
public void systemReady() {
// In normal flow, systemReady is called before other system services are ready.
// So it is better not to bind keyguard here.
mKeyguardDelegate.onSystemReady();
...
// add text start
NotificationManager mgr = mContext.getSystemService(NotificationManager.class);
mgr.setNotificationPolicyAccessGranted("com.xx.xx", true);
//ComponentName componentName = new ComponentName("com.xxx.xx","xx.xx.xx.xx");
//mgr.setNotificationListenerAccessGranted(componentName, true);
// add text end
...
分类:
Android
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2022-07-12 带进度条的控件--CircleProcessView