안드로이드 개발 질문/답변
(글 수 45,052)
data/data/패키지명/databases/***.db 파일을 메일에 첨부하고 싶습니다.
ROOT 권한이 없어서 해당폴더에 접근을 할수가 없다는 것도 알고 있습니다.
파일 사이즈 정보까지 긁어오는 걸로 봐서 ROOT 권한이 없어서 파일에 대한 처리를 못하고 있는게 분명하더군요.
해당 문제에 대해서 어떤 방식으로 접근하라던지 이런 방법으로 백업을 해보는것은 어떠냐 같은 진심어린 조언을 구합니다. (__)
코드입니다.
(초보에 처녀작이라 코드가 많이 지저분합니다. 죄송합니다.)
public class BackupActivity extends Activity {private final static String TAG = "BackupActivity";
private TextView emailtext;
private SharedPreferences sharedPref;
private String sharedValue;
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.backup);
((Button) this.findViewById(R.id.bkbtn1)).setOnClickListener(listener);
((Button) this.findViewById(R.id.bkbtn2)).setOnClickListener(listener);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
emailtext = (TextView) this.findViewById(R.id.emailtext);
sharedPref = getSharedPreferences("pref", Activity.MODE_PRIVATE); sharedValue = sharedPref.getString("value", "");emailtext.setText(sharedValue);
saveSDCard();
}
@Override
protected void onResume() {super.onResume();
String sharedValue = sharedPref.getString("value", "");emailtext.setText(String.valueOf(sharedValue));
}
View.OnClickListener listener = new View.OnClickListener() { public void onClick(View v) { //File file1 = new File("/mnt/sdcard/backups/diary.db"); File file1=new File("/data/data/com.android.diaryapp/databases/diary.db");Uri uri1 = Uri.fromFile(file1);
switch (v.getId()) {case R.id.bkbtn1:
Intent i = new Intent(Intent.ACTION_SEND);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setType("text/plain");final PackageManager pm = getPackageManager();
final List<ResolveInfo> matches = pm
.queryIntentActivities(i, 0);
ResolveInfo best = null;
for (final ResolveInfo info : matches)
if (info.activityInfo.packageName.endsWith(".gm")|| info.activityInfo.name.toLowerCase().contains(
"gmail"))
best = info;
if (best != null)
i.setClassName(best.activityInfo.packageName,
best.activityInfo.name);
i.putExtra(Intent.EXTRA_SUBJECT, "FUN DIARY 백업파일");
i.putExtra(Intent.EXTRA_TEXT, "백업파일입니다.");
i.putExtra(android.content.Intent.EXTRA_STREAM, uri1);
String[] emailTo = { sharedValue };i.putExtra(android.content.Intent.EXTRA_EMAIL, emailTo);
startActivity(i);
break;
case R.id.bkbtn2:
Intent intent5 = new Intent(BackupActivity.this,
Preference.class);
BackupActivity.this.startActivity(intent5);
break;
}
}
};
public void saveSDCard() { try {String src = "/data/data/com.android.diaryapp/databases/diary.db";
String dest = "/mnt/sdcard/backups/diary.db";
FileInputStream fis = new FileInputStream(src);
FileOutputStream fos = new FileOutputStream(dest);
byte[] buffer = new byte[1024];
int readByte = 0;
while ((readByte = fis.read(buffer)) != -1) {fos.write(buffer, 0, readByte);
}
fis.close();
fos.close();
} catch (Exception e) {Log.e(TAG, "error:" + e.getMessage());
}
}
}
아래에 존재하는 saveSDcard 메소드는 SD카드에 복사후에 첨부해보려고 꼼수좀 부려봤는데 역시 파일 사이즈 정보까지 가져오지만 실패했습니다. ㅠㅠ
변칙적인 방법 혹은 우회적인 방법으로 database 파일을 첨부하려면 어떤 방법을 시도해봐야 할까요 ㅠㅠ




com.android.diaryapp 가 제작하신 어플의 패키기라면 권한을 주시지 않은것일수도 있구요.
SD카드는 폰마다 마운트가 다르기때문에 마운트 경로를
Environment.getExternalStorageDirectory().getAbsolutePath()
으로 바꿔보세요.