2010-05-06 20 views
28

संभाल सकता है मुझे पता है कि एंड्रॉइड पीडीएफ को मूल रूप से संभाल नहीं सकता है। हालांकि, नेक्सस वन (और संभवतः अन्य फोन) क्विकऑफिस व्यूअर के साथ पूर्व-स्थापित हो जाते हैं। मैं कैसे निर्धारित करूं कि उपयोगकर्ता के पास पीडीएफ व्यूअर स्थापित है या नहीं? डाउनलोड करने के बादमैं कैसे निर्धारित कर सकता हूं कि एंड्रॉइड पीडीएफ

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setData(Uri.parse(url)); 
startActivity(intent); 

, उपयोगकर्ता दर्शक आह्वान करने के लिए डाउनलोड की गई फ़ाइल पर क्लिक करता है:

वर्तमान में, पीडीएफ डाउनलोड शुरू करने के लिए कोड बहुत सरल लग रहा है। हालांकि, यदि कोई पीडीएफ व्यूअर नहीं है, तो एंड्रॉइड रिपोर्ट "डाउनलोड नहीं हो सकता है। सामग्री फोन पर समर्थित नहीं है।" मैं यह निर्धारित करना चाहता हूं कि उपयोगकर्ता को यह संदेश मिलेगा, और यदि ऐसा है, तो उन्हें एंड्रॉइड मार्केट में पीडीएफ ऐप्स पर निर्देशित करें।

+0

मेरे एचटीसी हीरो QuickOffice दर्शक और एचटीसी के स्वयं के व्यूअर के साथ पहले से स्थापित आया था। – adrianbanks

उत्तर

52

मैं इसका परीक्षण कर रहा हूं और पाया कि निम्नलिखित कार्य करता है। सबसे पहले आप फ़ाइल स्वतंत्र रूप से डाउनलोड करने और डिवाइस पर संग्रहीत और फिर आप यह कर जाना:

File file = new File("/sdcard/download/somepdf.pdf"); 

PackageManager packageManager = getPackageManager(); 
Intent testIntent = new Intent(Intent.ACTION_VIEW); 
testIntent.setType("application/pdf"); 
List list = packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY); 
if (list.size() > 0 && file.isFile()) { 
    Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_VIEW); 
    Uri uri = Uri.fromFile(file); 
    intent.setDataAndType(uri, "application/pdf"); 

    startActivity(intent); 

मैं विभिन्न एमुलेटर और एक निहित विषैली गैस फोन के साथ ही एक एचटीसी जादू पर इस परीक्षण किया है। यदि कोई पीडीएफ रेंडरर उपलब्ध नहीं है तो सूची शून्य वापस आ जाएगी और कुछ भी नहीं होगा।

सही व्यवहार प्राप्त करने के लिए डेटा प्रकार को पीडीएफ माइम प्रकार में सेट करना महत्वपूर्ण लगता है।

यदि आप उदा। droidreader स्थापित करें यह इरादे पर प्रतिक्रिया करेगा और पीडीएफ प्रदर्शित करेगा।

बेशक आप अपने उपयोग के मामले के आधार पर पीडीएफ डाउनलोड करने से पहले चेक कर सकते हैं या अलर्ट पॉप अप करने या रीडायरेक्ट करने जैसी चीज़ों को डाउनलोड या जो कुछ भी करने के लिए रीडायरेक्ट करते हैं।

संपादित करें: मैं के बाद से एक अलग विधि में इस बाहर पुनर्संशोधित है ..

public static final String MIME_TYPE_PDF = "application/pdf"; 

/** 
* Check if the supplied context can render PDF files via some installed application that reacts to a intent 
* with the pdf mime type and viewing action. 
* 
* @param context 
* @return 
*/ 
public static boolean canDisplayPdf(Context context) { 
    PackageManager packageManager = context.getPackageManager(); 
    Intent testIntent = new Intent(Intent.ACTION_VIEW); 
    testIntent.setType(MIME_TYPE_PDF); 
    if (packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY).size() > 0) { 
     return true; 
    } else { 
     return false; 
    } 
} 
+1

तो, आपको पहले पीडीएफ डाउनलोड करने की ज़रूरत है, फिर इसे प्रदर्शित करने का प्रयास करें? क्या पीडीएफ के साथ यह काम दूरस्थ रूप से होस्ट किया जाएगा? –

+0

नहीं .. आपको इसे जो मिला उससे डाउनलोड करना होगा। इरादे में एक यूआरएल पास करना बहुत सारे पीडीएफ पाठकों के साथ काम नहीं करता है .. –

+0

विधि बनाने के लिए धन्यवाद, इससे बहुत मदद मिली। – jyomin

10

आप पैकेजमैनेजर से यह पूछ सकते हैं कि कोई ऐसा पैकेज है जो आपके इरादे को संभाल सकता है या नहीं। यहां एक उदाहरण दिया गया है: http://www.curious-creature.org/2008/12/15/android-can-i-use-this-intent/

+4

यह मुझे बताता है कि ब्राउज़र एक्टिविटी एंड्रॉइड 1.5 एमुलेटर पर भी पीडीएफ को संभाल सकता है। हालांकि, उस एमुलेटर फ़ाइल को डाउनलोड करने के बाद, डाउनलोड सूची दिखाती है "डाउनलोड नहीं हो सकता है। सामग्री फोन पर समर्थित नहीं है।" मैं यह कैसे निर्धारित कर सकता हूं कि मुझे यह संदेश मिलेगा? –

0

आप शायद किसी भी file.so आसान तरीका डाउनलोड करने के लिए कार्य asynch का उपयोग बस पर अमल पोस्ट में नीचे दिए गए कोड को जोड़ने है जाएगा() विधि asynch task.it की पसंद के लिए पूछेगा।

FileOpener.open(context, file); 

और फ़ाइल filepath और filename.Example के बारे में जानकारी शामिल करना चाहिए

File file = new File(Environment 
     .getExternalStoragePublicDirectory("/MDroid") 
     + filepath + fileName); 

आशा है कि यह मदद करता है

संबंधित मुद्दे

 संबंधित मुद्दे