마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

자동업데이트 기능 구현 중

0 추천

웹서버에서 apk를 올려놓고 특정 txt 파일을 읽어 버전이 다르면 다운로드하라는 메세지를 띄우고 apk 를 다운로드 후 실행하는 코드를 만들었습니다.

그러나 '패키지 파일을 분할하는 중에 문제가 발생하였습니다.' 라는 메세지가 출력이 되는데 어느 부분을 손봐야할지 감이 잘 오지 않습니다. 

도움 부탁드립니다.

 Handler handler1 = new Handler(){
		public void handleMessage(Message msg){
                  if(msg.obj.toString().equals("ok")) {
		    	AlertDialog alert = new AlertDialog.Builder( MainActivity.this )
		    	.setTitle( "Notice" )
		    	.setMessage( "Find new version. You must update apk" )
		    	.setPositiveButton( "confirm", new DialogInterface.OnClickListener(){
                    @SuppressLint("NewApi")
					@Override
		    		public void onClick(DialogInterface dialog, int which) {
		    			int idx=strUpdateApk.lastIndexOf("/");
		    			String downApk=strUpdateApk.substring(idx+1);
		    			String path= Environment.getDataDirectory().getAbsolutePath();
		    			path+="/data/com.mcc.mcc_smart_medi_jeju/files"+downApk;
		    			if(new File(path).exists()){
		    				Toast.makeText(getApplicationContext(), There is a already file".",0).show();
		    			}else{
		    				(new DownThread(strUpdateApk,downApk)).start();
		    			}	}
		    	}).show();
                } else {
				handler1.removeMessages(0);
			}
		}
	};

     class DownThread extends Thread{
		String mAddr;
		String mFile;
		DownThread(String addr, String filename){
			mAddr= addr;
			mFile = filename;
		}
		@Override
		public void run() {
			URL apkurl;
			int Read;
			try{
				apkurl= new URL(mAddr);
				HttpURLConnection conn = (HttpURLConnection)apkurl.openConnection();
				int len= conn.getContentLength();
				byte[] raster= new byte[len];
				InputStream is = conn.getInputStream();
				FileOutputStream fos = openFileOutput(mFile,0);
				for(;;){
					Read=is.read(raster);
					if(Read<=0){
						break;
					}
					fos.write(raster,0,Read);
				}
				is.close();
				fos.close();
				conn.disconnect();
				
			}catch(Exception e){
				mFile=null;
			}
			Message message=mAfterDown.obtainMessage();
			message.obj=mFile;
			mAfterDown.sendMessage(message);
		}
		
	}
	Handler mAfterDown=new Handler(){
		public void handleMessage(Message msg){
			if(msg.obj!=null){
				String path=Environment.getDataDirectory().getAbsolutePath();
				path+="/data/com.mcc.mcc_smart_medi_jeju/files"+(String)msg.obj;
				Intent intent= new Intent(Intent.ACTION_VIEW);
				intent.setDataAndType(Uri.fromFile(new File(path)), "application/vnd.android.package-archive");
				startActivity(intent);
			}
		}
	};

 

블릿카가 (200 포인트) 님이 2014년 2월 20일 질문
파일 경로가 /data/data/패키지명/files 에 있던데, 이 것 때문이 아닐까 합니다. sdcard 쪽으로 받아 설치하고 지우는 방식으로 해보세요

1개의 답변

+1 추천
 
채택된 답변
사악미소님 답변대로 앱 내부에 저장해서 그런 것 같네요~ download 폴더 등에다가 저장해보세요~

해당 문제가 발생하는 대부분의 원인은 3가지가 대부분이에요~

-파일을 다운받아서 저장하고자 하는 경로가 접근 불가 영역인 경우

-apk 파일이 깨진 경우

-앱에서 요구하는 버전과 디바이스의 버전이 호환되지 않는 경우
몽쉘몽쉘 (860 포인트) 님이 2014년 2월 21일 답변
블릿카가님이 2014년 2월 21일 채택됨
...