Android 5 ADB通知转储错误数据
Android 5 ADB notification dump wrong data
我构建了一个可以在你的桌面上运行的电脑程序,它会通知你有关通知、电量级别的信息,并让你与你的智能手机互动phone。
整个 ADB - 因此不需要 phone 上的应用程序。
所有这一切都以时尚的方式进行。
但足够了,直到 android 5 出现。
通知转储(adb shell dumpsys 通知)显示与 sdk <= 19 中不同的输出
例如:
extras 区域显示了有关通知的详细信息。
extras={
android.title=String
android.subText=null
android.template=String
android.showChronometer=Boolean (false)
android.icon=Integer (2130837507)
android.text=String
android.progress=Integer (0)
android.progressMax=Integer (0)
android.showWhen=Boolean (true)
android.rebuild.applicationInfo=ApplicationInfo (ApplicationInfo{14a2c165 com.nero.android.htc.sync})
android.rebuild.contentView=Boolean (true)
android.bigText=String
android.infoText=null
android.originatingUserId=Integer (0)
android.progressIndeterminate=Boolean (false)
android.rebuild=Boolean (true)
android.rebuild.bigView=Boolean (true)
}
这是 android 5 通知转储的示例。
你看,字符串只有数据类型,没有实际值。
有人知道我怎样才能得到实际值吗?像我缺少的一些参数?
或者您知道从 phone 向电脑发送通知的更好方法吗?
嗯,我遇到了同样的问题,似乎没有解决办法。
我查看了源代码并将其与一切正常时的版本进行了比较。
在 4.4.4 版本中它仍然有效。版本 5.0.0 中出现了更改,代码未更改为版本 5.1.1(我写这篇文章时我们拥有的最后一个源代码版本 post)。
所以,让我们看看负责打印额外通知部分的源代码。
如您所见,在 Android 4.4.4 中一切正常,代码打印值的字符串表示形式。
在 Android 5.0.0 - 5.1.1 中它只打印一种类型的值,而不是值本身。
Android 4.4.4.
if (notification.extras != null && notification.extras.size() > 0) {
pw.println(prefix + " extras={");
for (String key : notification.extras.keySet()) {
pw.print(prefix + " " + key + "="); // <====== print key name
Object val = notification.extras.get(key);
if (val == null) {
pw.println("null");
} else {
pw.print(val.toString()); // <====== print value here
if (val instanceof Bitmap) {
pw.print(String.format(" (%dx%d)",
((Bitmap) val).getWidth(),
((Bitmap) val).getHeight()));
} else if (val.getClass().isArray()) {
pw.println(" {");
final int N = Array.getLength(val);
for (int i=0; i<N; i++) {
if (i > 0) pw.println(",");
pw.print(prefix + " " + Array.get(val, i));
}
pw.print("\n" + prefix + " }");
}
pw.println();
}
}
pw.println(prefix + " }");
}
Android 5.0.0 - 5.1.1.
if (notification.extras != null && notification.extras.size() > 0) {
pw.println(prefix + " extras={");
for (String key : notification.extras.keySet()) {
pw.print(prefix + " " + key + "="); // <====== print key name
Object val = notification.extras.get(key);
if (val == null) {
pw.println("null");
} else {
pw.print(val.getClass().getSimpleName()); // <===== print a type, not a value itself
if (val instanceof CharSequence || val instanceof String) {
// redact contents from bugreports
} else if (val instanceof Bitmap) {
pw.print(String.format(" (%dx%d)",
((Bitmap) val).getWidth(),
((Bitmap) val).getHeight()));
} else if (val.getClass().isArray()) {
final int N = Array.getLength(val);
pw.println(" (" + N + ")");
} else {
pw.print(" (" + String.valueOf(val) + ")");
}
pw.println();
}
}
pw.println(prefix + " }");
}
在 Android >= 6 上使用此命令获取额外通知的全文:
adb shell dumpsys notification --noredact
它将打印类型和值
extras={
android.title=String (Bring The Rain)
android.reduced.images=Boolean (true)
android.subText=null
android.template=String (android.app.Notification$MediaStyle)
toSingleLine=Boolean (false)
android.text=String (Upon A Burning Body)
android.appInfo=ApplicationInfo (ApplicationInfo{c8165e6 org.telegram.messenger})
android.showWhen=Boolean (false)
android.largeIcon=Icon (Icon(typ=BITMAP size=100x100))
android.mediaSession=Token (android.media.session.MediaSession$Token@608a746)
gameDndOn=Boolean (false)
android.compactActions=int[] (3)
[0] 0
[1] 1
[2] 2
}
我构建了一个可以在你的桌面上运行的电脑程序,它会通知你有关通知、电量级别的信息,并让你与你的智能手机互动phone。 整个 ADB - 因此不需要 phone 上的应用程序。 所有这一切都以时尚的方式进行。
但足够了,直到 android 5 出现。
通知转储(adb shell dumpsys 通知)显示与 sdk <= 19 中不同的输出
例如:
extras 区域显示了有关通知的详细信息。
extras={
android.title=String
android.subText=null
android.template=String
android.showChronometer=Boolean (false)
android.icon=Integer (2130837507)
android.text=String
android.progress=Integer (0)
android.progressMax=Integer (0)
android.showWhen=Boolean (true)
android.rebuild.applicationInfo=ApplicationInfo (ApplicationInfo{14a2c165 com.nero.android.htc.sync})
android.rebuild.contentView=Boolean (true)
android.bigText=String
android.infoText=null
android.originatingUserId=Integer (0)
android.progressIndeterminate=Boolean (false)
android.rebuild=Boolean (true)
android.rebuild.bigView=Boolean (true)
}
这是 android 5 通知转储的示例。 你看,字符串只有数据类型,没有实际值。
有人知道我怎样才能得到实际值吗?像我缺少的一些参数?
或者您知道从 phone 向电脑发送通知的更好方法吗?
嗯,我遇到了同样的问题,似乎没有解决办法。
我查看了源代码并将其与一切正常时的版本进行了比较。 在 4.4.4 版本中它仍然有效。版本 5.0.0 中出现了更改,代码未更改为版本 5.1.1(我写这篇文章时我们拥有的最后一个源代码版本 post)。
所以,让我们看看负责打印额外通知部分的源代码。
如您所见,在 Android 4.4.4 中一切正常,代码打印值的字符串表示形式。 在 Android 5.0.0 - 5.1.1 中它只打印一种类型的值,而不是值本身。
Android 4.4.4.
if (notification.extras != null && notification.extras.size() > 0) {
pw.println(prefix + " extras={");
for (String key : notification.extras.keySet()) {
pw.print(prefix + " " + key + "="); // <====== print key name
Object val = notification.extras.get(key);
if (val == null) {
pw.println("null");
} else {
pw.print(val.toString()); // <====== print value here
if (val instanceof Bitmap) {
pw.print(String.format(" (%dx%d)",
((Bitmap) val).getWidth(),
((Bitmap) val).getHeight()));
} else if (val.getClass().isArray()) {
pw.println(" {");
final int N = Array.getLength(val);
for (int i=0; i<N; i++) {
if (i > 0) pw.println(",");
pw.print(prefix + " " + Array.get(val, i));
}
pw.print("\n" + prefix + " }");
}
pw.println();
}
}
pw.println(prefix + " }");
}
Android 5.0.0 - 5.1.1.
if (notification.extras != null && notification.extras.size() > 0) {
pw.println(prefix + " extras={");
for (String key : notification.extras.keySet()) {
pw.print(prefix + " " + key + "="); // <====== print key name
Object val = notification.extras.get(key);
if (val == null) {
pw.println("null");
} else {
pw.print(val.getClass().getSimpleName()); // <===== print a type, not a value itself
if (val instanceof CharSequence || val instanceof String) {
// redact contents from bugreports
} else if (val instanceof Bitmap) {
pw.print(String.format(" (%dx%d)",
((Bitmap) val).getWidth(),
((Bitmap) val).getHeight()));
} else if (val.getClass().isArray()) {
final int N = Array.getLength(val);
pw.println(" (" + N + ")");
} else {
pw.print(" (" + String.valueOf(val) + ")");
}
pw.println();
}
}
pw.println(prefix + " }");
}
在 Android >= 6 上使用此命令获取额外通知的全文:
adb shell dumpsys notification --noredact
它将打印类型和值
extras={
android.title=String (Bring The Rain)
android.reduced.images=Boolean (true)
android.subText=null
android.template=String (android.app.Notification$MediaStyle)
toSingleLine=Boolean (false)
android.text=String (Upon A Burning Body)
android.appInfo=ApplicationInfo (ApplicationInfo{c8165e6 org.telegram.messenger})
android.showWhen=Boolean (false)
android.largeIcon=Icon (Icon(typ=BITMAP size=100x100))
android.mediaSession=Token (android.media.session.MediaSession$Token@608a746)
gameDndOn=Boolean (false)
android.compactActions=int[] (3)
[0] 0
[1] 1
[2] 2
}