You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android平台如何通过Java/Kotlin获取其他应用的通知信息?

在Android上通过Java/Kotlin获取其他应用的通知内容

Android系统提供了NotificationListenerService这一官方合法途径,用于监听系统中所有应用推送的通知,包括你提到的Facebook通知的内容、图片等信息。以下是具体实现步骤:

1. 配置Manifest权限与服务

首先在AndroidManifest.xml中添加必要权限,并注册监听服务:

<!-- 基础权限 -->
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
<!-- Android 13+ 需添加此权限 -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

<!-- 注册通知监听服务 -->
<service
    android:name=".MyNotificationListener"
    android:label="通知监听服务"
    android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
    <intent-filter>
        <action android:name="android.service.notification.NotificationListenerService" />
    </intent-filter>
</service>

2. 实现监听服务类

创建NotificationListenerService的子类,重写onNotificationPosted方法来捕获通知数据:

Kotlin 示例

class MyNotificationListener : NotificationListenerService() {
    override fun onNotificationPosted(sbn: StatusBarNotification?) {
        super.onNotificationPosted(sbn)
        sbn ?: return

        // 获取应用包名,用于匹配目标应用(如Facebook)
        val packageName = sbn.packageName
        val notification = sbn.notification
        val extras = notification.extras

        // 提取通知核心数据
        val title = extras.getString(Notification.EXTRA_TITLE)
        val content = extras.getString(Notification.EXTRA_TEXT)
        val bigContent = extras.getString(Notification.EXTRA_BIG_TEXT)
        // 获取通知大图标的Bitmap
        val largeIcon = notification.getLargeIconBitmap()

        // 针对Facebook通知做处理(包名:com.facebook.katana)
        if (packageName == "com.facebook.katana") {
            Log.d("FBNotification", "标题:$title,内容:${content ?: bigContent}")
            largeIcon?.let { bitmap ->
                // 处理图片,比如保存到本地或展示
            }
        }
    }
}

Java 示例

public class MyNotificationListener extends NotificationListenerService {
    @Override
    public void onNotificationPosted(StatusBarNotification sbn) {
        super.onNotificationPosted(sbn);
        if (sbn == null) return;

        String packageName = sbn.getPackageName();
        Notification notification = sbn.getNotification();
        Bundle extras = notification.extras;

        String title = extras.getString(Notification.EXTRA_TITLE);
        String content = extras.getString(Notification.EXTRA_TEXT);
        String bigContent = extras.getString(Notification.EXTRA_BIG_TEXT);
        Bitmap largeIcon = notification.getLargeIconBitmap();

        // 匹配Facebook应用包名
        if ("com.facebook.katana".equals(packageName)) {
            String actualContent = content != null ? content : bigContent;
            Log.d("FBNotification", "标题:" + title + ",内容:" + actualContent);
            if (largeIcon != null) {
                // 执行图片处理逻辑
            }
        }
    }
}

3. 引导用户开启监听权限

该权限无法通过代码直接申请,必须由用户在系统设置中手动开启。可以添加跳转设置页面的逻辑:

Kotlin 示例

fun openNotificationSettings(context: Context) {
    val intent = Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS")
    context.startActivity(intent)
}

Java 示例

public static void openNotificationSettings(Context context) {
    Intent intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
    context.startActivity(intent);
}

注意事项

  • 权限限制:Android 13及以上版本需额外申请POST_NOTIFICATIONS权限,否则服务可能无法正常运行。
  • 自定义通知布局:部分应用会使用自定义通知布局,此时无法通过extras直接获取文本或图片,这种情况只能借助AccessibilityService,但辅助功能权限敏感度更高,且使用有严格规范。
  • 后台存活:Android的后台优化机制可能会杀死监听服务,可考虑将服务设为前台服务,或申请忽略电池优化权限来提升稳定性。
  • 包名准确性:不同应用的包名可能不同,比如Facebook的包名是com.facebook.katana,需确认目标应用的正确包名。

内容的提问来源于stack exchange,提问作者fueripe-desu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 16:55:14