Android:从我的应用程序打开默认应用程序中保存的文件

首先,对不起,如果这已被问,但我找不到它。 我正在从我的应用程序从远程资源下载文件。 一旦文件被下载,我想打开它的用户。 我想知道的是如何检查他们是否有一个应用程序来处理PDF或TIFF,并在默认的应用程序中启动它?

谢谢。

编辑

这里是解决scheme的一部分:

Intent viewDoc = new Intent(Intent.ACTION_VIEW); viewDoc.setDataAndType( Uri.fromFile(getFileStreamPath("test.pdf")), "application/pdf"); PackageManager pm = getPackageManager(); List<ResolveInfo> apps = pm.queryIntentActivities(viewDoc, PackageManager.MATCH_DEFAULT_ONLY); if (apps.size() > 0) startActivity(viewDoc); 

Solutions Collecting From Web of "Android:从我的应用程序打开默认应用程序中保存的文件"

步骤#1:创build一个ACTION_VIEW Intent ,使用setDataAndType()为您下载的文件(例如, Uri.fromFile() )和内容的MIMEtypes(例如application/pdf )提供一个Uri

从那里,你有两个select:

步骤#2a:使用PackageManagerqueryIntentActivities()与该Intent 。 如果它返回一个零长度的列表,你知道没有候选人,因此可以禁用任何button,菜单select,或任何会导致在该Intent调用startActivity()

要么

步骤#2b:当用户想查看它时,只需调用startActivity() ,并捕获安装不支持的应用程序时发生的exception。 这比上面的#2a简单,但不像用户友好。

以下代码可能对您有所帮助

代码为文件
编写这个代码来获取main函数中的文件的url

 File myFile = new File("your any type of file url"); FileOpen.openFile(mContext, myFile); 

代码打开手机中的默认应用程序创build另一个类

 public class FileOpen { public static void openFile(Context context, File url) throws IOException { // Create URI File file=url; Uri uri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_VIEW); // Check what kind of file you are trying to open, by comparing the url with extensions. // When the if condition is matched, plugin sets the correct intent (mime) type, // so Android knew what application to use to open the file 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 { //if you want you can also define the intent type for any other file //additionally use else clause below, to manage other unknown extensions //in this case, Android will show all applications installed on the device //so you can choose which application to use intent.setDataAndType(uri, "*/*"); } intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } } also u can write this if condition *** if(url.getPath().endsWith(".jpg") || url.getPath().endsWith(".jpeg")|| url.getPath().endsWith(".png")*** { intent.setDataAndType(uri,"image/*"); }*