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 플래그가 필요합니다. 새로운 추가 항목은 이전 값보다 우선합니다.
'Program Tip' 카테고리의 다른 글
C 및 C ++에서 세미콜론 대신 쉼표를 사용하는 경우의 효과 (0) | 2020.11.30 |
---|---|
PHP에서 객체 연산자“->”를 어디에 사용합니까? (0) | 2020.11.30 |
Google App Engine으로 타사 Python 라이브러리를 관리하려면 어떻게하나요? (0) | 2020.11.30 |
Clojure에서 Java 클래스의 메소드를 얻으려면 어떻게해야합니까? (0) | 2020.11.30 |
Rails 3 및 Heroku : 푸시시 자동으로 "rake db : migrate"? (0) | 2020.11.30 |