developer tip

PendingIntent에서 사용되는“requestCode”는 무엇입니까?

optionbox 2020. 8. 24. 08:10
반응형

PendingIntent에서 사용되는“requestCode”는 무엇입니까?


배경:

AlarmManager를 통해 알람에 PendingIntent를 사용하고 있습니다.

문제 :

처음에는 이전의 것을 취소하려면 알람을 시작하기 전에 사용했던 정확한 requestCode를 제공해야한다고 생각했습니다.

그러나 취소 API가 말한 것처럼 내가 틀렸다는 것을 알게되었습니다 .

인 텐트가 일치하는 모든 경보를 제거합니다. 의도와 일치하는 모든 유형의 경보 (filterEquals (Intent)로 정의 됨)는 취소됩니다.

" filterEquals "를 보면 문서는 다음과 같이 말합니다.

인 텐트 해결 (필터링)을 위해 두 인 텐트가 동일한 지 확인합니다. 즉, 작업, 데이터, 유형, 클래스 및 범주가 동일한 경우입니다. 이는 인 텐트에 포함 된 추가 데이터를 비교하지 않습니다.

그래서 나는 "requestCode"가 무엇인지 이해하지 못한다.

질문:

"requestCode"는 무엇에 사용됩니까?

동일한 "requestCode"로 여러 알람을 생성하면 어떻게됩니까? 그들은 서로를 무시합니까?


  1. requestCode 나중에 동일한 보류중인 인 텐트 인스턴스를 검색하는 데 사용됩니다 (취소 등).
  2. 네, 내 생각 엔 알람이 서로 무시할 것입니다. 요청 코드를 고유하게 유지합니다.

@Minhaj Arfin 답변에 추가하고 싶습니다.

1- requestCode는 나중에 동일한 보류 인 텐트를 가져 오는 데 사용됩니다 (취소 등).

2- 예, PendingIntent에 지정한 것과 동일한 수신자를 Intent에 지정하는 한 무시됩니다.

예:

Intent startIntent1 = new Intent(context, AlarmReceiverFirst.class);
PendingIntent pendingIntent1 = PendingIntent.getBroadcast(context, 0, startIntent1, 0);

Intent startIntent2 = new Intent(context, AlarmReceiverSecond.class);
PendingIntent pendingIntent2 = PendingIntent.getBroadcast(context, 0, startIntent2, 0);

위의 예 에서 수신자가 다르기 때문에 서로 덮어 쓰지 않습니다 (AlarmReceiverFirst 및 AlarmReceiverSecond).

Intent startIntent2 = new Intent(context, AlarmReceiverSecond.class);
PendingIntent pendingIntent2 = PendingIntent.getBroadcast(context, 0, startIntent2, 0);

Intent startIntent3 = new Intent(context, AlarmReceiverSecond.class);
PendingIntent pendingIntent3 = PendingIntent.getBroadcast(context, 0, startIntent3, 0);

위의 예에서, 그들은 것이다 서로 겹쳐 수신기가 동일하기 때문에 (AlarmReceiverSecond)


제 경우에는 두 가지 다른 의도로 동일한 활동을 열고 싶습니다. 두 개 이상의 FCMS가 트레이에 있으면 그중 하나는 다른 하나는 열지 않을 것이므로 보류중인 의도의 요청 코드를 변경 한 다음 작동했습니다.

 PendingIntent pendingIntent =
                            PendingIntent.getActivity(this, **Some unique id for all GCMS** /* Request code */, intent,
                                    PendingIntent.FLAG_ONE_SHOT);

requestCode앱에 심각한 문제를 일으킬 수있는 한 가지 중요한 점은 위젯을 사용할 때입니다. requestCode동일한 위젯은 전화 재부팅 후 작동하지 않습니다 . 즉, 위젯 pendingIndent에 설정하는 것은 remoteViews고유 한 requestCode, 일반적으로 숫자와 함께 제공되는 widgetId로 설정되어야 함을 의미합니다 .

참고 URL : https://stackoverflow.com/questions/21526319/whats-requestcode-used-for-on-pendingintent

반응형