2011-02-10 40 views
8

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

谢谢。

编辑

这里是解决方案的一部分:

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); 

回答

7

第1步:创建一个ACTION_VIEWIntent,使用setDataAndType()提供Uri您下载的文件(例如,Uri.fromFile())和内容的MIME类型(例如,application/pdf)。

从那里,你有两个选择:

步骤#2A:使用PackageManagerqueryIntentActivities()Intent。如果它返回一个零长度列表,则知道没有候选人,因此可以禁用任何按钮,菜单选项或任何会导致在该Intent上调用startActivity()的任何内容。

步骤#2B:只需拨打startActivity()当用户想要查看,并赶在没有安装任何支持的应用时出现的异常。这比上面的#2a简单,但不像用户友好。

+0

如果我有一个文件的字节[],如果我不想sa把它存入磁盘? – 2011-02-11 14:18:37

+0

@Tom Fobear:你别无选择,只能将它保存到磁盘中,放在另一个应用程序可以读取的地方。这意味着要么将其存储在外部存储器中,要么将其作为“MODE_WORLD_READABLE”文件存储在应用程序本地文件存储中,或将其作为普通(拒绝全部)文件存储在应用程序本地文件存储中,并使用内容提供程序使其可用于其他应用程序。 – CommonsWare 2011-02-11 14:26:15

1

下面的代码可以帮助你

代码文件
写代码来获取文件的URL中的主要功能

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

代码以打开目前在手机默认应用程序 创建另一类

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/*"); 
}* 
相关问题