經過反覆試驗反覆幾次,我終於找到了一個非常簡單和乾淨的方法是點擊一個通知的動作時運行任意方法。在我的解決方案中,有一個類(我稱之爲NotificationUtils)創建通知,並且還包含一個IntentService靜態內部類,當點擊通知的操作時將運行該內部類。這裏是我NotificationUtils類,其次是進行必要的修改,以AndroidManifest.xml中:
public class NotificationUtils {
public static final int NOTIFICATION_ID = 1;
public static final String ACTION_1 = "action_1";
public static void displayNotification(Context context) {
Intent action1Intent = new Intent(context, NotificationActionService.class)
.setAction(ACTION_1);
PendingIntent action1PendingIntent = PendingIntent.getService(context, 0,
action1Intent, PendingIntent.FLAG_ONE_SHOT);
NotificationCompat.Builder notificationBuilder =
new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Sample Notification")
.setContentText("Notification text goes here")
.addAction(new NotificationCompat.Action(R.drawable.ic_launcher,
"Action 1", action1PendingIntent));
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());
}
public static class NotificationActionService extends IntentService {
public NotificationActionService() {
super(NotificationActionService.class.getSimpleName());
}
@Override
protected void onHandleIntent(Intent intent) {
String action = intent.getAction();
DebugUtils.log("Received notification action: " + action);
if (ACTION_1.equals(action)) {
// TODO: handle action 1.
// If you want to cancel the notification: NotificationManagerCompat.from(this).cancel(NOTIFICATION_ID);
}
}
}
現在只是實現onHandleIntent你的行動和NotificationActionService的<application>
標籤內添加到您的清單:
<service android:name=".NotificationUtils$NotificationActionService" />
簡介:
- 創建一個將創建通知的類。
- 在該類中,添加一個IntentService內部類(確保它是靜態的,否則您將得到一個神祕錯誤!),它可以基於單擊的操作運行任何方法。
- 在清單中聲明IntentService類。
我只得到了通知管理器通知並顯示在通知欄中的通知。當我點擊通知時,它會打開活動。我想通過調用/執行一個方法而不是打開活動來修改此行爲。我正在嘗試與Arfin的解決方案合作。我只是沒有看到我應該如何做到這一點。我創建了一個「DummyActivity」,我不確定他的解決方案的第二部分是否應該在「DummyActivity」中。我只是困惑。我喜歡當事情順利進行時。 – AnDev
是的,AnDev一旦你的虛擬活動開始發送一個廣播從他們剛剛完成,所以現在你會收到父類的廣播消息,正如我已經解釋過的,你可以從那裏調用任何你想要的方法。除了發送廣播和完成它之外,不需要在虛擬活動中進一步做任何事情。 –