0

ステータスバーの通知を設定するアプリケーションがあります。それらを設定でき、ステータスバーの通知をクリックすると、アプリケーションが開きます。問題は、ホームボタンを押すと、アプリケーションがバックグラウンドに送信され、通知が来るとアプリケーションが自動的に前面に表示されることです。

 public void setNotification(String date, String alertText, String alertTitle, String sound,String notificationId,int repeatOption, long eventsJni) {
    alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent("sprat.notifier.run");

    intent.putExtra("alertText", alertText);
    intent.putExtra("alertTitle", alertTitle);
    intent.putExtra("sound", sound);
    int id = (int)Integer.valueOf(notificationId);
    intent.putExtra("notificationId", id);


    PendingIntent pendingIntent;
    long time = getDate(date).getTime();
    if(repeatOption == 1){
        pendingIntent = PendingIntent.getActivity(this.getApplicationContext(), id, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
        alarm.set(AlarmManager.RTC_WAKEUP, time, pendingIntent);
    }

}

アラーム時刻になると、別のアクティビティに通知が設定されます。

public class Notifications extends Activity {
        private int date;
        private String alertText;
        private String alertTitle;
        private String sound;
        private int id;
        private int repeatOption;

        @Override
        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            Intent intent = getIntent();
            if (intent == null){
                finish();
                return;
            }
            String ns = Context.NOTIFICATION_SERVICE;
            NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
            if(intent.getExtras().getString("notif_id") != null && intent.getExtras().getString("notif_type") != null) {
                mNotificationManager.cancel((int)Integer.valueOf(intent.getExtras().getString("notif_id")));
                Intent i = new Intent(this.getApplicationContext(), A.class);
                i.putExtra("notif_id", intent.getExtras().getString("notif_id"));
                i.putExtra("notif_type", intent.getExtras().getString("notif_type"));
                startActivity(i);
                finish();
                return;
            }

            set(intent);            

        }

        private void set(Intent intent){

            alertText = intent.getExtras().getString("alertText");
            alertTitle = intent.getExtras().getString("alertTitle");
            sound = intent.getExtras().getString("sound");
            id = intent.getExtras().getInt("notificationId");

            Vibrator v = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
            v.vibrate(100);


            String ns = Context.NOTIFICATION_SERVICE;
            NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
            int icon = R.drawable.icon;
            CharSequence tickerText = alertTitle;
            long when = System.currentTimeMillis();
            Notification notification = new Notification(icon, tickerText, when);

            Context context = getApplicationContext();
            CharSequence contentTitle = alertTitle;
            CharSequence contentText = alertText;
            Intent notificationIntent = new Intent(this, SpNotifications.class);
            notificationIntent.putExtra("notif_id", String.valueOf(id));
            notificationIntent.putExtra("notif_type", "Local");


            PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 0, notificationIntent, PendingIntent.FLAG_ONE_SHOT);
            notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
            notification.defaults  |= Notification.DEFAULT_VIBRATE;
            notification.defaults  |= Notification.DEFAULT_SOUND;
            mNotificationManager.notify(id, notification);

            finish();
        }
4

1 に答える 1

0

ここで何が起こっているのかわかりません。通知をクリックすると、アプリが前面に表示されます。[ホーム] をクリックすると、ホーム画面が表示されます。アプリは、通知のために自動的に前面に来ることはできません。

ドキュメントの新しい通知ガイドを確認してください。特に、通知から開始されたアプリのナビゲーションを処理する方法について説明します。

于 2012-11-06T19:48:10.247 に答える