2014-12-02 32 views
1

在安卓/混合的應用程序,我使用下面的代碼來檢查「是瀏覽器打開文件安裝在設備或沒有」檢查瀏覽器來打開Android文件棒棒糖

private boolean detectFileViewer(String fileExt) throws InterruptedException, 
JSONException { 
    try { 
     PackageManager packageManager = cordova.getActivity().getPackageManager(); 
     Intent testIntent = new Intent(Intent.ACTION_VIEW); 
     testIntent.setType(MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExt)); 
     if (packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY).size() > 0) { 
      return true; 
     } else { 
      return false; 
     } 
    } catch (Exception e) { 
     return false; 
    } 
} 

在Android棒棒糖,如果只默認的PDF閱讀器,即「Drive PDF Viewer」出現在上面的代碼返回false爲

PackageManager.MATCH_DEFAULT_ONLY 

返回空數組。 上面的代碼在以前的Android版本上工作正常。

使用Android棒棒糖測試nexus 4和nexus 5。

+0

我不明白你在說什麼,你說檢查是否有申請打開文件? – massaimara98 2014-12-03 08:16:01

+0

是的,我的意思是有一個應用程序安裝打開特定的文件類型,例如pdf,doc,zip等 而我們正在傳遞文件類型作爲屬性功能「fileExt」 – Harsh 2014-12-03 14:12:44

回答

1
public static void openFile(final Context context, File url, final Activity activity) throws IOException { 
    // Create URI 
    File file = url; 
    Uri uri = Uri.fromFile(file); 

    Intent intent = new Intent(Intent.ACTION_VIEW); 
    if (url.toString().contains(".doc") || url.toString().contains(".docx")) { 
     // Word document 
     intent.setDataAndType(uri, "application/msword"); 
    } else if (url.toString().contains(".pdf")) { 
     // PDF file 
     intent.setDataAndType(uri, "application/pdf"); 
    } else if (url.toString().contains(".ppt") || url.toString().contains(".pptx")) { 
     // Powerpoint file 
     intent.setDataAndType(uri, "application/vnd.ms-powerpoint"); 
    } else if (url.toString().contains(".xls") || url.toString().contains(".xlsx")) { 
     // Excel file 
     intent.setDataAndType(uri, "application/vnd.ms-excel"); 
    } else if (url.toString().contains(".zip") || url.toString().contains(".rar")) { 
     // WAV audio file 
     intent.setDataAndType(uri, "application/x-wav"); 
    } else if (url.toString().contains(".rtf")) { 
     // RTF file 
     intent.setDataAndType(uri, "application/rtf"); 
    } else if (url.toString().contains(".wav") || url.toString().contains(".mp3")) { 
     // WAV audio file 
     intent.setDataAndType(uri, "audio/x-wav"); 
    } else if (url.toString().contains(".gif")) { 
     // GIF file 
     intent.setDataAndType(uri, "image/gif"); 
    } else if (url.toString().contains(".jpg") || url.toString().contains(".jpeg") || url.toString().contains(".png")) { 
     // JPG file 
     intent.setDataAndType(uri, "image/jpeg"); 
    } else if (url.toString().contains(".txt")) { 
     // Text file 
     intent.setDataAndType(uri, "text/plain"); 
    } else if (url.toString().contains(".3gp") || url.toString().contains(".mpg") || url.toString().contains(".mpeg") || url.toString().contains(".mpe") || url.toString().contains(".mp4") || url.toString().contains(".avi")) { 
     // Video files 
     intent.setDataAndType(uri, "video/*"); 
    } else { 
     intent.setDataAndType(uri, "*/*"); 
    } 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    try { 
      context.startActivity(intent); 
    } catch (ActivityNotFoundException e) { 
     Toast.makeText(context, "There isn't any program open this file!!", Toast.LENGTH_SHORT).show(); 
    } 

} 

你想那樣嗎?或只是檢查它?

+0

我需要檢查並打開文件,如果查看器是當下。 在您的建議中,如果用戶沒有在設備上安裝PDF查看器或將其禁用,會發生什麼情況? – Harsh 2014-12-04 06:32:52