6

別のアプリでファイル(アプリにローカルに保存されている)を開きたい。

現在、私はopenURL(専用のURLスキームがあります)を使用しており、インターネットでホストされているファイルを使用すると正常に機能しますが、ローカルファイルを使用したいので:a)オフラインで機能しますb)多くのユーザーがセルゾーンのカバレッジ外にあるか、国際的にローミングしている時間

これまでに試したこと:openURLにローカルファイルを使用するように指示することができませんでした。いくつかのアプローチを試しましたが、それらはすべて次のようなものです。

      NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"ext"];
      NSURL *fileURL = [NSURL fileURLWithPath:filePath];
      [[UIApplication sharedApplication] openURL:fileURL];

また

      NSURL *fileURL = [[NSBundle mainBundle] URLForResource: @"test" withExtension:@"ext"];
      [[UIApplication sharedApplication] openURL:fileURL];

また、localhost /およびfile://およびvar/mobileなどのパスのバリエーションが異なる文字列を手動で使用する

何も機能しません(とにかく私にとって)

それで、私はSOを見回して、UIDocumentInteractionControllerに出くわしました

UIDocumentInteractionControllerを使用して、ユーザーが他のアプリでローカルファイルを開くことができます。ただし、使用する他のアプリの複数のオプションが常に表示されます。たとえば、他のアプリの1つを「Dropbox」にすることができます。

他の方法で使用するために、ユーザーに自分のファイルのコピーをダウンロード(または技術的にアップロード)させたくありません。すぐに利用できるようにしたくないデータが含まれています。

私が意図したアプリ(私が作成したものではない)でファイルを開くと、生データの保存やアクセスは許可されません。

私のアプリにファイルを含めることで、それを取得することに真剣に取り組んでいる人なら誰でもできるようになることを理解しています。

理想的には、openURLを使用できますが、他のアプリが応答しないのは「サンドボックス」が原因だと思います。Androidでは、mode_world_writtenを使用して、ファイルを他のアプリで読み取り可能として宣言します(したがって、サンドボックスの外に配置します。他のアプリがそれに書き込むことを許可せず、ただ読むだけです)-とにかくiOSで同じことをする方法はありますか?

それ以外の場合、UIDocumentInteractionControllerに特定のアプリを使用させ、メニューを表示しないように強制できれば、それでも問題ありません。

少し前に尋ねられた同様の質問

長い間読んで申し訳ありませんが、どんな助けもいただければ幸いです。

編集:Apple Techサポートから回答を受け取ったところ、これは現在不可能であると言われました(iOS 6がリリースされた直後)

4

1 に答える 1

0

はい、iOSでの厳密なサンドボックス化のため、制限があります。ここにいくつかの考えがあります。

代わりにQLPreviewControllerをサブクラス化することにより、UIDocumentInteractionControllerの機能をオーバーライドできます。次に、[開く]メニューを表示する標準のバーボタン項目を置き換えることができます。QLPreviewControllerをサブクラス化するための1つのソリューションについては、この投稿を参照してください。QLPreviewControllerUIBarButtonItemsを削除または追加します

もちろん、アプリ間共有の仕組みはほとんどあなたの手に負えないと思います。アプリが特定の種類のファイルを処理できるように登録されている場合、アプリは、必要かどうかにかかわらず、「開く」リストの選択肢の1つとして表示されます。そのリストに表示されるアプリをフィルタリングできるとは思いません。

これが私が考えたが試したことのない2つの実験的なアイデアです。

  • 渡そうとしているファイルのデータをbase64でエンコードし(バイナリをテキストに変換するだけです)、他のアプリの起動に使用するカスタムURLの一部としてデータを渡すことができます。次に、他のアプリは同じデータをbase64でデコードしてバイナリに戻すことができます。欠点は、URLの長さに制限があることです。つまり、送信する「ファイル」はかなり小さくする必要があります。

  • 次に、これが可能かどうかさえわかりませんが、ステガノグラッピーアルゴリズムを使用してドキュメントデータを画像内に埋め込み、それをカメラロールに渡すことができるかどうか疑問に思います。次に、他のアプリがカメラロールを開き、画像をデコードしてデータに戻すことができます。... うん。私は知っています...あいまいですが、実装しようとするのは楽しいかもしれません。;-)

それが役立つかどうかはわかりませんが、「助けていただければ幸いです」とおっしゃっていました。;-)

よろしくお願いします。

于 2012-09-22T06:15:59.047 に答える