Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
#1

Доступ к файлам в data/data/appname/databases

24.11.2014, 19:02. Просмотров 2008. Ответов 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 какой

Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2014, 19:02
Ответы с готовыми решениями:

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

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

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

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

Data Base in android
Создал класс базы данных, создаю в MainActivity экземпляр класса базы, но при...

5
Netscape
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
24.11.2014, 20:54 #2
Цитата Сообщение от NOSC Посмотреть сообщение
Все разрешения стоят как надо.
Это не поможет.

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

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

Спасибо
0
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,732
27.11.2014, 10:12 #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);
0
27.11.2014, 10:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2014, 10:12

Cache JSON Data
Добрый вечер. Как кешировать текст который был получен в результате JSON...

Android JAVA Adding data to two different textViews
Здравствуйте. Я новичок в Андроид. У меня такой вопрос. Есть listview, в нем...

File explorer не открывает папку data
Добрый день! Помогите новичку, плиз. Почему у меня в file explorer не...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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