以下是用例:我想创建一个统计工具,列出给定手机上的所有传入推送消息,消息文本,到达时间及其来源。 澄清:我需要100%访问数据,因为我正在创建自己的演示工具供私人使用。它不是一个消费者应用程序。
我认为我可以通过创建一个以某种方式监听所有类型com.google.android.c2dm.intent.RECEIVE
的传入意图然后分析其内容的应用来实现这一目标。现在我认为使用Android股票的安全性和意图模型是不可能的。但是,无论如何都要使用基于电话的手机,或者我是否还需要进一步分叉并修改AOSP?
我能想到的其他选择是监控视觉通知中心本身,如果它有API(我怀疑)。
欢迎任何建议。我没有被困难的任务所吓倒。然而,我的知识仅限于Java Android编码 - 我对AOSP或NDK知之甚少,但我愿意学习这是否是我必须走的路。
(对不起,如果这是一个非常广泛的问题,我会接受给出最简单的解决方案的答案)
答案 0 :(得分:1)
事实证明并不是那么困难。您需要一个minSdkVersion=18
的应用,然后您可以实现一个NotificationListenerService来监听已创建或已删除的通知,或者您可以轮询当前可见的内容。
警告:您需要用户明确地继续阅读除您自己以外的其他通知。
基本上你做的是1.扩展NotificationListenerInterface
并覆盖onNotificationPosted
,如下所示:
@Override
public void onNotificationPosted(StatusBarNotification notif) {
Bundle extras = notif.getNotification().extras;
String packageName = notif.getPackageName();
if (extras != null) {
String title = "" + extras.getCharSequence(Notification.EXTRA_TITLE);
String description = "" + extras.getCharSequence(Notification.EXTRA_TEXT);
// Do whatever you want to do with the data
}
}
此外,您需要在清单中注册服务:
<application>
<!-- (...) -->
<service android:name=".YourListenerClassName"
android:label="@string/app_name" android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
</application>