1

Android ネイティブよりも多くの画像形式を処理するギャラリー アプリケーションがあります。ユーザーが選択した画像を jpeg として共有できるようにする共有オプションを追加したいと思います。UI とうまく統合されているため、ShareActionProvider を使用することをお勧めします。

これが問題です。JPEG を出力するには、画像を変換するバックグラウンド プロセスが必要です。ユーザーが選択を追加するたびに単純に変換することはできません。これは、アプリが機能しなくなり、最終的に共有したくない場合があるためです。私が見た限りでは、アクションがクリックされると、ShareProvider をインターセプトする方法はありません。その時点で、必要な URI を入力する必要があるようです。

ShareActionProvider が実行される前に必要なバックグラウンド処理を処理する方法を思いついた人はいますか?

私は多くのアイデアを使い果たしました:

  1. onShareTargetSelected(ShareActionProvider, Intent) ですが、これではインテントの変更は許可されず、URI バンドルも変更できません。
  2. AsyncTask を起動してから共有インテントを起動するカスタム インテントですが、ユーザーが選択したハンドラーにはアクセスできません。

この時点で、共有セレクターを備えた古典的なアクション アイテムを実装する必要があることはほぼ確実ですが、誰かがこれに対する賢い解決策を思いついたかどうかを確認したかったのです。みんなありがとう!

4

2 に答える 2

2

ShareActionProvider に提供する URI は、カスタム ContentProvider を参照することもできます。すべての変換パラメーターを URI にエンコードし、ContentProvider の openFile() メソッドをオーバーライドするだけです。このようにして、ユーザーが実際に共有するまで変換を延期します。

このソリューションでは、バックグラウンド プロセスを使用する必要はないようです。

于 2013-05-24T23:16:39.833 に答える
0

この問題を再検討し、上記の ContentProvider の回答を実装しました。それははるかに優れたソリューションです。

かなり興味深い解決策を思いつきました。onShareTargetSelectedインテントを処理していることを示すために true を使用して返しました。

ShareActionProviderインテントを処理すると、履歴データが保存されない (お気に入りのアプリがリストの一番上に配置される)ため、小さな問題が発生しました。

を使用しているので、インテントが のカスタム コードで処理されるかどうかに関係なく、履歴データを保存ActionBarSherlockするように変更できました。ActivityChooserModelonShareTargetSelected

最後に、共有インテントが保留中かどうかを管理するブール値チェックをいくつか追加して、アクティビティを変更する前に共有インテントが完了するのを待つか、キャンセルするかをユーザーに尋ねました。

私が行ったことがコーシャであるかどうかはまだ完全にはわかりませんし、かなり複雑なので、コードを投稿したくはありませんが、詳細についてはお気軽にお問い合わせください。

于 2013-03-05T15:51:23.100 に答える