Как открыть файл локального приложения в другом приложении через намерение? - PullRequest
3 голосов
/ 08 ноября 2010

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

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

Например, здесь есть намерение отправить путь в формате pdf:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(path), "application/pdf");
startActivity(intent);

что-то вроде: /data/data/packagename/files/subdir/example.pdf

Это намерение откроет просмотрщик PDF, но просмотрщик не сможет открыть файл.Я предполагаю, что это проблема с разрешениями.Я попробовал предложение Марка Мерфи здесь: http://groups.google.com/group/android-developers/browse_thread/thread/4e55d869213483a9/b7270078ac1a2744?lnk=raot об использовании Runtime.getRuntime().exec("chmod 755 " + fileName);, но это не имело никакого значения.Он также предложил поставщика контента, но я бы хотел этого избежать, если смогу, потому что кажется, что очень просто передать этот файл в другое приложение.

Если поставщик контента - единственный вариант, могу ли ячтобы сохранить файл в контент-провайдере или я могу просто использовать провайдер контента в качестве прохода, чтобы при необходимости передать его в другое приложение?

Спасибо, дайте мне знать, если мне не ясно.

Ответы [ 2 ]

1 голос
/ 08 ноября 2010

Я также попробовал все варианты, которые вы упомянули (и даже больше), и поставщик контента был единственным способом, который работал для меня. Я не совсем уверен, что вы подразумеваете под «сохранить файл в контент-провайдере», но вам на самом деле ничего не нужно в базе данных, чтобы провайдер передавал файл в другое приложение.

0 голосов
/ 08 ноября 2010

Возможно, вы захотите взглянуть на свойство манифеста android:sharedUserId:

Имя идентификатора пользователя Linux, которое будет использоваться другими приложениями.По умолчанию Android назначает каждому приложению свой уникальный идентификатор пользователя.Однако, если для этого атрибута задано одинаковое значение для двух или более приложений, все они будут использовать один и тот же идентификатор - при условии, что они также подписаны одним и тем же сертификатом.Приложение с одинаковым идентификатором пользователя может обращаться к данным друг друга и, при желании, запускаться в одном и том же процессе.

Помните, что в ваших приложениях уже есть приложение по умолчанию, которое вы не можете определить (AFAIK),Можно также определить один и тот же sharedUserId для обоих приложений, а затем установить их в новом эмуляторе.

Во-вторых, вы уверены, что сможете просматривать PDF-файл?Я думал, что в Android пока нет поддержки.

...