2017-07-26 70 views
0

我在Android中创建了一个类似于此code的NotificationListenerService。我的应用程序在单独的窗口中显示通知。当用户在我的窗口中单击通知时,将打开相应的应用程序。如何以编程方式在Android中打开(通知NotificationListener服务的StatusBarNotification对象)通知?

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 
} 

我尝试使用密钥打开通知。

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) { 
       } 
     } 
} 

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

回答

0

更换YOURACTIVITY你想在通知

Intent intent = new Intent(getBaseContext(), YOURACTIVITY.class); 
    PendingIntent contentIntent = PendingIntent.getActivity(getBaseContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Builder b = new NotificationCompat.Builder(getBaseContext()); 

    b.setAutoCancel(true) 
      .setDefaults(Notification.DEFAULT_ALL) 
      .setWhen(System.currentTimeMillis()) 
      .setSmallIcon(R.drawable.ic_launcher) 
      .setTicker("Ticker") 
      .setContentTitle("title") 
      .setContentText("message") 
      .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND) 
      .setContentIntent(contentIntent) 
      .setContentInfo("Info"); 

    Random r = new Random(); 
    int randomNo = r.nextInt(100000000 + 1); 

    NotificationManager notificationManager = (NotificationManager) getBaseContext().getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify(randomNo, b.build()); 
0

单击打开,使用钥匙打开通知的活动。

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) { 
       } 
     } 
}