سؤال

في تطبيقي، لدي بعض ملفات 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 الخارجي أبدًا من الوصول إلى الملف بهذه الطريقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top