使用android

时间:2016-12-27 11:07:29

标签: android android-intent

我尝试了很多方法来打开文件但是我无法使用意图从SD卡中打开文件。

从内部存储器轻松打开文件,但从SD卡文件打开很困难。 也可以从web-url打开文件。

许可:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

b = true - &gt;文件uri

b = false - &gt;网址

url = /mnt/media_rw/9016-4EF8/123.pdf

这是我从sd-card打开文件的代码:

 public static void openFile(Activity context, String url, Boolean b) throws
 IOException 

{


    File file = new File(url);

    Uri uri=null;


    if (b)
        uri = Uri.fromFile(file);
    else
        uri = Uri.parse(url);


    Intent intent = new Intent(Intent.ACTION_VIEW);


    if (url.toString().toLowerCase().contains(".doc") || url.toString().toLowerCase().contains(".docx")) {
        // Word document
        intent.setDataAndType(uri, "application/msword");
    } else if (url.toString().toLowerCase().contains(".pdf")) {
        // PDF file
        intent.setDataAndType(uri, "application/pdf");
    } else if (url.toString().toLowerCase().contains(".ppt") || url.toString().toLowerCase().contains(".pptx")) {
        // Powerpoint file
        intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
    } else if (url.toString().toLowerCase().contains(".xls") || url.toString().toLowerCase().contains(".xlsx")) {
        // Excel file
        intent.setDataAndType(uri, "application/vnd.ms-excel");
    } else if (url.toString().toLowerCase().contains(".zip") || url.toString().toLowerCase().contains(".rar")) {
        // WAV audio file
        intent.setDataAndType(uri, "application/x-wav");
    } else if (url.toString().toLowerCase().contains(".rtf")) {
        // RTF file
        intent.setDataAndType(uri, "application/rtf");
    } else if (url.toString().toLowerCase().contains(".wav") || url.toString().toLowerCase().contains(".mp3")) {
        // WAV audio file
        intent.setDataAndType(uri, "audio/x-wav");
    } else if (url.toString().toLowerCase().contains(".gif")) {
        // GIF file
        intent.setDataAndType(uri, "image/gif");
    } else if (url.toString().toLowerCase().toLowerCase().contains(".jpg") || url.toString().toLowerCase().contains(".jpeg") || url.toString().toLowerCase().contains(".png")) {
        //JPG file
        intent.setDataAndType(uri, "image/*");
    } else if (url.toString().toLowerCase().contains(".txt")) {
        // Text file
        intent.setDataAndType(uri, "text/plain");
    } else if (url.toString().toLowerCase().contains(".3gp") || url.toString().toLowerCase().contains(".mpg") || url.toString().toLowerCase().contains(".mpeg") || url.toString().toLowerCase().contains(".mpe") || url.toString().toLowerCase().contains(".mp4") || url.toString().toLowerCase().contains(".avi")) {
        // Video files
        intent.setDataAndType(uri, "video/*");
    } else {
        intent.setDataAndType(uri, "*/*");
    }
    //intent.setDataAndType(uri, "application/*");


    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);


    try {
        context.startActivity(intent);
    } catch (ActivityNotFoundException e) {
        e.printStackTrace();
        Log.e("Error -> ", e + "");
    }
}

输出:

  

文件无法使用意图打开

4 个答案:

答案 0 :(得分:0)

Try using this, 

 File dir    =   new File (Environment.getExternalStorageDirectory().getAbsolutePath() + "/PersonData");
 File file   =   new File(dir, "Data.pdf");

这里&#34; PersonData&#34;是sdcard中的文件夹,文件名是Data.pdf

答案 1 :(得分:0)

您似乎应该在Intent中传递您的网址:

Intent intent = new Intent(Intent.ACTION_VIEW, uri);

答案 2 :(得分:0)

确保<uses-permission的位置。它应该如下;

 <manifest>
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
      <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
      <application>
             <activity> 
              ...
             </activity>
      </application>
  </manifest> 

答案 3 :(得分:0)

从Android 4.4开始,您无法直接访问removable storage上任意位置的文件系统。

由于Android 4.4+上的任何内容都不应该为您提供该文件系统路径,因此通常不会出现问题。如果您对该路径进行硬编码,那将是一个问题,因为您无法访问该位置。