파일을 업로드하는 IntentService가 있습니다. 모든 것은 정상적으로 작동하지만 알림을 처리하는 방법에 대해서는 약간 혼란 스럽습니다. 알림을 시작할 때 startForeground()
을 사용합니다. 그 이유는 파일이 상당히 클 수 있기 때문이며 절대적으로 필요한 경우를 제외하고는 업로드를 원하지 않습니다. 내가 startForeground()
를 사용하는 경우는 알림 영역에서 두 개의 통지 (알림에서 진행에서 하나 하나) 표시 : 나는 다른 스택 오버플로 게시물과 웹 문서의 수를 읽은startForegrounds 두 가지 알림을 올바르게 처리하는 방법
, 그러나 아무도 없다 그들은 내가 가지고있는 질문에 대답한다 ... 희망을 갖고 나는 ths에 관해 말하는 것을 놓치지 않았다.
위의 이미지 (진행률 표시 줄이없는 이미지)의 진행중인 알림은 전경 (Services documentation)에서 실행 중이므로 계속 표시됩니다. 당신이 저에게 묻는다면 그것은 모두 좋고 좋은 것이고, 나는 그 이유를 이해합니다. 그러나 두 개의 알림을 표시 할 필요가 없으며 대부분의 사람들이 알림 영역을 어지럽히는 두 가지 알림을 원하지 않을 것이라고 확신합니다. 알림을 적절하게 처리하여 알림 영역 만 표시하고 알림 영역이 복잡해지지 않도록하는 방법을 알고 싶습니다.
startForeground (int id, Notification notification)
(아래 코드 내 ONGOING_NOTIFICATION_ID
)의 정수 ID를 0으로 설정하면이 문제를 해결할 수있는 유일한 방법입니다. 그러나, 나는 위의 인용 문서는 말한다 : 0으로 설정
Caution: The integer ID you give to startForeground() must not be 0
가 진행 알림을 비활성화 한 후 바로 진행 표시 줄과 일반 통지를 보여줍니다. 파일 업로드가 완료 될 때까지 .setOngoing(true)
을 설정하고 수정이 완료되면 .setOngoing(false)
을 설정하여 문제를 해결할 수 있다고 생각합니다. 따라서 해지 할 수 있습니다. 정확하게 "신중한"사람이 정수 ID를 0으로 설정하는 것과 정확히 일치하지는 않습니다. 나에게이 문제는 내가 가지고있는 문제를 해결할 수있는 게으른 방법처럼 보입니다.하지만 그렇지 않습니다. 그것을 0으로 설정하는 다른 결과가 있는지 확인하십시오. 또한, 이것은 내가 다루고있는 하나의 알림 만있는 경우에만 작동합니다. 여러 개의 다른 알림이있는 경우 각 ID마다 다른 ID가 필요하며 작동하지 않습니다. 업데이트 : 마치 setting the ID to 0 won't work in Android 4.3처럼 보입니다. 이제 다시 정사각형으로 돌아갑니다.
알림을 표시하는 올바른 방법은 무엇입니까?
업데이트/솔루션 : 시간을내어 다시 돌아와서 @dsandler의 추천에 따라 수행 한 작업을 다시 확인하면 내가 잘못하고있는 작업을 파악하는 데 도움이되었습니다. 진행 업데이트를 할 때 올바른 ID를 설정하지 않아서 두 가지 알림을 만들고 업데이트되지 않은 것입니다. 모든 알림에 동일한 ID (ONGOING_NOTIFICATION_ID)를 사용하면 나를 위해이 문제가 해결되었습니다. 이전에 포함시키지 않은 부분과 실수 한 부분에 대해서는 아래 코드를 참조하십시오. UploadFile.java에서
관련 코드 :
public class UploadFile extends IntentService {
private static final int ONGOING_NOTIFICATION_ID = 1;
@Override
protected void onHandleIntent(Intent intent) {
mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mBuilder = new NotificationCompat.Builder(this);
mBuilder.setContentTitle(getText(R.string.upload))
.setContentText("0% " + getText(R.string.upload_in_progress))
.setSmallIcon(android.R.drawable.stat_sys_upload);
startForeground(ONGOING_NOTIFICATION_ID, mBuilder.build());
....
if (progress > 0){
percent = (Long.valueOf(progress) * 100)/totalSize;
mBuilder.setProgress(100, percent.intValue(), false);
mBuilder.setContentText(percent.intValue() + "% " + getText(R.string.upload_in_progress));
mNotifyManager.notify(ONGOING_NOTIFICATION_ID, mBuilder.build()); // <-- My problem was that I had set the ID here to 0 and did not make it the same as the ID I set above
}
....
}
감사합니다. 나는 돌아가서 내가하고 있었던 일 (당신이 조언 한 일을하고 있음)을 재확인하고 진행 상황을 게시 할 때 올바른 알림 ID를 사용하지 않는다는 것을 깨달았다. 그것은 매력처럼 지금 일하고있다! – Jason
알림과 관련하여 질문이 있습니다. "setSmallIcon"에 대해 수행 한 것처럼 Android를 사용하려면 "setLargeIcon"에 어떤 아이콘을 사용해야합니까? –
** NotificationManager.notify **가 필요한 이유는 무엇입니까? 'startForegroundService()'는 이미 알림을 보여줍니다. –