Как открыть PDF-файл, хранящийся в папке res / raw или assets?

Я собираюсь показать pdf-файл в своем приложении, и файл pdf должен быть связан с приложением.

Каков хороший способ сделать это?

Я прочитал, что это возможно сделать, добавив файл pdf в папку res / raw и прочитав его оттуда, но я получаю ошибки проекта, когда я помещаю там файл pdf.

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

Вот как я попытался показать pdf:

File pdfFile = new File("res/raw/file.pdf"); Uri path = Uri.fromFile(pdfFile); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(path, "application/pdf"); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

Любые идеи или предложения?

заранее спасибо

Solutions Collecting From Web of "Как открыть PDF-файл, хранящийся в папке res / raw или assets?"

Вы могли бы показать его из raw/ or assets/ если ваше приложение действительно реализовало PDF-ридер. Поскольку вы хотите, чтобы он отображался в отдельном приложении (например, Adobe Reader), я предлагаю сделать следующее:

  1. Сохраните файл PDF в каталоге assets/ .
  2. Когда пользователь хочет просмотреть его, скопируйте его где-нибудь публично . Посмотрите в openFileOutput или getExternalFilesDir .
  3. Запустите Intent же, как и сейчас, за исключением использования getAbsolutePath() для вновь созданного файла для данных намерения.

Имейте в виду, что у пользователя может не быть приложения для чтения PDF. В этом случае полезно поймать ActivityNotFoundException и показать соответствующее сообщение.

Вы не можете открыть PDF-файл непосредственно из папки с ресурсами. Сначала вам нужно записать файл на SD-карту из папки с ресурсами, а затем прочитать его с SD-карты. Код выглядит следующим образом:

  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); File fileBrochure = new File(Environment.getExternalStorageDirectory() + "/" + "abc.pdf"); if (!fileBrochure.exists()) { CopyAssetsbrochure(); } /** PDF reader code */ File file = new File(Environment.getExternalStorageDirectory() + "/" + "abc.pdf"); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file),"application/pdf"); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); try { getApplicationContext().startActivity(intent); } catch (ActivityNotFoundException e) { Toast.makeText(SecondActivity.this, "NO Pdf Viewer", Toast.LENGTH_SHORT).show(); } } //method to write the PDFs file to sd card private void CopyAssetsbrochure() { AssetManager assetManager = getAssets(); String[] files = null; try { files = assetManager.list(""); } catch (IOException e) { Log.e("tag", e.getMessage()); } for(int i=0; i<files.length; i++) { String fStr = files[i]; if(fStr.equalsIgnoreCase("abc.pdf")) { InputStream in = null; OutputStream out = null; try { in = assetManager.open(files[i]); out = new FileOutputStream(Environment.getExternalStorageDirectory() + "/" + files[i]); copyFile(in, out); in.close(); in = null; out.flush(); out.close(); out = null; break; } catch(Exception e) { Log.e("tag", e.getMessage()); } } } } private void copyFile(InputStream in, OutputStream out) throws IOException { byte[] buffer = new byte[1024]; int read; while((read = in.read(buffer)) != -1){ out.write(buffer, 0, read); } } 

Вот и все .. Наслаждайтесь !! И пожалуйста не забудьте дать + 1.Thanks

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

 Uri path = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.myPdfName); 

Вы намерение PDF кажется хорошим, но вы должны попробовать это, чтобы получить Uri файла в исходной папке:

 Uri path = Uri.parse("android.resource://<you package>/raw/<you file.pdf>"); 

(Источник)

Моим приложениям необходимо открыть файл pdf-файла в необработанных данных на внешнем приложении … im write:

 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.OpenPdfButton); button.setOnClickListener(new View.OnClickListener() { InputStream is = getResources().openRawResource(R.raw.filepdf); @Override public void onClick(View v) { startpdf(); } private void startpdf() { // TODO Auto-generated method stub File file = new File("R.id.filepdf"); if (file.exists()) { Uri path = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(path, "application/pdf"); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); try { startActivity(intent); } catch (ActivityNotFoundException e) { } } } }); } }