본문 바로가기

안드로이드

android 웹 서버에 있는 이미지 다운받고 실행하기

 웹 서버에 있는 이미지 다운받고 실행하는 방법입니다.



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);


}