2012-06-20 34 views
0

要打開圖像或聲音,我們可以使用此代碼:Android的意圖 - 我怎樣才能打開文件

public String getExt(String filename) 
{ 
    int dotIndex = 0; 
    for(int i = filename.length()-1; i >= 0; i--) 
    { 
     if(filename.charAt(i) == '.') 
     { 
      dotIndex = i; 
      break; 
     } 
    } 

    return filename.substring(dotIndex + 1, filename.length()); 
} 

public String getTypeAction(String s) 
{ 
    int slashIndex = 0; 
    for(int i = 0; i < s.length(); i++) 
    { 
     if(s.charAt(i) == '/') 
     { 
      slashIndex = i; 
      break; 
     } 
    } 
    return s.substring(0, slashIndex); 
} 
////// 
////// 

MimeTypeMap mime = MimeTypeMap.getSingleton(); 
String ext = getExt(file_to_action.getName()); 
ext = ext.toLowerCase(); 

String type = mime.getMimeTypeFromExtension(ext); 

Intent intent = new Intent(); 
intent.setAction(android.content.Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(file_to_action), getTypeAction(type) + "/*"); 
startActivity(intent); !> 

但問題是,當我想打開,例如任何不同的文件:.mhtml,.bak的。 APK。當我這樣做時,我的應用程序崩潰了。我不知道問題出在哪裏,我有.mhtml,.odt extenio的應用程序,但我的應用程序無法使用此應用程序來打開文件。 我如何打開所有文件格式或如何檢查任何文件格式的可用應用程序?

回答

0

由於沒有應用程序處理安裝在手機上的該類型數據,因此崩潰。

您應該使用PackageManager中的queryIntentActivies(intent,flags)來查看是否有任何應用程序可以處理您的Intent。如果List<ResolveInfo>的大小大於0,那麼有一些應用程序可以處理您的數據。如果大小爲0,則應顯示Toast並通知用戶數據無法處理,並且在此情況下也不要調用startActivity()

+0

這是這是我看了。但我最後一個問題,爲什麼我不能打開文件.mthml .odt我有這個文件的應用程序,但我不能運行它時,我使用此代碼。 – Kewin

1

,你也可以做到這一點

File file = new File(filepath); 

    String extension = file.getName().substring(file.getName().lastIndexOf(".")+1); 

    MimeTypeMap mime = MimeTypeMap.getSingleton(); 
    String type = mime.getMimeTypeFromExtension(extension); 
    Intent intent = new Intent(); 

    intent.setAction(android.content.Intent.ACTION_VIEW); 
    intent.setDataAndType(Uri.fromFile(file), type); 
    startActivity(intent);