доступ к папке data

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
allexan
Сообщения: 23
Зарегистрирован: 03 июл 2014, 16:32

доступ к папке data

Сообщение allexan » 30 июл 2014, 10:14

Можно ли получить доступ к папке внутренней памяти data другого приложения?

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: доступ к папке data

Сообщение Mikhail_dev » 30 июл 2014, 11:13

Если программно, то нет.
Чтобы приложения могли общаться между собой, придумали ContentProvider

allexan
Сообщения: 23
Зарегистрирован: 03 июл 2014, 16:32

Re: доступ к папке data

Сообщение allexan » 30 июл 2014, 11:45

а что позволяет делать строка манифеста
android:sharedUserId
Application with the same user ID can access each other's data
(я не уточнил в своем вопросе что оба приложения подписаны одинаково)

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: доступ к папке data

Сообщение Mikhail_dev » 30 июл 2014, 14:11

Хм, раньше не приходилось пользоваться. Да, похоже возможно шарить ресурсы между приложениями, которые подписаны одинаково и у которых данный параметр выставлен также одинаковым.
http://stackoverflow.com/questions/1626 ... red-userid
http://stackoverflow.com/questions/9783 ... is-it-used

allexan
Сообщения: 23
Зарегистрирован: 03 июл 2014, 16:32

Re: доступ к папке data

Сообщение allexan » 30 июл 2014, 15:23

Другой вариант: метод openFileOutput может создать файл с модификатором
MODE_WORLD_WRITEABLE: File creation mode: allow all other applications to have write access to the created file.
А каким образом эти другие получают доступ?

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: доступ к папке data

Сообщение Mikhail_dev » 30 июл 2014, 15:55

Это в рамках одного приложения. Если модификатор PRIVATE, то доступ в рамках одной активности вроде. Читайте документацию, там всё подробно написано.

allexan
Сообщения: 23
Зарегистрирован: 03 июл 2014, 16:32

Re: доступ к папке data

Сообщение allexan » 30 июл 2014, 16:52

В документации написано: all other applications

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: доступ к папке data

Сообщение Mikhail_dev » 30 июл 2014, 19:08

Эм... Снова мой промах :) У меня эти вещи значит ошибочно в голове отложились. И вправду, доступ на все приложения.
Собственно если Вы достаточно и так осведомлены, то к чему такие вопросы? Я лишь замечу, что этот флаг, как Вы уже заметили, deprecated с API17. Сейчас используют ContentProvider для шаринга общих данных, но опять же, надо контент провайдеру выставить android:exported=false , чтобы не открыть доступ по умолчанию для других приложений (до Андроида 4.2)

Viewer
Сообщения: 180
Зарегистрирован: 30 апр 2014, 11:42

Re: доступ к папке data

Сообщение Viewer » 31 июл 2014, 02:09

Нет никаких проблем с доступом к файлам другими приложениями (без разницы, как они подписаны и кем), все зависит какие атрибуты доступа вы ему поставите.
В API 9 и выше для установки атрибутов можно пользоваться методами setReadable(), setWritable() и setExecutable() класса File
Для совместимости с более старыми API можно использовать chmod (линуксоидам должно быть хорошо знакомо :) )
Например
Runtime.getRuntime().exec("chmod 777 filePath");
понятно что это применимо только для своих файлов приложения (т.е. расшарить можно только свои файлы), чтобы изменить атрибуты файлов чужих приложений или системных нужно иметь рут и предварительно выполнить
Process p = Runtime.getRuntime().exec("su"); и далее работать с этим процессом (это уже отдельная тема)

allexan
Сообщения: 23
Зарегистрирован: 03 июл 2014, 16:32

Re: доступ к папке data

Сообщение allexan » 31 июл 2014, 11:45

Осведомлен я только в том, что доступ к файлам внутренней памяти другого приложения вроде бы возможен.
Вопрос в том, как этот доступ осуществить.
В методе openFile указывается только имя файла (без пути, если указать путь, приложение вылетает)
но пути то у разных приложений разные

Viewer
Сообщения: 180
Зарегистрирован: 30 апр 2014, 11:42

Re: доступ к папке data

Сообщение Viewer » 31 июл 2014, 13:58

Что это за метод такой - openFile?

allexan
Сообщения: 23
Зарегистрирован: 03 июл 2014, 16:32

Re: доступ к папке data

Сообщение allexan » 31 июл 2014, 14:21

Open Declaration FileOutputStream android.content.Context.openFileOutput(String name, int mode) throws FileNotFoundException

public abstract FileOutputStream openFileOutput (String name, int mode)
Added in API level 1
Open a private file associated with this Context's application package for writing. Creates the file if it doesn't already exist.

No permissions are required to invoke this method, since it uses internal storage.

Parameters
name The name of the file to open; can not contain path separators.
mode Operating mode. Use 0 or MODE_PRIVATE for the default operation, MODE_APPEND to append to an existing file, MODE_WORLD_READABLE and MODE_WORLD_WRITEABLE to control permissions.

Viewer
Сообщения: 180
Зарегистрирован: 30 апр 2014, 11:42

Re: доступ к папке data

Сообщение Viewer » 01 авг 2014, 12:41

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

Для доступа к файлам есть и другие методы, перекочевавшие из Java (см. java.io), причем им абсолютно без разницы где сами файлы находятся, лишь бы с правами доступа все было нормально, и необходимые разрешения в манифесте прописаны.

Ответить