2

ボタンをクリックすると通知を表示するシンプルなアプリを作成しました。プログラムされた通知を表示するにはどうすればよいですか?

私が呼び出すコードは次のとおりです。

Notification.Builder builder = new Notification.Builder(this)
    .setTicker("Notifica")
    .setSmallIcon(android.R.drawable.stat_notify_chat)
    .setContentTitle("Notifica")
    .setContentText("Hai una notifica!")
    .setAutoCancel(true)
    .setContentIntent(PendingIntent.getActivity(this, 0,
            new Intent(this, MainActivity.class)
                    .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK), 0));
    NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    nm.notify("interstitial_tag", 1, builder.build());
4

1 に答える 1

4

AlarmManagerをBroadcastReceiverとバンドルして使用できます。

まず、保留中のインテントを作成し、それをAlarmManager.setのどこかに登録する必要があります。次に、ブロードキャスト レシーバーを作成し、そのインテントを受信します。

更新: これが私が約束したコードです。

まず、ブロードキャスト レシーバーを作成する必要があります。

public class NotifyHandlerReceiver extends BroadcastReceiver {

    public static final String ACTION = "me.pepyakin.defferednotify.action.NOTIFY";

    public void onReceive(Context context, Intent intent) {
        if (ACTION.equals(intent.getAction())) {
             Notification.Builder builder = new Notification.Builder(context)
                .setTicker("Notifica")
                .setSmallIcon(android.R.drawable.stat_notify_chat)
                .setContentTitle("Notifica")
                .setContentText("Hai una notifica!")
                .setAutoCancel(true)
                .setContentIntent(PendingIntent.getActivity(context, 0,
                        new Intent(context, MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK), 0));

            NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            nm.notify("interstitial_tag", 1, builder.build());
       }
    }
}

これは、通知要求を処理できるブロードキャスト レシーバです。それが機能するためには、 に登録する必要がありますAndroidManifest.xml。そうしないと、Android は通知要求を処理できません。

タグに<receiver/>宣言を追加するだけです。<application/>

    <receiver android:name=".NotifyHandlerReceiver">
        <intent-filter>
            <action android:name="me.pepyakin.defferednotify.action.NOTIFY" />
        </intent-filter>
    </receiver>

アクション名は で定義されているものとまったく同じであることに注意してくださいNotifyHandlerReceiver.ACTION

次に、このコードを使用できます

public static final int REQUEST_CODE_NOTIFY = 1;

public void scheduleNotification(long delayTimeMs) {
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    long currentTimeMs = SystemClock.elapsedRealtime();

    PendingIntent pendingNotifyIntent = PendingIntent.getBroadcast(
            this,
            REQUEST_CODE_NOTIFY,
            new Intent(NotifyHandlerReceiver.ACTION),
            PendingIntent.FLAG_UPDATE_CURRENT);
    alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, currentTimeMs + delayTimeMs, pendingNotifyIntent);
}

delayTimeMsあなたのアクティビティから、ミリ秒単位で遅延した通知を開始します。

于 2013-07-11T13:53:27.997 に答える