Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
#1

Доступ к файлам в data/data/appname/databases - Программирование Android

24.11.2014, 19:02. Просмотров 1691. Ответов 5
Метки нет (Все метки)

Всем привет.
Вопрос в следующем
Программа использует функцию отправки файла средствами mail клиента пользователя. Все бы ничего, да к сообщению необходимо прикрепить файл. Есть не хитрый код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void copy() {
          String destFile = Environment.getExternalStorageDirectory().toString().concat("/base.db");
 
            try {
                File file = new File(destFile);
                // пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ
                InputStream in = new FileInputStream ("/data/data/com.example.app/databases/base.db");
                OutputStream out = new FileOutputStream(file);
                byte[] buf = new byte[1024];
                int len;
                while ((len = in.read(buf)) > 0) {
                    out.write(buf, 0, len);
                }
                in.close();
                out.close();
            } catch (FileNotFoundException ex) {
                System.out
                        .println(ex.getMessage() + " in the specified directory.");
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }
            sendDB();
      }
И при тестировании код отлично работал на моем устройстве. Тут надо сказать что устройство рутовонное. Но поскольку писалось сие не для рутованных то перед отправкой файл копируется в корневую директорию, откуда любой почтовый клиент получает до него доступ.
При тестировании на обычном не рутованном устройстве получается что в почтовой программе я вижу прикрепленный файл, но получаю в итоге письмо без него.
Все разрешения стоят как надо.
Чувствую что проблема в строчке InputStream in = new FileInputStream ("/data/data/com.example.app/databases/base.db");

Подскажите в чем может быть проблема, а может быть мне подскажите как отправлять этот файл из программы не используя почтовый клиент, например на ftp какой

Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2014, 19:02     Доступ к файлам в data/data/appname/databases
Посмотрите здесь:

Доступ к файлам data/data на нерутованом устройстве - Программирование Android
я пытаюсь прочитать файл db который лежит в data/data/com.app и не могу выдает ошибку гуглил в инете там написано что это связано с рутом....

Открыть файл из папки /data/data/com.myapp/files/appdata/ - Программирование Android
я закачиваю файлы в папку приложения и файлы попадают сюда: /data/data/com.myapp/files/appdata/ но открывать мне их нужно либой...

Просмотреть файл моего приложения /data/data/com.example.my.app/files/samplefile.txt - Программирование Android
Добрый день! Не ожидал, что все так сложно окажется. Моя программа создает txt-файл в папке данных, а именно,...

Внутреннее хранение данных data/data - Программирование Android
Здравствуйте. Пробую писать приложения под Андроид на С++, используя NDK. Для отладки приложения выбрал adb usb вариант с присоединением к...

Data Base in android - Программирование Android
Создал класс базы данных, создаю в MainActivity экземпляр класса базы, но при запуске выдаетс ошибка source not found класс базы...

Cache JSON Data - Программирование Android
Добрый вечер. Как кешировать текст который был получен в результате JSON парсинга, чтобы при каждом обновлении Activity не тормозила. ...

Data Base ошибка при записи - Программирование Android
Запись в БД: ContentValues HS = new ContentValues(); HS.put(DataBase.SCORE, Score.getText().toString());// Текст в ...

Как по byte[] data узнать размер снимка? - Программирование Android
урок http://startandroid.ru/ru/uroki/vse-uroki-spiskom/266-urok-133-kamera-delaem-snimok-i-pishem-video.html строка public void...

Не могу найти пакет приложения в папке data - Программирование Android
Скомпилировал приложение, установил на свой телефон. Хочу проверить работу с файлами, захожу в папку Android->data. Но папки моего...

Как из data.getData() получить путь к файлу? - Программирование Android
Добрый вечер! Столкнулся с необходимость открыть изображение из галереи устройства. С этой целью использовал: 1) Доступ к галереи...

Как сделать изображения не через data:uri - Программирование Android
Первые шаги в андроид. Разбираю пример с этой статьи. HTML-содержимое файла res/raw/n.txt передается в WebView посредством...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
24.11.2014, 20:54     Доступ к файлам в data/data/appname/databases #2
Цитата Сообщение от NOSC Посмотреть сообщение
Все разрешения стоят как надо.
Это не поможет.

Без рута, получить доступ к папке /data/data/com.example.app/ может только приложение com.example.app.

Что делать. Скопировать файл в любое доступное место для email клиента.
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
24.11.2014, 23:23  [ТС]     Доступ к файлам в data/data/appname/databases #3
Так на это и рассчитан приведенный выше код. Только всё равно не получается. Вопрос отсюда: это проблема в том что путь указан в явном виде и на другом устройстве (кстати на нем стои Андройд 2.3.3 если это имеет значение) или это проблема в чем то другом? Файл после копирования не появляется в директории /
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
26.11.2014, 15:18     Доступ к файлам в data/data/appname/databases #4
NOSC, только сейчас заметил ваш вопрос. У себя в программе отправляю файл посредством копирования из внутренней памяти во внешнюю (SD) и затем прикрепляю к почтовому сообщению. Не совсем понятно, com.example.app - это ваша программа?
Также возник вопрос, а строчка
Java
1
InputStream in = new FileInputStream ("/data/data/com.example.app/databases/base.db");
корректна? Ведь в скобках должна быть не строка, а File (честно говоря, не пробовал указывать путь в явном виде, использую функции).
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
26.11.2014, 19:20  [ТС]     Доступ к файлам в data/data/appname/databases #5
Цитата Сообщение от CoolMind Посмотреть сообщение
копирования из внутренней памяти во внешнюю (SD)
А если SD карта не установлена? Могу я копировать в корневой каталог внутренней памяти? нет ведь там особых условий и запретов на это??
Цитата Сообщение от CoolMind Посмотреть сообщение
затем прикрепляю к почтовому сообщению
Да, так и работает на моем устройстве, алгоритм копирования для этого и сделано в конце алгоритма копирования запускается send(); со всеми вытекающими...
Цитата Сообщение от CoolMind Посмотреть сообщение
com.example.app - это ваша программа?
Да - все верно
Цитата Сообщение от CoolMind Посмотреть сообщение
строчка корректна?
На моем устройстве отрабатывается, возможно на не рутованном не должна
Цитата Сообщение от CoolMind Посмотреть сообщение
использую функции
Подскажите какие функции!

Спасибо
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
27.11.2014, 10:12     Доступ к файлам в data/data/appname/databases #6
Цитата Сообщение от NOSC Посмотреть сообщение
А если SD карта не установлена? Могу я копировать в корневой каталог внутренней памяти? нет ведь там особых условий и запретов на это??
Спасибо за вопрос. Меня он тоже интересует. Надо будет на досуге поразбираться, вынуть SD и поглядеть...
Цитата Сообщение от NOSC Посмотреть сообщение
Подскажите какие функции!
Кликните здесь для просмотра всего текста

У нас так:
Java
1
2
3
4
5
6
7
        private final String intFolderName = getPDFPath();
 
        private String getPDFPath() {
            AppData ad = AppData.getInstance();
            //Log.i("**********", "path = " + ad.getAppDataDir(context) + "/documents");
            return ad.getAppDataDir(context) + "/documents"; // Папка во внутренней памяти.
        }
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class AppData {
    
    private static final String TAG = AppData.class.getSimpleName();
    private static AppData mInstance;
    
    // Singleton
    public static AppData getInstance() {
        if (mInstance == null) {
            mInstance = new AppData();
        }
        return mInstance;
    }
 
    // Приватный конструктор
    private AppData() {
        
    }
    
    public String getAppDataDir(Context context){
        PackageManager m = context.getPackageManager();
        String s =  context.getPackageName();
        try {
            PackageInfo p = m.getPackageInfo(s, 0);
            s = p.applicationInfo.dataDir;
            Log.d(TAG, "AppDataDir = " + s);
        } catch (NameNotFoundException e) {
            Log.w(TAG, "Package name not found ", e);
        }
        return s;
    }
 
}
Java
1
            pdfFile1 = new File(intFolderName + "/" + intFileName);
Yandex
Объявления
27.11.2014, 10:12     Доступ к файлам в data/data/appname/databases
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru