2

カスタム ボタン (addAction を使用) を使用して Jelly Bean 通知を作成する際に助けが必要です。問題は、私はそれを機能させることができないということです。基本的に、私は次のパラメータを使用して通知を作成したいと考えています。私のコードは: レシーバー:

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");

ここで何が問題なのですか?マニュアルを大量に読んでいますが、理解できません。誰かがそれを機能させる方法を説明できますか? ありがとうございました!

PS addAction PendingIntent を getActivity に変更すると、問題なく動作します...

4

1 に答える 1

0

ここで困っているのは、BroadcastReceiver が正しくセットアップされていないことだと思います。BroadcastReceiverの遅延のため、実際にはBroadcastReceiverの代わりにServiceを使用することをお勧めします(同時に、大したことではないほどすぐに発生するはずです)。

マニフェストに BroadcastReceiver が正しく設定されていますか?

BroadcastReceiver を呼び出すだけのアクティビティを作成できますか (正しく動作していることを確認するため)。

于 2013-04-25T13:08:47.653 に答える