7

iOSアプリケーションで「Openin..」機能を作りたい。

このデバイス上のアプリが共有したいファイル拡張子に関連付けられているかどうかを確認する方法はありますか?

現在のデバイスにそのような拡張子のファイルを開くアプリがない場合は、 [開くUIDocumentInteractionController]ボタンをクリックしても表示されませんが、そのような場合はこのボタンを表示したくありません。

したがって、問題は、デバイス上のアプリが特定の拡張子のファイルを開くことができるかどうかを確認する方法です。


アップデート:

たとえば、プロパティUIDocumentInteractionControllerがあります。NSArrayicons

それは私の拡張子でファイルを開くことができるすべてのアプリケーションの画像が含まれています。ただし、アプリケーションがない場合は、空のアプリケーションのイメージが含まれます。

だからdocInteractionController.icons.count == 0、例えば使って確認することはできません。私は他のトリックを探しています。」

前もって感謝します。

4

3 に答える 3

5

ドキュメントを処理できるアプリケーションがあるかどうかを事前に検出する方法は提供されていUIDocumentInteractionControllerませんが、ドキュメントを開くことができるアプリケーションがあったかどうかを示すフラグが返されます。これには、コントローラーをセットアップして提示している必要がありますが、これは最適ではありません。-presentOpenInMenuFromRect:

これには回避策があり、少しハッキーですが機能します。「実際の」インタラクションコントローラを呼び出す前に、ダミードキュメントを使用してダミーのコントローラを作成しpresent、ウィンドウの境界の範囲からそれを作成します。これにより、画面外に「表示」されることが保証されるため、ユーザーには表示されません。その時点で、からフラグが返され-present、ダミーコントローラーをすぐに閉じて、UIを適切に表示することができます。

于 2013-03-14T14:51:15.180 に答える
1

OSXでは、を使用して特定のコンテンツタイプを処理できるアプリケーションバンドル識別子のリストを取得できますLSCopyAllRoleHandlersForContentType。しかし、iOSではそのような方法はないと思います。

見つけたら、答えを編集します。

他のトリックを探していることを考慮して、icons配列内のその1つの画像が一般的なドキュメントアイコンであるかどうかを確認できます。

その場合、そのファイルタイプを処理するために関連付けられたアプリがないことがわかります。ただし、汎用ファイルアイコンが変更される可能性があるため、このアプローチはOSのバージョンに依存します。

于 2013-03-14T14:43:58.290 に答える
0

公式ドキュメントから:

ファイルタイプのサポートを宣言するには、アプリのInfo.plistpropertyリストファイルにCFBundleDocumentTypesキーを含める必要があります。(「CoreFoundation Keys」を参照してください。)システムは、他のアプリがドキュメントインタラクションコントローラーを介してアクセスできるレジストリにこの情報を追加します。

私にとってこれは、レジストリにはUIDocumentInteractionControllerを介してのみアクセスできることを示しているため、ファイル形式で利用可能なアプリがあるかどうかを事前に知ることはできません(これは、アプリを許可しないというAppleの哲学と完全に一致します)互いに直接対話します)。

更新: あなたが言ったように、iconsプロパティには、アプリケーションが存在しない場合でも画像が含まれています。チェックしたところ、コントローラーの他のすべてのメソッドとプロパティは、現在のファイル形式を開く可能性のあるアプリについてのヒントを提供していません。指定したファイル形式を開くことができないアプリの場合、「空のアプリケーションの画像」があるとおっしゃいました。たぶんあなたはそのアイコンを抽出することができます、そして配列アイコンが1つの画像しかないとき、抽出された画像とアイコンが同じであるかどうかをチェックしますか?

于 2013-03-14T14:07:12.970 に答える