2

需要一些幫助,以使用定製按鈕構建Jelly Bean通知(使用addAction)。 問題是,我不能讓它工作。 基本上,我想用以下參數建立通知:在通知點擊它時,必須帶上我的一個活動,在顯示通知時按鈕點擊 - 播放暫停播放器,它正在運行。 我的代碼是: 接收器:JellyBean中的通知 - 添加動作不起作用

private BroadcastReceiver onNotification = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d("NOTIFICATION", "Received broadcast"); 
     Bundle extras = intent.getExtras(); 
     int state = extras.getInt("state"); 
     if (state == 1) { 
      playPauseMethod(); 
     } 

    } 

}; 

在活動的onCreate方法我已經添加:

IntentFilter notif_iff = new IntentFilter(
        MainService.NOTIF_BROADCAST); 
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
        onNotification, notif_iff); 

守則MainService是以下幾點:

public static final String ACTION = "com.formatbce.mdrive.action.UPDATE_UI"; 
public static final String NOTIF_BROADCAST = "com.formatbce.mdrive.action.NOTIF_BRD"; 
Intent in = new Intent(ACTION); 
Intent notifInt = new Intent(NOTIF_BROADCAST); 
private NotificationManager mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 

private void showNotification(final int statusBarIconID, 
     final int bigIconID, final int ppIconID, final String contentTitle, 
     final String contentText, final boolean showIconOnly) { 
    PendingIntent layoutIntent = PendingIntent.getActivity(this, 0, 
      new Intent(this, MediaFragmentActivity.class), 0); 

     int state = 1; 
     notifInt.setAction("blabla"); 
     notifInt.putExtra("state", state); 
     PendingIntent mIntent = PendingIntent.getBroadcast(
       getApplicationContext(), 0, notifInt, 
       PendingIntent.FLAG_UPDATE_CURRENT); 
     notification = new Notification.Builder(this) 
     .setContentTitle(contentTitle).setContentText(contentText) 
     .setSmallIcon(bigIconID).setContentIntent(layoutIntent) 
     .addAction(ppIconID, null, mIntent) 
     .build(); 
      notification.flags |= Notification.FLAG_ONGOING_EVENT; 
      mNM.notify(NOTIFICATION, notification); 
} 

所以,當我打電話showNotification()方法,顯示通知,並點擊它的正文運行良好。但是,當我點擊一個按鈕,用的addAction設置好的,沒有什麼變化......我的意思是,在的onReceive()甚至行不行:

Log.d("NOTIFICATION", "Received broadcast"); 

什麼可以錯在這裏?我大量閱讀手冊,但無法得到它。有人可以解釋,如何讓它工作? 謝謝!

P.S.當我更改addAction PendingIntent getActivity,它工作正常,順便說一句...

+0

有人嗎?請至少告訴我,我對該功能的理解有問題,或者沒有人真正知道答案? :( – formatBCE 2013-03-05 09:23:58

回答

0

我覺得你在這裏堅持的是,BroadcastReceiver安裝不正確。我實際上建議使用服務而不是BroadcastReceiver,僅僅是因爲BroadcastReceiver的延遲(同時它應該發生得很快,這可能不是什麼大問題)。

您的Manifest中是否正確安裝了BroadcastReceiver?

您是否能夠創建一個只調用BroadcastReceiver(以驗證其工作正常)的活動?

+0

感謝您的回答,雖然這個項目已經被遺忘了,但我會在週末嘗試撿起它 – formatBCE 2013-07-03 12:56:39

+0

我想說把廣播接收器放在自己的類中,並將其註冊到清單中,然後嘗試執行操作我不確定內聯廣播接收機聲明是如何在系統中註冊的 – Travis 2013-07-05 12:18:45

+0

好吧,不得不說,在通常情況下,內聯接收機的工作方式就像是一種魅力,但正如我所說的,我會試試這個週末,thanx。 – formatBCE 2013-07-05 15:59:13