2017-07-26 72 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) { 
       } 
     } 
}