- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Link
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[안드로이드] 웹서버에 있는 파일 다운로드 하기 본문
대략적인 내용은..
웹서버 특정 경로에 있는 특정파일을 다운로드 버튼을 눌렀을때 단말기의 SD메모리의 사용자 지정폴더로 다운로드 하고
바로 실행되도록 하는 것입니다.
소스는 간단합니다..
- public class MainActivity extends Activity implements OnClickListener {
- /** Called when the activity is first created. */
- String File_Name = "확장자를 포함한 파일명";
- String File_extend = "확장자명";
- String fileURL = "웹서버 쪽 파일이 있는 경로"; // URL
- String Save_Path;
- String Save_folder = "/mydown";
- ProgressBar loadingBar;
- DownloadThread dThread;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Button btn = (Button) findViewById(R.id.downbtn);
- btn.setOnClickListener(this);
- loadingBar = (ProgressBar) findViewById(R.id.Loading);
- // 다운로드 경로를 외장메모리 사용자 지정 폴더로 함.
- String ext = Environment.getExternalStorageState();
- if (ext.equals(Environment.MEDIA_MOUNTED)) {
- Save_Path = Environment.getExternalStorageDirectory()
- .getAbsolutePath() + Save_folder;
- }
- }
- @Override
- public void onClick(View view) {
- // TODO Auto-generated method stub
- if (view.getId() == R.id.downbtn) {
- File dir = new File(Save_Path);
- // 폴더가 존재하지 않을 경우 폴더를 만듦
- if (!dir.exists()) {
- dir.mkdir();
- }
- // 다운로드 폴더에 동일한 파일명이 존재하는지 확인해서
- // 없으면 다운받고 있으면 해당 파일 실행시킴.
- if (new File(Save_Path + "/" + File_Name).exists() == false) {
- loadingBar.setVisibility(View.VISIBLE);
- dThread = new DownloadThread(fileURL + "/" + File_Name,
- Save_Path + "/" + File_Name);
- dThread.start();
- } else {
- showDownloadFile();
- }
- }
- }
- // 다운로드 쓰레드로 돌림..
- class DownloadThread extends Thread {
- String ServerUrl;
- String LocalPath;
- DownloadThread(String serverPath, String localPath) {
- ServerUrl = serverPath;
- LocalPath = localPath;
- }
- @Override
- public void run() {
- URL imgurl;
- int Read;
- try {
- imgurl = new URL(ServerUrl);
- HttpURLConnection conn = (HttpURLConnection) imgurl
- .openConnection();
- int len = conn.getContentLength();
- byte[] tmpByte = new byte[len];
- InputStream is = conn.getInputStream();
- File file = new File(LocalPath);
- FileOutputStream fos = new FileOutputStream(file);
- for (;;) {
- Read = is.read(tmpByte);
- if (Read <= 0) {
- break;
- }
- fos.write(tmpByte, 0, Read);
- }
- is.close();
- fos.close();
- conn.disconnect();
- } catch (MalformedURLException e) {
- Log.e("ERROR1", e.getMessage());
- } catch (IOException e) {
- Log.e("ERROR2", e.getMessage());
- e.printStackTrace();
- }
- mAfterDown.sendEmptyMessage(0);
- }
- }
- Handler mAfterDown = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- // TODO Auto-generated method stub
- loadingBar.setVisibility(View.GONE);
- // 파일 다운로드 종료 후 다운받은 파일을 실행시킨다.
- showDownloadFile();
- }
- };
- private void showDownloadFile() {
- Intent intent = new Intent();
- intent.setAction(android.content.Intent.ACTION_VIEW);
- File file = new File(Save_Path + "/" + File_Name);
- // 파일 확장자 별로 mime type 지정해 준다.
- if (File_extend.equals("mp3")) {
- intent.setDataAndType(Uri.fromFile(file), "audio/*");
- } else if (File_extend.equals("mp4")) {
- intent.setDataAndType(Uri.fromFile(file), "vidio/*");
- } else if (File_extend.equals("jpg") || File_extend.equals("jpeg")
- || File_extend.equals("JPG") || File_extend.equals("gif")
- || File_extend.equals("png") || File_extend.equals("bmp")) {
- intent.setDataAndType(Uri.fromFile(file), "image/*");
- } else if (File_extend.equals("txt")) {
- intent.setDataAndType(Uri.fromFile(file), "text/*");
- } else if (File_extend.equals("doc") || File_extend.equals("docx")) {
- intent.setDataAndType(Uri.fromFile(file), "application/msword");
- } else if (File_extend.equals("xls") || File_extend.equals("xlsx")) {
- intent.setDataAndType(Uri.fromFile(file),
- "application/vnd.ms-excel");
- } else if (File_extend.equals("ppt") || File_extend.equals("pptx")) {
- intent.setDataAndType(Uri.fromFile(file),
- "application/vnd.ms-powerpoint");
- } else if (File_extend.equals("pdf")) {
- intent.setDataAndType(Uri.fromFile(file), "application/pdf");
- }
- startActivity(intent);
- }
- }
특별한 내용은 없습니다.. 외장메모리가 없는 경우나 파일 다운로드시 에러가 발행하거나 할때 예외처리는 따로 안했습니다..
다운로드가 완료되었거나 이미 파일이 존재하면 바로 실행되도록 했습니다.. 파일 확장자 별로 MIME type을 설정해 주시면 됩니다. 안드로이드 MIME TYPE 리스트는 http://www.androidside.com/bbs/board.php?bo_table=B46&wr_id=12504 여기를 참고했습니다.
외장메모리 사용과 웹서버 연동으로 인한 퍼미션을 Manifest에 추가해 주셔야 합니다.
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- <uses-permission android:name="android.permission.INTERNET"/>
아.. 레이아웃 구조는 테스트를 위한거라 이렇게 작성했습니다..
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello" />
- <ProgressBar
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/Loading"
- android:layout_width="30dip"
- android:layout_height="30dip"
- android:visibility="gone"/>
- <Button
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="다운로드"
- android:id="@+id/downbtn" />
- </LinearLayout>
출처: http://motpool.tistory.com/35 [흠.. 그르게..]
'★─Programing > ☆─Android' 카테고리의 다른 글
[안드로이드] 외부 앱 실행시키기 (launch external app in android) (0) | 2017.05.24 |
---|---|
[안드로이드] MIME-Type List (0) | 2017.05.19 |
[안드로이드] 어플이 apk를 설치하는 소스 (0) | 2017.05.19 |
[안드로이드] Device Administration 완벽 분석 (1) | 2017.05.19 |
[안드로이드] android 화면 잠그기( 디바이스 관리자 ) (0) | 2017.05.19 |
Comments