【 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" />
효과 도
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.