19

2つのボタンが付いた通知を作成しようとしています。

  • 1つは私を活動に戻します
  • もう一方はそれを閉じます

ボタンクリックイベントをキャッチする方法について誰かがアイデアを持っていますか(アクティビティが一時停止されていることを忘れないでください)?

4

6 に答える 6

44

投稿嬉しいです!一晩中働いた後、私は何かを見つけました。では、どうぞ!

1. 通知用の xml レイアウト ファイルを作成します。

2. Notification.Builder を使用して通知を作成します。必要なもの (アイコン、サウンドなど) をすべて追加したら、次の操作を行います。

        //R.layout.notification_layout is from step 1

        RemoteViews contentView=new RemoteViews(ctx.getPackageName(), R.layout.notification_layout);

        setListeners(contentView);//look at step 3

        notification.contentView = contentView;

3. メソッド setListeners を作成します。このメソッド内で、次のように記述する必要があります。

    //HelperActivity will be shown at step 4

    Intent radio=new Intent(ctx, packagename.youractivity.class);  
    radio.putExtra("AN_ACTION", "do");//if necessary

    PendingIntent pRadio = PendingIntent.getActivity(ctx, 0, radio, 0);
    //R.id.radio is a button from the layout which is created at step 2  view.setOnClickPendingIntent(R.id.radio, pRadio); 

    //Follows exactly my code!
    Intent volume=new Intent(ctx, tsapalos11598712.bill3050.shortcuts.helper.HelperActivity.class);
    volume.putExtra("DO", "volume");</p>

    //HERE is the whole trick. Look at pVolume. I used 1 instead of 0.
    PendingIntent pVolume = PendingIntent.getActivity(ctx, 1, volume, 0);
    view.setOnClickPendingIntent(R.id.volume, pVolume);

4.私の要件では、インテントに応答する HelperActivity を使用しました。しかし、あなたにとっては必要ないと思います。

完全なソース コードが必要な場合は、参照するか、私の git リポジトリからダウンロードできます。コードは個人的な使用のためのものですので、たくさんのコメントを含む豪華なコードを読むことを期待しないでください。https://github.com/BILLyTheLiTTle/AndroidProject_Shortcuts

上記のすべてが、さまざまなボタンからイベントをキャッチするという質問に答えます。

通知のキャンセルについて こちらにリダイレクトします

Android で通知をクリアする方法

初めて通知を呼び出したときに通知メソッドで解析したIDを使用することを忘れないでください

于 2012-06-09T07:49:47.363 に答える
4

ICS に関しては、必要な動作がデフォルトの通知を反映しているため、質問への回答は簡単です。通知を右にスワイプして閉じることができ、ユーザーが押したときにどのアクティビティPendingIntentに送信するかを次のように定義できます。

// The PendingIntent to launch our activity if the user selects this
// notification.  Note the use of FLAG_CANCEL_CURRENT so that, if there
// is already an active matching pending intent, cancel it and replace
// it with the new array of Intents.
PendingIntent contentIntent = PendingIntent.getActivities(this, 0,
        makeMessageIntentStack(this, from, message), PendingIntent.FLAG_CANCEL_CURRENT);

http://developer.android.com/guide/topics/ui/notifiers/notifications.htmlから取得したコード

于 2012-05-09T13:13:50.253 に答える
3

ボタンに特定のインテントを割り当てたい場合:

views.setOnClickPendingIntent(R.id.your_button_id, pendingIntent);

ボタンがクリックされたときに送信されるインテントは1つだけでよいと思います。そのため、メインの通知インテントの設定は避ける必要があります。

notification.contentIntent = yourPendingIntent;

それ以外の場合(通常どおり「notification.contentIntent = expectedIntent;」を設定した場合)、両方のインテントが呼び出されますが、これはユーザーが期待するものではない可能性があります。

それでも通知の他の部分を押したい場合は、その一般的なインテント(または他のインテント)を呼び出し、上記と同じビューごとのインテント割り当ての方法を使用できます。設定することを忘れないでください

android:clickable="true"

onClick()を追跡したい任意のビューに。

あなたは彼らが呼んでいる活動の彼らのエキストラによってこれらの意図を追跡することができます。ここで追跡するよりもメイン/ランチャーアクティビティを呼び出している場合(このメソッドのjavadocから取得されるため):

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Bundle data = intent.getExtras();

    if (data != null && data.containsKey(YOUR_INTENT_KEY_SOURCE_CONSTANT)) {
       // process your notification intent
    }

    // go on with smth else
}
于 2012-05-28T08:16:01.893 に答える
3

Notificationアクションをあなたに設定し、各アクションNotification.Builderを定義することで、アクションボタンを簡単に追加できますPendingIntent

以下はサンプルコードです。

    NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.notification_icon)
                .setContentTitle("My notification")
                .setContentText("Hello World!")
       .addAction(R.drawable.action_posetive,"posetive",PendingIntent.getActivity(0,intent,0))
.addAction(R.drawable.action_clear,"clear",PendingIntent.getActivity(0,intent,0));
        NotificationManager mNotificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(0, mBuilder.build());
于 2016-12-19T19:23:16.997 に答える