Получение файла SQL с физического телефона в мониторе устройства не работает?

Я заметил в мониторе устройства Android, когда я пытаюсь получить доступ к папке данных, чтобы я мог получить файл sql моего приложения, которое работает на моем физическом телефоне, он не работает, но при доступе к приложению через эмулятор это работает. Очевидно, что запуск приложения на эмуляторе занимает гораздо больше времени, и мне нужно представить эти данные sqlite в определенное время, поэтому я не могу ждать эмулятора.

Мне было интересно, почему это происходит, потому что я разрешил отладку, и хотя он не требует дополнительных проверок безопасности, монитор устройства не открывает папку данных, когда щелчок стрелки рядом с папкой исчезает, а затем снова появляется через несколько секунд, но Я все еще могу получить доступ ко всем другим папкам с выпадающей стрелкой рядом с ней.

1 ответ

Если ваше устройство не имеет root-прав, вы не можете получить доступ к файлу данных вашего приложения. Попробуйте использовать следующий фрагмент кода в любом из ваших Activity скопировать файл на SDCard.

public static void copyDataFile() {
    File dataDir = getFilesDir().getParentFile();
    File target = new File(dataDir, "/* relative path to your sql file */");
    File out = new File(Environment.getExternalStorageDirectory(), "/* new file name */");
    copyFile(target, out);
}

public static void copyFile(File in, File out) {
    if (in.exists()) {
        if (!out.exists()) {
            try {
                out.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        FileInputStream is = null;
        FileOutputStream os = null;
        try {
            is = new FileInputStream(in);
            os = new FileOutputStream(out);
            byte[] buf = new byte[4096];
            int l = 0;
            while ((l = is.read(buf)) > 0) {
                os.write(buf, 0, l);
            }
            os.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (is != null) {
                    is.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (os != null) {
                    os.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
Другие вопросы по тегам