【 Android 】 웹 개발 알림 란 업데이트 앱 다운로드

Android 애플 리 케 이 션 에 서 는 앱 업데이트 등 백그라운드 에서 파일 을 다운로드 해 야 할 때 가 많 습 니 다.
여기 서 Service 와 알림 표시 줄 등 지식 을 결합 하여 파일 다운로드 작업 과 다운로드 진도 에 대한 업데이트 알림 을 엽 니 다.
주로 지식 과 관련된다.
1. 서비스 로 제목 표시 줄 알림 만 들 기;http://blog.csdn.net/jueblog/article/details/12721651
2. IO 파일 다운로드;http://blog.csdn.net/jueblog/article/details/9429953
3. SDCard 가 존재 하고 파일 을 가 져 오 는 저장 경 로 를 판단 합 니 다.
바 이 너 리 파일 을 다운로드 하 는 방법
		public void DownLoadApp(String urlString) throws Exception{
			URL url = new URL(urlString);
			HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
			int length = urlConnection.getContentLength();
			InputStream inputStream = urlConnection.getInputStream();
			OutputStream outputStream = new FileOutputStream(new File("/mnt/sdcard/App/hello.apk"));
			byte buffer[] = new byte[1024*3];
			int readsize = 0;
            while((readsize = inputStream.read(buffer)) > 0){
            	outputStream.write(buffer, 0, readsize);
            }
			inputStream.close();
			outputStream.close();
		}

SDCard 의 디 렉 터 리 경로 가 져 오기
		private String getSDCardPath() {
			File sdcardDir = null;
			//   SDCard    
			boolean sdcardExist = Environment.getExternalStorageState().equals(
					android.os.Environment.MEDIA_MOUNTED);
			if (sdcardExist) {
				sdcardDir = Environment.getExternalStorageDirectory();
			}
			return sdcardDir.toString();
		}

활동 파일
package com.app.myweb;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class UpdateAppActivity extends Activity{
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.upadteapp);

		AlertDialog.Builder alert = new AlertDialog.Builder(this);
        alert.setTitle("    ")
             .setMessage("     ,        .")
             .setPositiveButton("  ", new DialogInterface.OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub
					Intent updateIntent =new Intent(UpdateAppActivity.this, UpdateAppService.class);
					startService(updateIntent);
				}
             })
             .setNegativeButton("  ",new DialogInterface.OnClickListener(){
				@Override
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub
					dialog.dismiss();
				}
             });
        alert.create().show();
	}
}

서비스 파일
package com.app.myweb;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Environment;
import android.os.IBinder;
/**
 * App          
 * @author 402-9
 *
 */
public class UpdateAppService extends Service{
	private Context context;
	private Notification notification;
	private NotificationManager nManager;
	private PendingIntent pendingIntent;
	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
		context = getApplicationContext();
	}
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}
	@Override
	public void onStart(Intent intent, int startId) {
		// TODO Auto-generated method stub
		super.onStart(intent, startId);
		
	}
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		// TODO Auto-generated method stub
		CreateInform();
		return super.onStartCommand(intent, flags, startId);
	}
	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
	}
	//    
	public void CreateInform() {
		//    PendingIntent,        ,     Activity(        )
		Intent intent = new Intent(context,MainActivity.class);
		pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
		//      
		notification = new Notification(R.drawable.icon, "    ~~", System.currentTimeMillis());
		notification.setLatestEventInfo(context, "         ~", "        ", pendingIntent);
		// NotificationManager notify               
		nManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
		nManager.notify(100, notification);//id           
		//      id               ,                  。
		new Thread(new updateRunnable()).start();//        ,      
	}
	class updateRunnable implements Runnable{
		int downnum = 0;//      
		int downcount= 0;//     
		@Override
		public void run() {
			// TODO Auto-generated method stub
			try {
				DownLoadApp("http://10.0.2.2:8888/android/XiaoJue.apk");
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		public void DownLoadApp(String urlString) throws Exception{
			URL url = new URL(urlString);
			HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
			int length = urlConnection.getContentLength();
			InputStream inputStream = urlConnection.getInputStream();
			OutputStream outputStream = new FileOutputStream(getFile());
//			OutputStream outputStream = new FileOutputStream(new File("/mnt/sdcard/App/hello.apk"));
			byte buffer[] = new byte[1024*3];
			int readsize = 0;
            while((readsize = inputStream.read(buffer)) > 0){
            	outputStream.write(buffer, 0, readsize);
            	downnum += readsize;
                if((downcount == 0)||(int) (downnum*100/length)-1>downcount){ 
                	downcount += 1;
                    notification.setLatestEventInfo(context, "         ~", "    "+(int)downnum*100/length+"%", pendingIntent);
                    nManager.notify(100, notification);
                } 
                if (downnum==length) {
                    notification.setLatestEventInfo(context, "          ~", "    ", pendingIntent);
                    nManager.notify(100, notification);
				}
            }
			inputStream.close();
			outputStream.close();
		}
		//         
		public File getFile() throws Exception{
			String SavePath = getSDCardPath() + "/App";
			File path = new File(SavePath);
			File file = new File(SavePath + "/XiaoJue.apk");
			if (!path.exists()) {
				path.mkdirs();
			}
			if (!file.exists()) {
				file.createNewFile();
			}
			return file;
		}
		//  SDCard       
		private String getSDCardPath() {
			File sdcardDir = null;
			//   SDCard    
			boolean sdcardExist = Environment.getExternalStorageState().equals(
					android.os.Environment.MEDIA_MOUNTED);
			if (sdcardExist) {
				sdcardDir = Environment.getExternalStorageDirectory();
			}
			return sdcardDir.toString();
		}
	}
}

권한 추가
마지막 으로 MANIFEST. XML 파일 에 권한 을 추가 하 는 것 을 기억 하 세 요.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

효과 도
【Android】Web开发之通知栏下载更新APP_第1张图片
【Android】Web开发之通知栏下载更新APP_第2张图片
【Android】Web开发之通知栏下载更新APP_第3张图片

좋은 웹페이지 즐겨찾기