2016-12-09 6 views
0

Я пытаюсь создать приложение для Android, которое позволяет просматривать коллекцию PDF-документов, хранящихся в приложении. Другие столбцы стека привели меня к решению ниже. Однако я смущен тем, какие пути файлов я должен использовать. Должен ли я основывать пути к файлам в папке «приложение» или в папке «project»? Или я должен использовать путь к файлу, где он будет храниться на мобильном устройстве?Где относительные имена файлов начинаются на android

File codeOfPoints = new File("/pdf/CoP_Full.pdf"); 
    String path = getFilesDir() + codeOfPoints.getAbsolutePath(); 
    Intent intent = new Intent(Intent.ACTION_VIEW, 
      Uri.parse(path)); 

    intent.setType("application/pdf"); 
    PackageManager pm = getPackageManager(); 
    List<ResolveInfo> activities = pm.queryIntentActivities(intent, 0); 
    if (activities.size() > 0) { 
     startActivity(intent); 
    } 

Вышеупомянутая структура файла будет основана на папке приложения.

+0

", которые хранятся в приложении" - вам нужно быть более конкретным в отношении того, что это значит. Где, собственно, эти PDF-файлы? В 'src/main/assets /' вашего 'app' модуля? В 'src/main/res/raw /' вашего 'app' модуля? Где-нибудь еще? – CommonsWare

+0

В приведенном выше фрагменте они находятся в /pdf/CoP_Full.pdf, который находится в каталоге приложения. –

ответ

0

Ваша первая проблема заключается в том, что ваши файлы PDF не являются частью вашего приложения. Вы не можете изобретать случайные местоположения внутри своего проекта и ожидать, что инструменты сборки упакуют их внутри вашего APK.

Наиболее вероятный способ отправки PDF-файлов с помощью приложения - разместить их в соответствующем каталоге assets/. В типичном проекте Android Studio это будет app/src/main/assets/ от корня проекта.

Однако у вас нет прямого способа предоставить другим приложениям доступ к этим активам. Ваши первичные варианты:

  1. Скопируйте файлы PDF в файлы в файловой системе на internal storage (например, getFilesDir()), а затем использовать FileProvider, чтобы сделать их доступными для других приложений

  2. Использование my StreamProvider, которые могут служить активы непосредственно

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

Ни одно из средств, которые вы использовали бы для отправки PDF-файлов в APK, не являются файлами файловой системы устройства. Они хранятся в APK. Вы можете использовать классы в Android SDK (например, AssetManager), чтобы получить InputStreams, и вы можете использовать их для создания копий контента в виде файлов в файловой системе, если вы этого захотите.

+0

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

Смежные вопросы