2016-06-28 44 views
0

我想要一個方法來執行,當我按下我的通知按鈕。爲此目的,我加入了PendingIntent的行動,我的通知:而不是pendingIntent,執行Notification.addAction()中的函數。可能嗎?

Intent intent = new Intent(context, AlertActivity.class); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 

Notification notification = new Notification.Builder(MainActivity.this) 
        .setContentTitle("New Notification") 
        .setContentText("Click Here") 
        .setSmallIcon(R.mipmap.ic_launcher) 
        .setContentIntent(pendingIntent) 
        .addAction(R.mipmap.ic_launcher, "Test2", pendingIntent) 
        .build(); 
notification.flags |= Notification.FLAG_AUTO_CANCEL; 

NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
manager.notify(0, notification); 

這一工程,但我不希望當用戶調用的動作開始的Activity。我只需要做一些工作。

出於這個目的,我實現了一個Service應該由PendingIntent,而不是有針對性:

public class MyServices extends IntentService { 
    public MyServices() { 
     super("MyServices"); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     clearNotification(); 
    } 

    public void clearNotification() { 
     NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     notificationManager.cancel(0); 
     Intent intent = new Intent(MyServices.this, MainActivity.class); 
//Starting new activity just to check 
     startActivity(intent); 
    } 
} 

我創建PendingIntent這樣的:

final Intent intent = new Intent(context, MyServices.class); 
final PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0); 

然而,當我調用我的通知行動什麼都沒發生。我究竟做錯了什麼?

+0

不,這是不可能的。 PendingIntent有什麼問題?只要使用它。 –

+2

你知道你可以用PendingIntent啓動其他組件 - 不僅僅是活動 - 有一個'PendingIntent',對吧?只需使用「服務」。 –

+0

我想要執行某些代碼而不實際啓動任何活動(或向用戶顯示任何內容)。 贊,假設通知說; 「在下雨嗎?」 動作按鈕1:是 動作按鈕2:否 點擊是時,引導用戶進行一些活動。 **單擊否時,清除通知並執行一小段代碼** –

回答

3

通知不是您的應用程序的一部分。它由OS管理。只是碰巧有API可以用來顯示/取消/等通知。

等待的意圖允許外部代碼(例如通知)啓動您的應用程序/活動/服務/廣播接收器。沒有未決意圖就無法完成。

我的任務是在單擊某個特定操作按鈕時執行某段代碼,並清除通知;無需開始任何活動

您不必開始活動。您可以在沒有用戶界面的廣播接收器中執行此操作。或者,如CommonsWare所建議的那樣,使用IntentService,具體取決於您在「代碼段」中做什麼。 IntentServices在單獨的線程中處理工作。

+0

更好:在IntentService中執行,如果要完成的工作將會採取超過一毫秒左右。 – CommonsWare

+0

但是沒有任何事情發生,當我點擊「否」按鈕 –

+1

@AseedUsmani編輯您的問題,請不要在評論中發佈代碼。現在我已經爲你編輯你的問題了。 –

相關問題