갤럭시 탭 10.1(허니컴)이구요.

 

지금 만들고 있는게 네트워크에 접속해서 xml파일을 10.1에 다운받고 서버에 있는 xml이랑 비교해서

 

더 최신인 파일이 있는지 체크해서 해당 파일을 10.1로 다운받게 하는 그런 거거든요.

 

물론 위에 해당하는 작업은 네트워크가 3G는 wipi든 접속이 되는 즉시 수행하게 되어있구요.(BroadcastReceiver가 반응..)

 

해당 부분 소스는 이렇습니다.

(url은 실제 주소를 올리지 못하는 점 양해 바랍니다.)

 

 

 

public class ClsNetwork extends BroadcastReceiver
{  
    private long latestId = -1; 
   
    private DownloadManager downloadManager;
    private DownloadManager.Request request;
    private Uri urlToDownload;
    Parser parser;
    
    //무선 네트워크 관련 변수
    ConnectivityManager connectivityManager;
    NetworkInfo   mobNetInfo;
    NetworkInfo   wifi;   
    NetworkInfo   ni;
    String    netName = "";
   
   
    @Override 
    public void onReceive(Context context, Intent intent)
    {  
        String action = intent.getAction();
          
        if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION))  
        {  
            //네트워크 변화가 생길경우에 처리할 코드 삽입  
         downloadManager = (DownloadManager)context.getSystemService(Context.DOWNLOAD_SERVICE);
        
         connectivityManager  = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
         mobNetInfo    = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
         wifi     = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
         
            if (mobNetInfo.isConnected() || wifi.isConnected())  
            {
                //3G 또는 WiFi 에 연결되어 있을 경우
             ni  = connectivityManager.getActiveNetworkInfo();
             netName = ni.getTypeName();             
             Log.d("dd", "[브로드]" + netName + "에 연결되어있음~!!");
             
    String mSdPath = Environment.getExternalStorageDirectory().getAbsolutePath();
    String FileName = mSdPath + "/downTest/fileinfo.xml";
    File f   = new File(FileName);
    if(!f.exists())
    {
     downloadXMLFile();
     
     try {
      Thread.sleep(500);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
    
             parser = new Parser(); //파서를 객체 생성합니다.
             new ContentAsync().execute(null, null, null); //AsyncTask를 사용하여 Thread 처리합니다.
            } else
            {
             ni  = null;
             netName = "None";             
             Log.d("dd", "[브로드]" + netName + " 에 연결되어있음~!!");
            }
        }  
    }
   
    public class ContentAsync extends AsyncTask<String, String, ArrayList<Files>>
    {
     @Override
     protected ArrayList<Files> doInBackground(String... params)
     {
      return parser.connectFiles();  //파싱 정보를 ArrayList로 가지고 옵니다.
     }
     
     @Override
     protected void onPostExecute(ArrayList<Files> result)
     {
      //결과처리 & 출력
      boolean bUpdated = false;
      ArrayList<Files> localXML = parser.parsingLocalXMLFile();
      Log.d("dd", localXML.get(0).getModelName() + ", " + localXML.get(0).getLanguageValue() +
     ", " + result.get(0).getModelName() + ", " + result.get(0).getLanguageValue());
      
      
      //서버의 fileinfo.xml과 로컬을 비교해서 서버가 더 최신인 파일이 있으면 다운받는다.
      for (int i = 0; i < result.size(); i++)
      {
       if (!result.get(i).getVer().equals(localXML.get(i).getVer()))
       {
        downloadFile(result.get(i).getFileName());
        bUpdated = true;
       }
      }
      
      if (bUpdated == true)
      {
       Log.d("dd", "최신화 완료~!!");
       downloadXMLFile();
      }
     }
    }
   
 public void downloadXMLFile()
 {
  Log.d("dd", "downloadXMLFile()");
  
  String DownloadURL   = "http://a.com/b/fileinfo.xml";
  String mSdPath    = Environment.getExternalStorageDirectory().getAbsolutePath();
  String downPath    = mSdPath + "/downTest/fileInfo.xml";
  urlToDownload    = Uri.parse(DownloadURL);
  List<String> pathSegments = urlToDownload.getPathSegments();
  request      = new DownloadManager.Request(urlToDownload);
  new File(mSdPath + "/downTest").mkdirs();
  File f      = new File(downPath);
  if (f.exists()) {
   f.delete();
  }
  request.setDestinationUri(Uri.fromFile(new File(downPath)));
  latestId     = downloadManager.enqueue(request);
  Log.d("dd", latestId + "");
 }   
   
 public void downloadFile(String downFile)
 {
  String DownloadURL   = "http://a.com/b/" + downFile;
  String mSdPath    = Environment.getExternalStorageDirectory().getAbsolutePath();
  String downPath    = mSdPath + "/" + downFile;
  urlToDownload    = Uri.parse(DownloadURL);
  List<String> pathSegments = urlToDownload.getPathSegments();
  request      = new DownloadManager.Request(urlToDownload);
  request.setDestinationUri(Uri.fromFile(new File(downPath)));
  latestId     = downloadManager.enqueue(request);
 }
} 

 

wipi를 빠르게 접속/해제를 반복할 땐 문제 없거든요. 근데 3G를 빠르게 접속/해제를 반복하면 에러창 하나가 뜨면서 중지됩니다.

로그를 보니까 이렇게 나오는데 저는 아무리 봐도 모르겠어요. 뭐가 문젠지 아시는 분들 저 좀 도와주세요 ㅠㅠ

 

 

K-1.png