0

実行時に決定されるさまざまなファイルの種類を開くように外部アプリケーションを取得しようとしています。私が見たすべてのことから、私はそれを正しくやっていると感じていますが、ファイルを正しく開くプログラムはありません。テキスト ファイルを使用する Astro の場合、次のエラーが表示されます。基本的に、正しいファイルの場所を取得していないようです。どんな助けでも大歓迎です。

これが私のコードです:

System.Net.WebClient webClient = new System.Net.WebClient();

  String attachmentPath = appManager.getAttachmentPath(plexState.getActiveBrain().getGuid(), attachment.getId(), attachment.getType());

  webClient.DownloadDataCompleted += (object sender, System.Net.DownloadDataCompletedEventArgs eventArgs) =>
  {
    notificationManager.hidePopup();

    if ((eventArgs.Cancelled == false) && (eventArgs.Error == null))
    {
      byte[] fileBytes = eventArgs.Result;

      Java.IO.File attachmentFile = new Java.IO.File(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads), attachment.getName());
      System.IO.File.WriteAllBytes(attachmentFile.AbsolutePath, fileBytes);

      // Get MIME type
      String extension = MimeTypeMap.GetFileExtensionFromUrl(attachmentFile.AbsolutePath);
      String mimeType = MimeTypeMap.Singleton.GetMimeTypeFromExtension(extension);

      Intent intent = new Intent(Intent.ActionView);

      Logger.console("File exists: " + attachmentFile.Exists()); // Shows true.

      intent.SetData(Android.Net.Uri.FromFile(attachmentFile));
      intent.SetType(mimeType);

      // Check if any application can open the given MIME type. Otherwise show notice to user
      PackageManager packageManager = Activity.PackageManager;
      IList<ResolveInfo> resolversList = packageManager.QueryIntentActivities(intent, 0);

      if (resolversList.Count > 0)
      {
        Activity.StartActivity(intent);
      }
      else
      {
        Toast.MakeText(Activity, "Unable to find for ext...", ToastLength.Long);
      }

    }
    else if (eventArgs.Error != null)
    {
      Logger.console(eventArgs.Error.Message);
    }
  };

  webClient.DownloadDataAsync(new Uri(attachmentPath));
4

1 に答える 1

0

他の誰かが遭遇した場合に備えて、この問題に対する答えを見つけました。これが単なる Monodroid のバグなのか、それとも私が気付いていない別の原因があるのか​​はわかりません。この問題を解決するには、次の 2 行のコードを使用します。

intent.SetData(Android.Net.Uri.FromFile(attachmentFile));
intent.SetType(mimeType);

これに要約します:

intent.SetDataAndType(Android.Net.Uri.FromFile(attachmentFile), mimeType);

これがうまくいったなんて信じられない。これにほぼ2日を費やした後、コードを要約するだけだと思ったのですが、最初はなぜそれが機能し始めたのか理解できませんでした.

于 2013-05-10T08:17:40.047 に答える