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

assets의 파일 복사 사용시 AVD에서는 사용이되는데 USB 단말기에서는 DB 복사 자체를 못합니다.

0 추천

제목 그대로입니다. AVD에서는 DDMS에서 확인시 DB를 data/data/패키지명/databases (폴더가 없으면 생성합니다)

assets에 있는 DB를 복사하여 잘 사용을 하는데 USB디버깅 즉, 단말기에서는 폴더 생성조차 안되네요

뭔가 권한이있는건가요?? 참고로 SDCARD영역말고 내부 영역에 DB파일을 복사하여 사용하고 싶습니다.

제 스마트폰이 htc one m7을 사용하는데 이 스마트폰이 sdcard 슬롯 조차 없는 기종이라서요

무엇이 문제일까요??

 

혹시 폴더를 생성하는데 필요한 권한 같은게 있는 것인지;; AVD에서는 잘 도는데 단말기 연결해서 테스트해보면

DB를 사용을 못하네요.

 

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		copyDB();
		
		setContentView(R.layout.activity_main);  
				
		func_spinner();
				
		init();
	} 

	private void copyDB() {
		// TODO Auto-generated method stub
		String PACKAGE_DIR = "/data/data/app.smtit_yd/";
		String DATABASE_NAME = "TimeTable.db";
		
		File folder = new File(PACKAGE_DIR);
		if (folder.exists()){
			
		} else {
			folder.mkdirs();
		}
		
		AssetManager A_man = getResources().getAssets();
		File ofile = new File(PACKAGE_DIR + "databases/" + DATABASE_NAME);
		
		ofile.delete();
		
		InputStream in = null;
		FileOutputStream out = null;
		
		long filesize = 0;
		
		  try{
			   in = A_man.open(DATABASE_NAME,AssetManager.ACCESS_BUFFER);
			   filesize = in.available();
			   
			   if(ofile.length() <=0){
				   
			    byte[] tmpbyte = new byte[(int)filesize];
			    in.read(tmpbyte);
			    in.close();
			    ofile.createNewFile();
			    out = new FileOutputStream(ofile);
			    out.write(tmpbyte);
			    out.close();
			    
			   }else{
			    
			    System.out.println("DB있음!!!");
			   }
			  }catch(IOException e){
			   System.out.println("DB생성 오류 ["+e+"]");
			  }
		
	}

구글링 해보니 애초에 AVD는 루팅이 되어있는 상태라서 접근이 가능하다는데

그렇다면 루팅되지 않은 폰들은 data를 아예 사용을 못하는건가요 방법이 없을까요?

개님개님 (520 포인트) 님이 2015년 2월 16일 질문
개님개님님이 2015년 2월 16일 수정

2개의 답변

0 추천
디렉토리 생성을 어떻게 하고 파일 복사를 어떻게 했는지 코드를 올리세요.
익명사용자 님이 2015년 2월 16일 답변
이게 구글링 해보면 애초에 루팅이 되어있지 않으면 data폴더에 접근을 못한다고 하는데 방법이없을까요?? 코드 올리겠습니다.
0 추천
1. 복사할 파일 경로를 하드코딩하지 마시고 Context.getDatabasePath 같은 것을 사용하세요.

2. 파일 복사하는 코드가 잘못되었습니다. java 공부를 좀 더 하세요.
익명사용자 님이 2015년 2월 16일 답변
...