1. BroadcastReceiver 메서드
- about : 파일번역 다운로드
- 메서드로 만들었으나 class로 만드는것이 대체적이다
- broadcast는 10초이상 지연되지 않는 간단한 코드로 작성한다
- 그 이상 넘어갈 시 앱이 죽는 증상 발생
AndroidManifest로 작업할수도 있으나 unregister()를 사용할 수 없는 문제로 사용하지 않았다.(참조링크)
액션리스트
Code
private BroadcastReceiver tFileDownloadReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.hasExtra(DownloadManager.EXTRA_DOWNLOAD_ID) && intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1) != -1 && downloadQueueID != null){ //투표결과와 예외처리
long reference = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (downloadQueueID == reference) {
DownloadManager.Query query = new DownloadManager.Query(); // 다운로드 항목 조회에 필요한 정보 포함
query.setFilterById(reference);
Cursor cursor = downloadManager.query(query);
if (!cursor.moveToFirst()) {
return;
}
int columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
int columnReason = cursor.getColumnIndex(DownloadManager.COLUMN_REASON);
int status = cursor.getInt(columnIndex);
int reason = cursor.getInt(columnReason);
cursor.close();
switch (status) {
case DownloadManager.STATUS_SUCCESSFUL:
if (chatMstVO.getChatDataList() != null) {
int count = rootNode.getChildren().size();
for (int i = count; i > 0; i--) {
TreeNode node = rootNode.getChild(i - 1);
treeView.removeNode(node);
}
for (int i = 0; i < chatMstVO.getChatDataList().size(); i++) {
ChatVO chatVO1 = chatMstVO.getChatDataList().get(i);
TreeNode chatNode = new TreeNode(chatVO1).setViewHolder(new ChatViewHolder(ChatViewActivity.this));
rootNode.addChildren(chatNode);
}
if (scrollView.isScrollEnded) {
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(View.FOCUS_DOWN);
}
});
}
}
treeView.expandAll();
break;
case DownloadManager.STATUS_RUNNING:
Toast.makeText(ChatViewActivity.this, getString(R.string.sen077), Toast.LENGTH_SHORT).show();
break;
case DownloadManager.STATUS_PAUSED:
Log.e(TAG, "onReceive: STATUS_PAUSED = " + reason);
break;
case DownloadManager.STATUS_FAILED:
Log.e(TAG, "onReceive: STATUS_FAILED = " + reason);
Toast.makeText(ChatViewActivity.this, getString(R.string.sen104), Toast.LENGTH_SHORT).show();
break;
}
}
}
}
};
2. 리시버 등록
위치
- onCreate / onDestroy(unregister)
- onResume / onPause(unregister)
리시버를 onCreate에 등록하면 unregister는 onDestroy
onResume에 등록하면 unregister는 onPause에 등록한다
Code
IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
registerReceiver(tFileDownloadReceiver, intentFilter);
3. LifeCycle에 맞춘 unregister()
위치
- onCreate / onDestroy(unregister)
- onResume / onPause(unregister)
if (tFileDownloadReceiver != null) {
try {
unregisterReceiver(tFileDownloadReceiver);
} catch (Exception e) {
e.printStackTrace();
}
}
Reference
'Android > Android Java' 카테고리의 다른 글
[Android Java] Unsupported class file major version 55 (0) | 2023.10.30 |
---|---|
[Android Java] Cursor (0) | 2023.10.30 |
[Android Java] 모션레이아웃을 이용한 드래그시 숨기기/나타나기 (0) | 2023.10.27 |
[Android Java] 터치시 사라지는 상하단바(애니메이션, 터치리스너) (0) | 2023.10.27 |
[Android Java] Notification Channel (0) | 2023.10.27 |