웹 서버에 있는 이미지 다운받고 실행하는 방법입니다.
1. 파일을 다운 받았을때를 캐치하기 위해서 리시버를 등록해줍니다.
@Override
public void onPause() {
super.onPause();
unregisterReceiver(completeReceiver);
}
@Override
public void onResume() {
super.onResume();
IntentFilter completeFilter = new IntentFilter(
DownloadManager.ACTION_DOWNLOAD_COMPLETE);
registerReceiver(completeReceiver, completeFilter);
}
2. 이미지 다운로드 메소드
String fileUrl="http://www.naver.com.........."; //웹서버 이미지 url입니다
String fileName="test.png" ; //저장될 파일이름입니다
ProgressDialog loagindDialog ; //이미지 다운중에 나타나는 프로그레스 바
protected void downLoad() {
AlertDialog.Builder adialog = new AlertDialog.Builder(
GalleryActivity.this);
adialog.setMessage("이미지를 다운로드 받으시겠습니까?")
.setPositiveButton("확인", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Uri source = Uri.parse(fileUrl);
DownloadManager.Request request = new DownloadManager.Request(
source);
request.setDescription("이미지 다운");
request.setTitle(gList.get(pos).toString());
final DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
request.setDestinationInExternalPublicDir(
Environment.DIRECTORY_DOWNLOADS, fileName);
Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS).mkdirs();
final long downloadId = manager.enqueue(request);
// manager.enqueue(request);
loagindDialog = ProgressDialog.show(StoreListActivity.this,
"이미지 다운 중..", "Please wait..", true, false);
new Thread(new Runnable() {
@Override
public void run() {
boolean downloading = true;
while (downloading) {
DownloadManager.Query q = new DownloadManager.Query();
q.setFilterById(downloadId);
Cursor cursor = manager.query(q);
cursor.moveToFirst();
if (cursor.getInt(cursor
.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) {
downloading = false;
}
cursor.close();
}
}
}).start();
}
})
.setNegativeButton("취소", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog alert = adialog.create();
alert.setTitle("이미지 다운로드");
alert.setIcon(R.drawable.ic_launcher);
alert.show();
}
3. 리시버 : 다운된 파일을 실행시킵니다.
private BroadcastReceiver completeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
loagindDialog.dismiss(); //다운이 완료되면 프로그레스 바 닫아준다
AlertDialog.Builder adialog = new AlertDialog.Builder(
GalleryActivity.this);
adialog.setMessage("다운로드가 완료되었습니다. 다운된 파일을 실행하시겠습니까?")
.setPositiveButton("확인",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
dialog.cancel();
openFile();
}
})
.setNegativeButton("취소",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
dialog.cancel();
}
});
AlertDialog alert = adialog.create();
alert.setTitle("다운된 파일 확인");
alert.setIcon(R.drawable.ic_launcher);
alert.show();
}
};
4. 다운된 파일 실행 메소드 : mime tyoe을 image로 고정했습니다. 이미지가 아니라 파일을 실행시키려면 setDataAndType 을 파일 타입에 따라 분기 해주셔야 합니다.
protected void openFile() {
fileName = Environment.getExternalStorageDirectory() + "/"
+ Environment.DIRECTORY_DOWNLOADS + "/"
+ fileName;
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
File file = new File(fileName);
intent.setDataAndType(Uri.fromFile(file), "image/*");
startActivity(intent);
}
'안드로이드' 카테고리의 다른 글
Android GCM JSP 연동 예제 (2) (1) | 2014.08.20 |
---|---|
Android GCM JSP 연동 예제 (1) (0) | 2014.08.19 |
android nfc mime type 이용하기 (0) | 2014.07.09 |
구글 인앱결제 v3 (1) | 2014.04.28 |
안드로이드 유튜브(youtube) v3 동영상 리스트 검색 , 재생하기 (2) | 2014.04.09 |