如何在Android中使用Intents打开.xlsx文件?

时间:2013-07-04 10:10:10

标签: android android-intent xamarin.android xamarin kingsoft

我使用以下Intent使用Intent Chooser打开.xlsx文件。我有Kingsoft Offie和Polaris办公室可以打开这些文件。

var calcIntent = new Intent ();             
calcIntent.SetAction (Intent.ActionView);
Android.Net.Uri fileUri = Android.Net.Uri.FromFile (new File (OSUtils.GetCalcFilePath (id)));
calcIntent.SetData (fileUri);
var mimeType = OSUtils.GetMimeType (fileUri.ToString ());
calcIntent.SetType (mimeType);                  
try {
     StartActivity (Intent.CreateChooser (calcIntent, "Open Via"));
 } catch (ActivityNotFoundException) {
    Toast.MakeText (this, "You do not have Kingsoft Office Installed!", ToastLength.Long).Show();
}

OSUtils.GetCalcFilePath定义为

public static string GetCalcFilePath (int currentId) {
    var calcDirPath = OSUtils.GetCalcDirForEstimate (currentId);
    var calcSheetName = String.Format ("builder_calc_{0}.xlsx", currentId);
    var calcSheet = new Java.IO.File (calcDirPath, calcSheetName);
    if (!calcSheet.Exists ()) {
        calcSheet.CreateNewFile ();
    }
    return calcSheet.Path;
}

和OSUtils.GetMimeType定义为

public static string GetMimeType (string fileUri) {
    String mimeType = null;
    var extension = MimeTypeMap.GetFileExtensionFromUrl (fileUri);
    if (extension != null) {
        mimeType = MimeTypeMap.Singleton.GetMimeTypeFromExtension (extension);
    }
    if (mimeType != null)
  return mimeType;
    else
        return "*/*";
}

现在,当我运行它时,我得到一个对话框(选择器)给我两个选项,“金山办公室”和“Polaris办公室”。选择Polaris Office给我一个祝酒词“不支持的文档类型”,另一方面选择Kingsoft Office只会打开金山词霸应用程序并且什么都不做。该文件未在金山办公室打开。 然而,如果我转到我的文件管理器并点击.xlsx文件,它会在两个办公室应用程序中完美打开。我检查了我的代码,所有mimetypes和路径都是正确的,并指向所需的文件。有什么想法吗?

先谢谢

修改

似乎单独使用SetData和SetType不会在这里工作。它们是相互排斥的,即呼叫一个清除另一个。 “SetDataAndType”是这里的方式。 :)

1 个答案:

答案 0 :(得分:0)

似乎单独使用SetData和SetType不会在这里工作。它们是相互排斥的,即呼叫一个清除另一个。 " SetDataAndType"是去这里的方式。 :)