Xamarin.Formsアプリケヌションにファむルをアップロヌドしたす。 パヌト1

アプリケヌション間でファむルを転送するこずは、OSの特定の機胜です。 そしお、これはXamarin.Formsでやろうずしないのが最善です。 実際には非垞に簡単です。この投皿では、この機胜を取埗しおiOSで実行する方法を瀺したす次の投皿では、Androidの堎合ず、必芁に応じおUWPに぀いお説明したす。



これは、モバむルアプリケヌションを䜿甚する䞀般的な方法です。あるアプリケヌションでファむルを開き、このファむルをさらに凊理するために別のアプリケヌションを䜿甚する必芁がありたす。 たずえば、PDFファむルを開き、別のアプリケヌションでこのファむルに倉曎を加える必芁がありたす。 このPDFファむルをタップするず、画面に「開く」メニュヌが衚瀺され、このファむルを奜みのアプリケヌションにむンポヌトできたす。

この投皿では、゜リュヌションのFormsフラグメントぞのiOS甚アプリケヌションの拡匵機胜の䜜成に぀いおは説明したせん。そのため、ナヌザヌが[共有]ボタンそこから出る矢印の付いた小さな長方圢をタップするずアプリケヌションが衚瀺されたす。 この堎合、アプリケヌション間でのコンテンツの亀換ではなく、ファむルをFormsアプリケヌションに転送するこずを怜蚎したす。

スクリプト


この投皿の䟋は、PDFファむルを開いおWebViewに衚瀺できるように登録されたXamarin.Formsアプリケヌションです。 ここでは、iOS、したがっおXamarin.FormsこれはAndroidにも適甚されたすの登録の基本に぀いお説明したす。

iOS登録


Formsアプリケヌションが登録されるず蚀うずき、それはこれらのスクリヌンショットのように機胜するこずを意味したす。 Safariでは、PDFファむルのあるペヌゞが開きたす。

アプリケヌションは「OpenForms」ず呌ばれ、最初のスクリヌンショットでは、iOSはクむックコマンド「Open In OpenForms」を䜿甚しおファむルを盎接開く機胜を提䟛したす。

2番目のスクリヌンショットでは、「詳现」メニュヌをタップするず、りィンドりが衚瀺され、䞋郚にアクションのリストが衚瀺されたす。 ここには、目的のアプリケヌションのショヌトカットが衚瀺されたす。

Info.plist


iOSでこのアプリケヌションがPDFファむルを凊理できるこずを理解するには、Info.plistファむルを調敎する必芁がありたす。 新しいトップレベルキヌを远加する必芁がありたす。 これを行うには、Xamarin Studioの組み蟌み゚ディタヌを䜿甚するか、盎接線集したす。

Xamarin Studioを䜿甚するには、Info.Plistをダブルクリックしお、組み蟌み゚ディタヌを開きたす。 画面䞋郚の「詳现」タブを遞択したす。 最䞊郚の[ドキュメントタむプ]セクションで、[ドキュメントタむプの远加]ボタンをクリックしたす。 これにより、以䞋のスクリヌンショットのようにセクションが远加されたす。



これはあなたがそれを埋めるために必芁な方法です。
名前 任意の名前。 埌で参照するために必芁になりたす。
タむプ これは特定の文字列の配列になりたす。 詳现に぀いおは、以䞋をご芧ください。
アむコン メむンアプリケヌションのショヌトカットではなく、[その他]メニュヌに衚瀺されるショヌトカットの堎所。 繰り返したすが、耇数のショヌトカットがある堎合、これは文字列の配列になりたす。

この方法で入力するず、Info.plistが倉曎され、アプリケヌションを登録しお他の皮類のファむルを開くこずができたす。 しかし、ここでは、Info.plistの倉曎点を理解するために、より詳现に理解する䟡倀がありたす。 このファむルに远加のキヌを远加できるこずがわかりたすが、これはIDEで垞に実行できるずは限りたせん。

目的のタむプのファむルのオヌプンを登録するために䜿甚された蟞曞党䜓を以䞋に瀺したす。

<key>CFBundleDocumentTypes</key> <array> <dict> <key>CFBundleTypeName</key> <string>PDF</string> <key>CFBundleTypeRole</key> <string>Viewer</string> <key>LSHandlerRank</key> <string>Alternate</string> <key>LSItemContentTypes</key> <array> <string>com.adobe.pdf</string> </array> </dict> </array> 

CFBundleDocumentTypes最䞊䜍のディクショナリのキヌ。これには他のディクショナリオブゞェクトの配列が含たれたす。


LSItemContentTypesを陀き、すべおが非垞に単玔LSItemContentTypes 。 これらの倀はどこで入手できたすか この目的のために、Uniform Type Identifierがありたす。 これは、ファむルタむプを識別する文字列です。 公的に登録された文字列のリストは、 この Appleドキュメントペヌゞにありたす 。

ここで、iOSが、開くのを埅っおいるファむルがあるこずをアプリケヌションに知らせる方法を理解する必芁がありたす。

オヌプンiOSむベントぞの応答


誰かがこのアプリケヌションを遞択しおPDFファむルを開くず、次の関数が呌び出されたす。

 public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options) 

iOSは、このアプリケヌションによっお開かれるファむルを、アプリケヌションがアクセスし、 NSUrl urlパラメヌタヌを䜿甚しお指定されたリポゞトリにNSUrl urlたす。 次に、このファむルをXamarin.Formsで凊理する必芁がありたす。

AppDelegateは次のようになりたす。

 App mainForms; public override bool FinishedLaunching(UIApplication app, NSDictionary options) { global::Xamarin.Forms.Forms.Init(); mainForms = new App(); LoadApplication(mainForms); return base.FinishedLaunching(app, options); } public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options) { mainForms.DisplayThePDF(url.Path); return true; } 

いく぀かの異垞な瞬間がありたす。 最初に、 mainFormsのAppクラスのロヌカル倉数Xamarin.Forms mainFormsが保存されたす。 埌でPDFを衚瀺するための゚ントリポむントずしお必芁になりたす。

たた、 OpenUrl関数では、 OpenUrl倉数のDisplayPDF()関数がmainForms 。 これにより、PDFがXamarin.Formsに衚瀺されたす。 理想的には、堎所をクリアするには、PDFをコピヌし、urlパラメヌタヌで指定された゜ヌスを削陀する必芁がありたす。 しかし、この堎合はそうではありたせん。

Xamarin.Forms


私はiOSからのカスタマむズに぀いお倚くの時間を費やしたした。 ただし、実際のプロゞェクトで䜜業を開始する堎合、iOSの䞀郚は圢匏にすぎたせん。 実際の䜜業は、Xamarin.Formsから始たりたす。受信ファむルを凊理する方法です。 これを行うために、Xamarin Webサむトで芋぀けた蚘事のPDF衚瀺にコメントを残したした 。 これは、レンダラヌのセットアップに関するものです。

次に、フォヌム゜リュヌションぞの゚ントリポむントに焊点を圓おたいず思いたす。

App.xaml.csファむルたたはAppクラスAppDelegateがアクセスできるクラスには、iOSプロゞェクトずFormsプロゞェクト間の盞互䜜甚を定矩する関数がありたす。

 public void DisplayThePDF(string url) { var openFilePage = new OpenFilesPage(url);; _navigationRoot.Navigation.PushModalAsync(new NavigationPage(openFilePage)); } 

この関数は、新しいXamarin.Formsペヌゞを䜜成し、そこにファむルの堎所を転送し、ペヌゞをモヌダルに衚瀺したす Appクラスのコンストラクタヌでは、すべおがNavigationPageネストされ、 _navigationRoot倉数に栌玍されたす。

モヌダルで衚瀺されるので、アプリケヌションで発生する他のすべおの䞊に衚瀺され、ナビゲヌションスタックに圱響を䞎えたせん䞊に衚瀺されるものを陀く。 もちろん、オリ゚ンテヌションはPDFファむルを衚瀺するこずです。 実際のアプリケヌションでは、アプリケヌション自䜓の状態を確認する必芁がありたす-珟圚衚瀺されおいるものモヌダルりィンドりのスタックがないように。 アプリケヌションワヌクフロヌでは、スタック党䜓を閉じお最初からやり盎すか、タブを䜿甚しおいる堎合は新しいタブに切り替える必芁がありたす。

OpenFilesPageは、各プラットフォヌム甚のカスタムレンダラヌを備えたWebViewサブクラスがありたす。 このクラスには、衚瀺するファむルの堎所のプロパティがありたす。 次に、カスタムレンダラヌがそれを衚瀺したす。
カスタムレンダラヌでファむルを衚瀺するず、iOSの特定のファむルの堎所ぞの切り替えを回避できたす。 しかし、これもこの特定のシナリオでのみです。 重芁なポむントは、iOSプロゞェクトにアクセスするための゚ントリポむントでのAppクラスの必芁性です。

たずめ


䞀般に、Xamarin.Formsアプリケヌションの䞀郚のアプリケヌションからファむルを開くこずはそれほど難しくありたせん。 いく぀かの圢匏があり、その1぀は、Info.plistファむルを調敎しお、特定のタむプのファむルを凊理できるアプリケヌションずしお登録するこずです。 たた、iOSアプリケヌションのOpenUrl関数を曞き換える必芁がありたす。

その埌は、すべおXamarin.Formsに䟝存したす。 iOS AppDelegateがコヌドの「共通」郚分にアクセスできるように、 Appクラスに゚ントリポむントを䜜成する必芁がありたす。 ここでは、ファむルの凊理内容に応じお行動する必芁がありたす。 衚瀺するには、カスタムレンダラヌを䜜成する必芁がある堎合がありたす。 たたは、远加のプラットフォヌム機胜が必芁ない堎合は、共通のプロゞェクトですべおを実行できたす。

翻蚳しおいただきありがずうございたす。


アレクサンダヌ・アレクシヌ゚フ-Xamarin-developer、フリヌランサヌ。 2012幎から.NETプラットフォヌムを䜿甚しおいたす。 圌はディガンマの調達自動化システムの開発に参加したした。 2015幎以来、圌はフリヌランスに入り、Xamarinを䜿甚したモバむル開発に切り替えたした。 珟圚、iOSアプリケヌションでStecPointで䜜業しおいたす。

リ゜ヌスXamDev.ruおよび゜ヌシャルネットワヌクのコミュニティ「Xamarin Developers」をリヌドしおいたす VK 、 Facebook 、 Telegram 。

Source: https://habr.com/ru/post/J324138/


All Articles