Program Tip

Android는 내 인 텐트 Extras를 계속 캐싱합니다. 새로운 추가 항목을 유지하는 보류중인 인 텐트를 선언하는 방법은 무엇입니까?

programtip 2020. 11. 30. 19:47
반응형

Android는 내 인 텐트 Extras를 계속 캐싱합니다. 새로운 추가 항목을 유지하는 보류중인 인 텐트를 선언하는 방법은 무엇입니까?


며칠 전 알람에 커스텀 인 텐트를 사용하는 방법을 찾기 위해 고군분투했습니다. 예를 들어 고유 한 ID를 기반으로 인 텐트를 사용자 정의해야한다는 명확한 대답이 있지만. setAction()여전히 몇 가지 문제가 있습니다.

이 방법으로 PendingIntent를 정의합니다.

Intent intent = new Intent(this, viewContactQuick.class);
intent.setAction("newmessage"+objContact.getId());//unique per contact
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK ).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP );
intent.putExtra("id", Long.parseLong(objContact.getId()));
intent.putExtra("results", result.toArray());

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0);

알림 관리자가 사용합니다.

NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns);
// first try to clear any active notification with this contact ID
mNotificationManager.cancel(Integer.parseInt(objContact.getId()));

// then raise a new notification for this contact ID
mNotificationManager.notify(Integer.parseInt(objContact.getId()), notification);

이것은 다음과 같이 작동합니다.

  • 응용 프로그램이 연락처에 대한 메시지를 생성
  • 메시지에 대한 연락처 ID 및 세부 정보와 함께 인 텐트가 제공됩니다.
  • 메시지와 함께 알림이 발생합니다.
  • 사용자가 알림에 대한 작업을 수행하고 앱은 인 텐트가 전달한 메시지를 표시합니다.

문제

이는 연락처에 대해 두 번 이상 발생할 수 있습니다. 그리고 두 번째 메시지가 생성되면 알림이 잘 발생하지만 (메시지는 괜찮습니다) 사용자가 알림을 수행 할 때의 의도는 이전 데이터를 사용하므로 새 메시지가 아닌 이전 메시지가 전달됩니다.

그래서 어쨌든 의도는 이전 추가 항목을 캐싱하고 재사용하는 것입니다. 연락처 및 작업별로 어떻게 고유하게 만들 수 있습니까?


단 하나의 경우 PendingIntents이 연락처가 어느 시점에서 뛰어난 것을 위해, 또는 당신은 항상 여분의 최신 세트, 사용을 사용하려는 경우 FLAG_UPDATE_CURRENT당신이를 만들 때 PendingIntent.

한 번에 둘 이상의 연락처 특정 항목 PendingIntent이 미결 상태이고 별도의 추가 항목이 필요한 경우 개수 나 타임 스탬프 또는 구분할 수있는 항목을 추가해야합니다.

intent.setAction("actionstring" + System.currentTimeMillis());

최신 정보

또한 가볍게 문서화 된 두 번째 매개 변수 to getActivity()and kin on은 PendingIntent분명히 PendingIntent동일한 기본에 대해 별개의 개체 를 만드는 데 사용할 수 Intent있지만 시도한 적이 없습니다.


나는 보통 내 PendingIntents가 서로를 재정의하지 못하도록 고유 한 requestCode를 지정합니다.

PendingIntent pending = PendingIntent.getService(context, unique_id, intent, 0);

그리고 귀하의 경우에는 CommonsWare에 동의합니다. FLAG_UPDATE_CURRENT 플래그가 필요합니다. 새로운 추가 항목은 이전 값보다 우선합니다.

참고 URL : https://stackoverflow.com/questions/3140072/android-keeps-caching-my-intents-extras-how-to-declare-a-pending-intent-that-ke

반응형