Android 8.0及更高版本带来了通知渠道。是否可以通过ADB列出应用程序的所有通知渠道,创建渠道和/或禁用渠道?根解决方案也是可以接受的。 谢谢。
答案 0 :(得分:0)
您可以使用服务调用超级用户命令创建通知频道,删除频道。
这是一个小示例,您可以通过它为任何应用启用或禁用通知。通过使用该引用,您可以获得通知渠道信息。
public final Shell.Interactive su = new Shell.Builder().useSU().open();
function setNotification(String packageName, int uid, boolean enable){
try {
@SuppressLint("PrivateApi") Field field = Class.forName("android.app.INotificationManager").getDeclaredClasses()[0].getDeclaredField("TRANSACTION_setNotificationsEnabledForPackage");
field.setAccessible(true);
int id = field.getInt(null);
su.addCommand(String.format(Locale.ENGLISH, "service call notification %d s16 %s i32 %d i32 %d", id, packageName, uid, enable ? 1 : 0));
} catch (ClassNotFoundException | IllegalAccessException | NoSuchFieldException e) {
e.printStackTrace();
}
}
这里service call用于调用底层服务,id用于标识函数,s16用于String输入,i32用于int< /strong> 输入它们只是我们在通知服务中调用的函数的参数。
您可以从这里找到服务电话的说明:
<块引用>Where to find info on Android's "service call" shell command?
您可以从这里找到对 INotificationManager 的引用:
<块引用>如您所见,我在示例中使用的 INotificationManager 中有一个名为 setNotificationsEnabledForPackage 的函数。 getNotificationChannel之类的通知通道有很多相关的函数,只用适合自己的,用setNotificationsEnabledForPackage代替,并传递适当的参数。
这里 su 来自这个库:
<块引用>答案 1 :(得分:-1)
您可以尝试
adb shell dumpsys notification
这将显示有关NotificationManagerService的详细信息。
如果此答案对您有帮助,请接受我的答案。谢谢 。