فتح ملف pdf مع تطبيق آخر من مجلد الأصول، الحلول البديلة
-
26-12-2019 - |
سؤال
في تطبيقي، لدي بعض ملفات PDF المخزنة في مجلد الأصول الخاص بي.لقد رأيت مكتبات لفتح صفحات PDF، ولكن أعتقد أن التطبيقات مثل Quickoffice أفضل في عرض ملفات PDF من المكتبات التي رأيتها.ولذلك، أود أن تظهر قوات الدفاع الشعبي باستخدام Intent.ACTION_VIEW
, ، مثله:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(fileUri, "application/pdf");
getActivity().startActivity(intent);
ومع ذلك، هذا غير ممكن لأنه لا يُسمح لتطبيقات الطرف الثالث بالوصول إلى الملفات الموجودة في الحزمة الخاصة بي.لذلك أحتاج إلى نسخ الملفات إلى وحدة التخزين الخارجية وتقديم هذا الملف للغرض.
وهذا يقودني إلى سؤالي:ملفات PDF الخاصة بي كبيرة الحجم جدًا، لذا أعتقد أنه سيكون من الغباء تخزينها مرتين (مرة في مجلد الأصول ومرة على وحدة التخزين الخارجية).لذلك أنا أتساءل عما إذا كان هناك حل بديل لهذا.هل يمكنني على سبيل المثال أن أفعل:
//Copy file to external storage
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(fileUri, "application/pdf");
getActivity().startActivity(intent);
//Delete file from external storage
هل هذا حل جيد أم سيتسبب في حدوث مشكلات في تطبيق عرض pdf؟أم أن هناك عمل مختلف؟
المحلول
لذلك أحتاج إلى نسخ الملفات إلى وحدة التخزين الخارجية وتقديم هذا الملف للغرض.
يمكنك أيضًا المحاولة لي StreamProvider
, المعلبة ContentProvider
, ، استنادا إلى جوجل FileProvider
, ، الذي يتدفق من الأصول.
بالنسبة للأصول المتعددة، يجب أن يعمل هذا مع StreamProvider
بيانات تعريف XML:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<asset
name="whatevs"/>
</paths>
وينبغي أن يحل كل شيء content://your.authority.name.goes.here/whatevs/*
Uri
القيم (لقيم مختلفة من *
) إلى الملفات الموجودة داخل assets/
.إذا كنت تريد قصر النطاق على دليل فرعي محدد لـ assets/
(يقول، assets/goodstuff/
)، ستستخدم:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<asset
name="whatevs"
path="goodstuff/"/>
</paths>
وإذا لم ينجح هذا، فيجب أن ينجح، لذا لا تتردد في القيام بذلك رفع قضية مع حالة اختبار استنساخه.
هل هذا حل جيد أم سيتسبب في حدوث مشكلات في تطبيق عرض pdf؟
startActivity()
غير متزامن، وبالتالي لن يتمكن عارض PDF الخارجي أبدًا من الوصول إلى الملف بهذه الطريقة.