如何制作一款能够吸引Android上所有传入推送消息的应用?

时间:2015-10-01 06:23:25

标签: android

以下是用例:我想创建一个统计工具,列出给定手机上的所有传入推送消息,消息文本,到达时间及其来源。 澄清:我需要100%访问数据,因为我正在创建自己的演示工具供私人使用。它不是一个消费者应用程序。

我认为我可以通过创建一个以某种方式监听所有类型com.google.android.c2dm.intent.RECEIVE的传入意图然后分析其内容的应用来实现这一目标。现在我认为使用Android股票的安全性和意图模型是不可能的。但是,无论如何都要使用基于电话的手机,或者我是否还需要进一步分叉并修改AOSP?

我能想到的其他选择是监控视觉通知中心本身,如果它有API(我怀疑)。

欢迎任何建议。我没有被困难的任务所吓倒。然而,我的知识仅限于Java Android编码 - 我对AOSP或NDK知之甚少,但我愿意学习这是否是我必须走的路。

(对不起,如果这是一个非常广泛的问题,我会接受给出最简单的解决方案的答案)

1 个答案:

答案 0 :(得分:1)

事实证明并不是那么困难。您需要一个minSdkVersion=18的应用,然后您可以实现一个NotificationListenerService来监听已创建或已删除的通知,或者您可以轮询当前可见的内容。

警告:您需要用户明确地继续阅读除您自己以外的其他通知。

Settings - security - notification access

基本上你做的是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>