java - 如何以编程方式在Android中打开(来自NotificationListener Service的StatusBarNotification对象)通知?

标签 java android android-notifications

我在Android中创建了一个与此类似的NotificationListenerService code 。我的应用程序在单独的窗口中显示通知。什么时候 用户单击我的窗口中的通知,相应的应用程序将打开。

public void onNotificationPosted(StatusBarNotification sbn) {

        Bundle extras = sbn.getNotification().extras;
        String title = getStringFromBundle(extras, "android.title");
        String subText = getStringFromBundle(extras, "android.subText");
        String text = getStringFromBundle(extras, "android.text");
        String bigText = getStringFromBundle(extras, "android.bigText");
        String array[] = { title, subText, text, bigText };
        int progress = extras.getInt("android.progress", 0);
        int progressMax = extras.getInt("android.progressMax", 0);
        int int_array[] = { progress, progressMax };
        notification_added(sbn, array, int_array, bitmap); //Adds the notification in a list
}

我尝试使用 key 打开通知。

public void OpenNotification(String key) {
        String keys[] = { key };
        StatusBarNotification sbns[] = getActiveNotifications(keys);
        for (StatusBarNotification sbn : sbns) {
                try {
                        if (sbn == null) {
                                Log.i(TAG, "sbn is null");
                                continue;
                        }
                        /*
                           Notification n = sbn.getNotification();
                           if (n.contentIntent != null) {
                           PendingIntent pi = n.contentIntent;
                           if (pi != null) {
                           pi.send(this, 0, null);
                           }
                           }
                         */
                        cancelNotification(key);
                        Intent intent = getPackageManager().getLaunchIntentForPackage(
                                        sbn.getPackageName());
                        if (intent != null) {
                                Log.i(TAG, "Launching intent " + intent + " package name: "
                                                + sbn.getPackageName());
                        }
                } catch (Exception e) {
                }
        }
}

例如,如果单击电子邮件通知,应用程序将启动电子邮件应用程序。但是,它不会打开确切的电子邮件 Activity 。如何从 StatusBarNotification 对象打开 Activity 。

最佳答案

使用按键打开通知。

public void OpenNotification(String key) {
        String keys[] = { key };
        StatusBarNotification sbns[] = getActiveNotifications(keys);
        for (StatusBarNotification sbn : sbns) {
                try {
                        if (sbn == null) {
                                Log.i(TAG, "sbn is null");
                                continue;
                        }
                        Notification n = sbn.getNotification();
                        if (n.contentIntent != null) {
                                PendingIntent pi = n.contentIntent;
                                if (pi != null) {
                                        pi.send();
                                }
                        }
                } catch (Exception e) {
                }
        }
}

关于java - 如何以编程方式在Android中打开(来自NotificationListener Service的StatusBarNotification对象)通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45319871/

相关文章:

android - 通知 - 单击会触发错误的 PendingIntent

android - 清除通知栏

java - 通过 Java 使用 RFID (OMNIKey 6321)

java - swagger ui 无法通过 micronaut 多模块项目 gradle build 访问

java - 按下被调用 JFrame 布局类的默认取消图标 [x] 时,调用布局类也会被取消

android - Android 7.1 static app-shortcuts creator 可以在 intent 中添加额外内容吗?

android - 将图像 URI 传递给另一个 Activity

android - Ionic 4 加载本地资源不适用于 IOS

Android通知以编程方式打开横幅设置

java - Struts2日期标签显示工作日,如Wed, 13 Feb, 2013 9 :00 AM