0

次のインテントを使用して、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」はここに行く方法です。:)

4

1 に答える 1

0

ここでは SetData と SetType を個別に使用してもうまくいかないようです。これらは相互に排他的です。つまり、一方を呼び出すと他方がクリアされます。「SetDataAndType」はここに行く方法です。:)

于 2013-07-04T10:17:31.877 に答える