1

さて、StackOverflow のすべてのスレッドを調べましたが、私の状況に関連するスレッドが見つかりませんでした。皆さんがここで私を助けてくれることを願っています。:)

さまざまな時間に設定されたさまざまなリマインダーについて、複数 (2 つまたはそれ以上) のステータス通知を表示する必要があるアプリがあります。例: リマインダー 1 が午前 9 時 40 分に設定されているため、午前 9 時 40 分に通知がポップアップします。リマインダー 2 は午前 10 時 10 分に設定されているため、午前 9 時 40 分に表示された通知の下に、午前 10 時 10 分に別のステータス通知が表示されます。

リマインダーが鳴ったときにアプリから他の通知がない場合、私のコードは機能します。ただし、既存の通知 (リマインダー 1 と呼びましょう) があり、ユーザーがそれを閉じていない場合、新しい通知 (リマインダー 2 と呼びましょう) は表示されず、リマインダー 1 はそのタイムスタンプをリマインダー 2 の時刻に更新するだけです。出発するはずだった。基本的に、私のコードは、異なる時間に鳴り、互いに共存するはずの複数の個別のリマインダーに対して機能していません。

通知でリマインダーの名前を設定したときのコードは次のとおりです。

    /* Create a unique notifID that increments itself by 1 every time a new reminder is saved. */
int notifID = 0;
notifID = notifID + 1;

Toast toast = Toast.makeText(context, context.getString(R.string.reminder_saved),  Toast.LENGTH_LONG);
 toast.show();

c.set(mYear, mMonth, mDay); //Set the notification date.
c.set(Calendar.HOUR_OF_DAY, pHour); //Set the notification hour.
c.set(Calendar.MINUTE, pMinute); //Set the notification minute.
c.set(Calendar.SECOND, 0); //Set the notification second (always 0).

//Use AlarmManager to trigger the notification/alarm.
                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);                 

                //Get the current date and time.
                Calendar calendar = Calendar.getInstance();       

                //Set the time for the notification to occur.
calendar.set(Calendar.YEAR, mYear);
calendar.set(Calendar.MONTH, mMonth);
calendar.set(Calendar.DAY_OF_MONTH, mDay);                 
calendar.set(Calendar.HOUR_OF_DAY, pHour);
calendar.set(Calendar.MINUTE, pMinute);
calendar.set(Calendar.SECOND, 0);

//PendingIntent to launch activity when the alarm triggers.                    
Intent i = new Intent();

/* Assign a notification ID to each notification. Because it is incremented by 1 for each new notification (see lines 1 and 2), there shouldn't be any duplicates. */
i.putExtra("NotifID", notifID);
    /* Get the name of reminder from the textbox and pass it into the intent. */
i.putExtra("Reminder_Name", editRemindMeTo.getText().toString());

                PendingIntent displayIntent = PendingIntent.getActivity(
                getBaseContext(), 0, i, 0);               

                //Set the alarm to trigger.
alarmManager.set(AlarmManager.RTC_WAKEUP, 
calendar.getTimeInMillis(), displayIntent);

Intent intent = new Intent(this, ViewLocalReminders.class);
startActivity(intent);

これが私の実際の通知コードです(アクティビティを拡張する別のファイルにあります):

public class DisplayReminderNotification extends SherlockActivity {

@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //Get the notification ID from the saved reminder (see previous code block).
    int notifID = getIntent().getExtras().getInt("NotifID");

    //PendingIntent stores the Activity that should be launched when the user taps the notification.
    Intent i = new Intent();
    i.putExtra("NotifID", notifID);

    PendingIntent detailsIntent = 
        PendingIntent.getActivity(this, 0, i, 0);

    //Get the name of the reminder from the previous activity (see previous code block)
    String reminderName = getIntent().getExtras().getString("Reminder_Name");

    NotificationManager nm = (NotificationManager)
        getSystemService(NOTIFICATION_SERVICE);
    Notification notif = new Notification(
        R.drawable.flag_red_large, 
        "App Name",
        System.currentTimeMillis());

    CharSequence from = "App Name";
    //Print the name of the reminder as the notification body.
    CharSequence message = reminderName;        
    notif.setLatestEventInfo(this, from, message, detailsIntent);

    //Pause for 100ms, vibrate for 250ms, pause for 100ms, and vibrate for 500ms.
    notif.defaults |= Notification.DEFAULT_SOUND;
    notif.vibrate = new long[] { 100, 250, 100, 500};        
    nm.notify(notifID, notif);

    //Destroy the activity/notification.
    finish();
}

}

ここで私が間違っていることを誰かが知っていますか? 私は何日もこれを理解しようとしてきましたが、それは私を夢中にさせてきました. 2 つ以上のリマインダーが共存し、名前が異なり、異なる時間にオフになる場合に必要です。繰り返しますが、アプリから通知が 1 つしかない場合、すべてが完全に機能します。通知ドロワーに手つかずの通知が1つあり、別の通知が入ろうとしている場合にのみ機能しません.notifIDに何か問題があると思いますが、それが何であるかはわかりません。ご助力いただきありがとうございます!

4

3 に答える 3

2

OKAY、ついにこれを理解しました!私の解決策は、すべての特定の種類のアプリには当てはまらないかもしれませんが、同じ問題を抱えている場合は、正しい方向への指針となることを願っています. リマインダーごとにデータベースからデータを取得しているので、通知 ID をデータベースの主キーに設定するだけです。各リマインダーには固有のプライマリ キーがあるため、そのキーを使用すると、固有の通知 ID も得られます。:D

ここで私を正しい方向に導くのを手伝ってくれたすべての人に感謝します。:)

于 2012-09-24T06:39:32.073 に答える
0

uniqueID を静的として宣言し、インテントを起動するたびに、uniqueID をインクリメントする必要があります。

あなたの場合、notifIDはインテントを発射した後にインクリメントする必要があります..

Intent intent = new Intent(this, ViewLocalReminders.class);
startActivity(intent);
notifID++

これを試して。

于 2012-09-24T05:13:02.797 に答える
0
public void onCreate() {





                // TODO Auto-generated method stub
                 notifyServiceReceiver = new NotifyServiceReceiver();
                 super.onCreate();
                 }

                 @Override
                 public int onStartCommand(Intent intent, int flags, int startId) {

                 // TODO Auto-generated method stub




                MY_NOTIFICATION_ID = intent.getExtras().getInt("UNIQUE");



                 IntentFilter intentFilter = new IntentFilter();
                 intentFilter.addAction(ACTION);
                 registerReceiver(notifyServiceReceiver, intentFilter);

                 // Send Notification
                 notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
                 myNotification = new Notification(R.drawable.app_icon,"Notification!",System.currentTimeMillis());
                 Context context = getApplicationContext();
                 String notificationTitle = "My App";
                 String notificationText = ""+TEXT;
                 Intent myIntent = new Intent(getApplicationContext(), NotesOnRollAppActivity.class);
                 PendingIntent pendingIntent= PendingIntent.getActivity(getBaseContext(),MY_NOTIFICATION_ID, myIntent,Intent.FLAG_ACTIVITY_NEW_TASK);
                // myNotification.defaults |= Notification.DEFAULT_SOUND;
                /* myNotification.sound = Uri.parse("android.resource://com.project.temp"+R.raw.femaleaud);*/



                     myNotification.sound = Uri.parse("android.resource://com.project.temp/"+ R.raw.femaleaud_converted);   



                 myNotification.flags |= Notification.FLAG_AUTO_CANCEL;
                 myNotification.setLatestEventInfo(context, notificationTitle,notificationText,pendingIntent);
                 notificationManager.notify(MY_NOTIFICATION_ID, myNotification);

                 return super.onStartCommand(intent, flags, startId);
        }

これは私が使用した作業コードです。あなたがそれを手に入れることを願っています..

于 2012-09-24T05:42:41.620 に答える