次のインテントを使用して、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 "*/*";
}
これを実行すると、「Kingsoft Office」と「Polaris Office」という 2 つのオプションを示すダイアログ (チューザー) が表示されます。Polaris Office を選択すると、「サポートされているドキュメント タイプではありません」というメッセージが表示されます。一方、Kingsoft Office を選択すると、Kingsoft アプリが開くだけで何もしません。ドキュメントが Kingsoft Office で開かれていません。一方、ファイル マネージャーに移動して .xlsx ファイルをタップすると、両方の Office アプリで完全に開きます。コードを確認したところ、すべての MIME タイプとパスが正しく、目的のファイルを指しています。何か案は?
前もって感謝します
編集
ここでは SetData と SetType を個別に使用してもうまくいかないようです。これらは相互に排他的です。つまり、一方を呼び出すと他方がクリアされます。「SetDataAndType」はここに行く方法です。:)