1 00:00:02,100 --> 00:00:07,110 Wie Sie wissen, wird diese React Native-Anwendung jetzt mithilfe von expo erstellt. Wie ich zu Beginn des 2 00:00:07,110 --> 00:00:12,690 Kurses erwähnt habe, handelt es sich immer noch um eine reguläre React Native-Anwendung. 3 00:00:12,690 --> 00:00:19,170 Daher ist Expo nur ein zusätzlicher Wrapper, der viele praktische Funktionen bietet, die das Erstellen 4 00:00:19,170 --> 00:00:20,820 dieser App vereinfachen 5 00:00:20,820 --> 00:00:27,770 und wie eine Shell aussehen. Eine App, in der unsere App ausgeführt wird, wodurch das Aufrufen 6 00:00:27,780 --> 00:00:31,860 vieler nativer Gerätefunktionen einfacher und insbesondere einfacher einzurichten ist. 7 00:00:31,860 --> 00:00:37,380 Wie ich bereits zu Beginn dieses Moduls erwähnt habe, werde ich Ihnen in einem separaten Modul zeigen, 8 00:00:37,380 --> 00:00:40,590 wie Sie Nicht-Expo-Apps native Gerätefunktionen hinzufügen können. Wenn Sie jedoch 9 00:00:40,890 --> 00:00:46,170 keinen Grund haben, Expo nicht zu verwenden, würde ich dies tun Es wird dringend empfohlen, es 10 00:00:46,170 --> 00:00:53,400 zu verwenden, da expo, wenn Sie die Dokumente überprüfen, viele integrierte Funktionen und viele integrierte native Module enthält, die Sie verwenden können, sodass 11 00:00:53,400 --> 00:00:54,570 native Gerätefunktionen einfach 12 00:00:54,570 --> 00:00:56,460 hinzugefügt werden können und eine 13 00:00:57,090 --> 00:01:01,620 vollständige Liste angezeigt wird Hier gehen Sie zu den Dokumenten und dort zur API-Referenz. 14 00:01:01,620 --> 00:01:07,650 Hier sehen Sie eine Reihe von Dingen, die Sie zu Ihrer App hinzufügen können. Hierbei 15 00:01:08,070 --> 00:01:11,220 handelt es sich hauptsächlich um native Gerätefunktionen, die 16 00:01:11,340 --> 00:01:16,770 alle von expo standardmäßig bereitgestellt werden. Sie müssen also noch etwas installieren, müssen 17 00:01:16,770 --> 00:01:23,700 jedoch kein Handbuch erstellen Konfiguration und wie Sie beim Erstellen einer App ohne Expo-Modul sehen werden, müssen 18 00:01:23,790 --> 00:01:30,270 Sie möglicherweise einige Konfigurationen vornehmen, wenn Sie einer Nicht-Expo-App native Module und native Gerätefunktionspakete hinzufügen. Das 19 00:01:30,270 --> 00:01:32,560 ist also wirklich süß Hier. 20 00:01:32,650 --> 00:01:38,360 Jetzt möchte ich eine Kamera verwenden und tatsächlich gibt es ein Kamerapaket, das Sie hinzufügen können. 21 00:01:38,610 --> 00:01:42,510 Wir könnten das tatsächlich verwenden, um auf die Gerätekamera zuzugreifen. Dies 22 00:01:42,510 --> 00:01:43,620 ist perfekt, 23 00:01:43,620 --> 00:01:49,620 wenn Sie eine Anwendung erstellen müssen, die wirklich viel mit der Kamera zu tun hat, wenn 24 00:01:49,620 --> 00:01:55,440 Sie wie Instagram erstellen, wie eine Anwendung, bei der Sie die wirklich steuern möchten Der gesamte 25 00:01:55,440 --> 00:02:00,760 Kamerabildschirm und der gesamte Kamerafluss sind eigentlich nicht das, was ich hier machen möchte. 26 00:02:00,780 --> 00:02:02,960 Ich möchte die normale Gerätekamera verwenden, ich 27 00:02:02,970 --> 00:02:04,660 brauche dort nichts Besonderes, ich 28 00:02:04,740 --> 00:02:08,150 kümmere mich nur darum, ein Bild zu bekommen, das der Benutzer 29 00:02:08,230 --> 00:02:13,620 aufnehmen kann, und dafür bekommen wir tatsächlich die Bildauswahl. Dadurch können wir auch die Gerätekamera verwenden, aber 30 00:02:13,620 --> 00:02:16,200 wir können die Kamera nicht so stark anpassen, 31 00:02:16,200 --> 00:02:18,450 aber genau das brauche ich hier. 32 00:02:18,450 --> 00:02:25,050 Jetzt müssen wir nur noch diesen Befehl expo install ausführen, um Zugriff darauf zu erhalten. Dies entspricht im Übrigen der 33 00:02:25,170 --> 00:02:30,750 Installation von npm, stellt jedoch sicher, dass eine Version des Pakets installiert wird, die garantiert mit unserer 34 00:02:30,750 --> 00:02:38,070 spezifischen Version von funktioniert Expo verwenden wir in dieser App. Also kopiere ich einfach diesen Befehl und dann können 35 00:02:38,090 --> 00:02:45,530 wir in diesem Projekt expo install expo image picker ausführen. Drücken Sie die Eingabetaste und dies wird nun dieses Paket mit 36 00:02:45,530 --> 00:02:49,580 npm install hinter den Kulissen installieren. Dies ist, was es hier tut, 37 00:02:49,610 --> 00:02:55,880 nur in einer Version, die zu unserem Expo-SDK passt, das wir in diesem Projekt verwenden, und dies wird 38 00:02:55,880 --> 00:02:58,190 es jetzt installieren und das war's. Es 39 00:02:58,190 --> 00:03:00,410 ist keine zusätzliche Konfiguration erforderlich. 40 00:03:00,410 --> 00:03:02,800 Wir müssen keine Konfigurationsdatei berühren, wir müssen 41 00:03:02,810 --> 00:03:04,570 nichts anderes tun, dies stellt 42 00:03:04,640 --> 00:03:07,970 sicher, dass wir diese Funktionalität nutzen können und das ist 43 00:03:07,970 --> 00:03:09,690 natürlich sehr einfach. 44 00:03:09,770 --> 00:03:15,280 Damit können wir es verwenden und ich möchte es hier auf dem neuen Ortsbildschirm verwenden, wo wir die 45 00:03:15,350 --> 00:03:17,270 Texteingabe richtig haben. Dort möchte 46 00:03:17,270 --> 00:03:22,480 ich jetzt auch eine Schaltfläche hinzufügen, die der Benutzer drücken kann, um die Kamera zu öffnen. 47 00:03:22,490 --> 00:03:27,680 Natürlich haben Sie für all diese nativen Gerätefunktionen und auch für die vielen Funktionen, die wir in diesem 48 00:03:27,680 --> 00:03:32,660 Kurs natürlich nicht behandeln können, immer gelernt, wie Sie sie hier in Ihren offiziellen Expo-Dokumenten verwenden können. 49 00:03:32,660 --> 00:03:38,260 Dort haben Sie gelernt, auf welche Methoden und Eigenschaften Sie zugreifen können Dort finden Sie einige kurze Beispiele für viele 50 00:03:38,300 --> 00:03:43,220 Pakete. Das sollten Sie sich also unbedingt ansehen. Für die Kamera können Sie natürlich auch 51 00:03:43,220 --> 00:03:46,920 mitmachen, da wir sie hier zusammen verwenden, um ein Bild aufzunehmen. 52 00:03:46,970 --> 00:03:54,830 Ich werde tatsächlich eine neue Komponente erstellen, ImageSelector. js, Sie können es beliebig benennen, in 53 00:03:54,830 --> 00:04:05,810 das ich React from React importiere und in das ich eine Ansicht und eine Schaltfläche sowie einen Text aus React Native und 54 00:04:06,290 --> 00:04:11,710 natürlich auch das Stylesheet importiere, weil ich meine Bildauswahl formatieren möchte. 55 00:04:11,870 --> 00:04:16,130 Nennen wir es eigentlich Bildauswahl, das gefällt mir, meine Bildauswahlkomponente. 56 00:04:16,790 --> 00:04:23,570 Hier ist die Bildauswahl dann natürlich eine reguläre Komponente, bei der ich einige 57 00:04:23,580 --> 00:04:31,290 Stile mit dem Stylesheet einrichten möchte. Methode erstellen und wo ich am Ende die Bildauswahlkomponente exportiere. 58 00:04:31,310 --> 00:04:37,510 Was wird nun hier in der Bildauswahlkomponente passieren? Am Ende werde ich hier eine Ansicht 59 00:04:37,780 --> 00:04:44,750 zurückgeben, die dann eine andere Ansicht enthalten sollte, in der ich eine Vorschau des Bildes anzeigen kann. 60 00:04:44,770 --> 00:04:50,500 Dort möchte ich also die Textkomponente haben, in der ich sage, dass noch kein Bild ausgewählt wurde. Dies ist mein 61 00:04:50,530 --> 00:04:52,840 Fallback-Inhalt, wenn noch kein Bild ausgewählt wurde. Andernfalls 62 00:04:52,930 --> 00:04:54,920 wird ein Bild angezeigt, sodass wir 63 00:04:54,940 --> 00:04:59,700 auch die Bildkomponente aus importieren müssen Reagieren Sie auf Native und unter dieser Ansicht füge ich eine 64 00:04:59,710 --> 00:05:09,180 Schaltfläche mit dem Titel "Bild aufnehmen" hinzu, auf der ich die Farbe auf "Farben" setzen möchte. Stellen Sie daher sicher, dass 65 00:05:09,190 --> 00:05:17,410 Sie diese Farben konstant importieren. Beim Drücken möchte ich die 66 00:05:17,500 --> 00:05:27,530 Kamera öffnen und dem Benutzer anzeigen. Also werde ich hier auch eine Konstante hinzufügen, einen Bildhandler nehmen und das ist 67 00:05:27,530 --> 00:05:29,480 eine Funktion, die die Kamera 68 00:05:29,480 --> 00:05:33,140 öffnen sollte und die ich an diese Schaltfläche binden werde. 69 00:05:33,170 --> 00:05:42,470 Jetzt wäre ein bisschen Styling schön. In dieser äußeren Ansicht füge ich einen Stil der Bildauswahl hinzu. In 70 00:05:42,800 --> 00:05:45,860 dieser inneren Ansicht, in der eine Vorschau 71 00:05:45,860 --> 00:05:55,020 meines Bildes angezeigt wird, füge ich einen Stil der Bildvorschau hinzu. Dann könnte dieser Text hier auch gestylt werden, aber ich brauche dort eigentlich keinen 72 00:05:55,020 --> 00:06:02,910 speziellen Stil und natürlich möchte ich auch hier ein Bild ausgeben und ich werde bald eine if / else-Bedingung hinzufügen, um nur entweder den 73 00:06:02,910 --> 00:06:05,120 Text oder das Bild und 74 00:06:05,270 --> 00:06:09,030 dies anzuzeigen sollte auch einen Stil von vielleicht nur Bild bekommen. 75 00:06:09,030 --> 00:06:13,620 Jetzt haben wir drei Stilkennungen, die wir dem Stylesheet 76 00:06:13,890 --> 00:06:17,440 hinzufügen müssen. Wir erhalten die Bildauswahl 77 00:06:17,610 --> 00:06:22,440 für die Gesamtkomponente, die Bildvorschau und dann das Bild selbst. 78 00:06:22,440 --> 00:06:28,560 Das Bild selbst ist einfach, da möchte ich nur eine Breite von 100% und eine Höhe von 100% 79 00:06:28,560 --> 00:06:32,670 einstellen, damit es die volle Breite und Höhe des umgebenden Vorschau-Containers einnimmt. 80 00:06:32,670 --> 00:06:36,750 Dieser Container kann dann natürlich konfiguriert werden, wie auch immer Sie ihn konfigurieren 81 00:06:36,870 --> 00:06:41,550 möchten. Ich gebe ihm eine Breite von 100% und eine Höhe von 200 Pixel, aber natürlich 82 00:06:41,550 --> 00:06:47,880 können Sie dies ändern oder dynamisch mit der Dimensions-API berechnen. Fügen Sie einen Rand am unteren 83 00:06:47,880 --> 00:06:55,400 Rand von 10 hinzu und stellen Sie sicher, dass mein Platzhaltertext tatsächlich zentriert ist, 84 00:06:55,400 --> 00:06:59,470 indem Sie hier das Inhaltszentrum ausrichten und die 85 00:06:59,730 --> 00:07:08,460 Elementmitte ausrichten. Außerdem füge ich hier einen Rand mit der hellgrauen Rahmenfarbe und der Randbreite von hinzu 86 00:07:08,460 --> 00:07:09,500 einer. 87 00:07:09,720 --> 00:07:15,270 Nun, für die Bildauswahlkomponente im Allgemeinen werde ich dies so einstellen, dass die Elementmitte ausgerichtet wird, 88 00:07:15,270 --> 00:07:19,020 um sicherzustellen, dass alle Elemente horizontal zentriert sind. Jetzt 89 00:07:19,080 --> 00:07:22,910 sind wir alle hier, um die Gerätekamera wirklich zu öffnen, oder? 90 00:07:23,010 --> 00:07:28,680 Bevor wir hier etwas anderes in Bezug auf die Vorschau usw. tun, 91 00:07:28,700 --> 00:07:40,720 stellen wir sicher, dass wir hier im Take Image Handler die Kamera tatsächlich öffnen, und importieren wir dafür alles als Bildauswahl aus der Expo-Bildauswahl, also aus 92 00:07:41,500 --> 00:07:48,460 dieser Paket, das Sie gerade installiert haben. Da ich hier und auch für die Komponente die 93 00:07:48,490 --> 00:07:54,360 Bildauswahl verwendet habe, kommt es zu einem Namenskonflikt. Daher werde ich diesen Bildwähler hier benennen, 94 00:07:54,390 --> 00:07:59,860 um diesen Namenskonflikt zu vermeiden, der sonst zu Problemen führen würde. Ändern Sie ihn 95 00:07:59,920 --> 00:08:02,910 auch hier beim Export von Kurs. 96 00:08:02,920 --> 00:08:06,610 Jetzt, da der Bildwähler hier importiert ist, können wir ihn hier 97 00:08:06,610 --> 00:08:07,700 verwenden, den Bildwähler, 98 00:08:07,840 --> 00:08:10,930 und dort können wir die Startkamera als asynchron bezeichnen. 99 00:08:10,960 --> 00:08:13,810 Sie können stattdessen auch die Galerie öffnen, 100 00:08:13,810 --> 00:08:18,000 wenn Sie möchten, aber hier rufe ich die Startkamera asynchron auf. 101 00:08:18,140 --> 00:08:25,070 Dies öffnet nun die Gerätekamera und der asynchrone Teil hier impliziert, dass dies eine asynchrone 102 00:08:25,070 --> 00:08:26,120 Operation ist. 103 00:08:26,120 --> 00:08:31,550 In der Tat gibt dies ein Versprechen zurück, das sinnvoll ist, da es die Kamera öffnet und 104 00:08:31,550 --> 00:08:33,740 wir nicht wissen, wann der Benutzer 105 00:08:33,740 --> 00:08:39,920 mit der Aufnahme des Bildes fertig ist. Daher wird nur eine Funktion registriert, die ausgeführt werden soll, sobald der Benutzer 106 00:08:39,920 --> 00:08:44,930 fertig ist und aufgelöst wird das Versprechen, diese Funktion auszuführen, sobald dies geschieht, wenn der 107 00:08:44,930 --> 00:08:51,400 Benutzer fertig ist oder natürlich auch, wenn der Benutzer abbricht. Wir können das alles und das Ergebnis behandeln und 108 00:08:51,400 --> 00:08:57,450 so weiter. Lassen Sie uns jetzt sehen, ob das funktioniert, und dafür die Bildauswahlkomponente in den neuen Ortsbildschirm aufnehmen. 109 00:08:57,490 --> 00:09:03,670 Dort können wir also die Bildauswahl importieren und hier natürlich diesen Namen 110 00:09:03,670 --> 00:09:10,960 verwenden, da wir hier nicht das Bildauswahlpaket verwenden. Importieren Sie das aus Komponenten, aus der Bildauswahlkomponente 111 00:09:10,990 --> 00:09:17,780 und fügen Sie diese Bildauswahl hier unter unserer Texteingabe hinzu als selbstschließende Komponente wie diese. 112 00:09:17,800 --> 00:09:22,300 Wenn wir das speichern, schauen wir uns das an. Hier, dieser Text und 113 00:09:22,320 --> 00:09:27,720 so weiter, der nicht richtig positioniert ist, darüber müssen wir uns jetzt keine 114 00:09:27,720 --> 00:09:35,930 Gedanken machen. Drücken wir stattdessen auf Bild aufnehmen und Sie werden sehen, dass nichts passiert, aber dann bekomme ich eine 115 00:09:35,960 --> 00:09:45,360 Warnung - fehlende Kamera oder Kamerarolle Erlaubnis. Wenn ich es auf Android versuche, werde ich dort gefragt, ob ich Berechtigungen erteilen möchte. Ich muss hier auf Zulassen drücken und 116 00:09:45,360 --> 00:09:51,240 damit öffnet sich die Kamera. Das ist also gut, es funktioniert im Allgemeinen, 117 00:09:51,240 --> 00:09:52,450 ich kann es 118 00:09:52,470 --> 00:09:56,790 verwenden, ich kann diese Taste drücken und dann das aufgenommene Bild bestätigen, aber 119 00:09:57,090 --> 00:10:04,440 unter iOS funktioniert es nicht und warum ist das so? Nun, unter iOS haben wir hier einen Berechtigungsfehler erhalten, 120 00:10:04,480 --> 00:10:05,260 und 121 00:10:05,320 --> 00:10:10,810 das passiert einfach, weil Berechtigungen wichtig sind, aber unter iOS und Android unterschiedlich funktionieren. 122 00:10:11,500 --> 00:10:12,100 Unter 123 00:10:12,100 --> 00:10:18,600 Android werden Sie Berechtigungen auch im Voraus einrichten. Da wir diese Expo-Anwendung verwenden, in der expo diesen Wrapper bereitstellt, führt expo 124 00:10:18,600 --> 00:10:26,440 tatsächlich alle diese Berechtigungen durch, die für uns eingerichtet und angefordert werden. Für iOS funktioniert das Berechtigungssystem 125 00:10:26,440 --> 00:10:28,310 etwas anders. 126 00:10:28,360 --> 00:10:34,390 Sie richten es nicht wirklich so ein, dass Sie eine Konfigurationsdatei haben, in der Sie alle Berechtigungen im Voraus 127 00:10:34,390 --> 00:10:34,900 definieren, 128 00:10:34,900 --> 00:10:38,540 und das war's, stattdessen müssen Sie zur Laufzeit um Erlaubnis bitten. 129 00:10:38,590 --> 00:10:43,040 Nebenbei bemerkt, in einigen Android-Versionen sollten Sie das jetzt auch tun. 130 00:10:43,210 --> 00:10:49,600 Wie Sie sehen, funktioniert die Ausstellung immer noch für Sie. Für Android funktioniert das also so. Unter iOS 131 00:10:49,600 --> 00:10:56,050 müssen Sie den Benutzer um Erlaubnis bitten, auf die Kamera zugreifen zu dürfen, und das müssen wir einfach 132 00:10:56,050 --> 00:10:59,890 tun hier und wir können es mit Hilfe eines anderen 133 00:10:59,890 --> 00:11:02,680 Expo-Pakets tun und das ist das Berechtigungspaket. 134 00:11:02,710 --> 00:11:08,890 Sie müssen dies auch mit diesem Befehl hier in Ihrem Projekt installieren, damit Sie den Benutzer nach 135 00:11:08,890 --> 00:11:10,230 Berechtigungen fragen können. 136 00:11:10,420 --> 00:11:12,640 Lassen Sie uns dies hier im 137 00:11:12,640 --> 00:11:19,570 Projekt tun. Lassen Sie uns die Expo-Installations-Expo-Berechtigungen ausführen. Dies ist wiederum nur dieser Wrapper um npm install, um die Berechtigungen für dieses 138 00:11:19,570 --> 00:11:26,050 Projekt zu installieren oder dieses Paket für dieses Projekt und dann in der Image-Auswahl zu installieren, bevor wir versuchen, die 139 00:11:26,050 --> 00:11:33,580 zu starten Kamera und Öffnen der Kamera müssen wir um Erlaubnis bitten. Dafür füge ich hier tatsächlich 140 00:11:33,580 --> 00:11:41,260 eine neue Konstante hinzu, erhalte oder überprüfe Berechtigungen und dies ist eine Funktion, 141 00:11:41,430 --> 00:11:47,310 die eine Funktion enthält, die dieses neu hinzugefügte Berechtigungspaket verwendet. 142 00:11:47,310 --> 00:11:52,050 Also importiere ich hier alles als Berechtigungen aus Expo-Berechtigungen, also die gleiche 143 00:11:52,050 --> 00:11:55,280 Art von Import, wie wir sie für 144 00:11:55,590 --> 00:12:00,420 die Bildauswahl haben, und dort können wir Berechtigungen verwenden und asynchron fragen. 145 00:12:00,420 --> 00:12:06,270 Auch dies ist eine asynchrone Aufgabe, die ein Versprechen zurückgibt, da dies eine Eingabeaufforderung öffnet und bevor 146 00:12:06,270 --> 00:12:08,810 der Benutzer eine Antwort ausgewählt hat, nichts 147 00:12:08,820 --> 00:12:14,760 passiert. Daher haben wir ein Versprechen, das aufgelöst oder abgelehnt wird, sobald der Benutzer bestätigt oder abgelehnt hat. 148 00:12:16,560 --> 00:12:20,090 Hier müssen wir also genauer angeben, welche Berechtigung wir benötigen, 149 00:12:20,100 --> 00:12:27,270 also übergeben wir etwas, um asynchron zu fragen, und das ist eine Konstante, die wir vom Berechtigungsobjekt erhalten, das wir hier importieren. 150 00:12:27,660 --> 00:12:33,630 Mit der Punktnotation hier können wir auf verschiedene Arten von Berechtigungen zugreifen. Hier sind alle diese 151 00:12:33,690 --> 00:12:36,660 großgeschriebenen Namen die verschiedenen Berechtigungen, die Sie 152 00:12:36,660 --> 00:12:41,660 anfordern können. Hier benötigen wir die Kameraberechtigung, da wir auf die Kamera zugreifen möchten. 153 00:12:41,710 --> 00:12:46,340 Wenn Sie auf die Galerie zugreifen möchten, ist dies übrigens die Berechtigung für die Kamerarolle. 154 00:12:47,850 --> 00:12:49,850 Jetzt gehe ich hier zur Kamera 155 00:12:50,700 --> 00:12:54,390 und wie gesagt, dies gibt ein Versprechen zurück. Ich möchte Async 156 00:12:54,420 --> 00:13:00,410 Wait hier verwenden, daher kann ich Async hier vor der Funktion hinzufügen und dann darauf warten und das 157 00:13:00,440 --> 00:13:01,500 Ergebnis erhalten 158 00:13:01,500 --> 00:13:06,470 und in einer Konstanten speichern Die Alternative dazu wäre, dann zu verwenden und dies zu 159 00:13:06,780 --> 00:13:14,010 erfassen, und dort können wir jetzt prüfen, ob das Ergebnis vorliegt. Status ist nicht gleich gewährt, was bedeutet, dass der Benutzer abgelehnt 160 00:13:14,010 --> 00:13:16,210 hat, der Benutzer keine Berechtigungen erteilt 161 00:13:16,290 --> 00:13:18,770 hat. In diesem Fall können wir nicht fortfahren. 162 00:13:18,780 --> 00:13:25,590 Hier werde ich dann tatsächlich eine Warnung auslösen, also eine Warnung 163 00:13:25,590 --> 00:13:40,420 aus React Native importieren und eine Warnung auslösen, in der ich Warnung sage. Warnung, unzureichende Berechtigungen, Sie müssen Kamera-App-Berechtigungen erteilen, um diese App oder eine Ausgabe zu verwenden, die Sie anzeigen möchten, 164 00:13:40,480 --> 00:13:42,890 und dann füge ich hier 165 00:13:43,000 --> 00:13:49,690 eine Schaltfläche hinzu, auf der ich OK sage. Jetzt muss der Benutzer die Berechtigungen in den Systemeinstellungen 166 00:13:49,690 --> 00:13:55,000 ändern, nachdem er sie trotzdem abgelehnt hat. Daher können wir hier keine erneuten Berechtigungen anfordern, 167 00:13:55,000 --> 00:13:56,950 sobald sie abgelehnt wurden. 168 00:13:56,950 --> 00:14:02,950 Hier möchte ich also false zurückgeben, da dies die Funktion zum Überprüfen von Berechtigungen ist, und ich möchte false 169 00:14:02,950 --> 00:14:06,790 zurückgeben, wenn der Benutzer uns keine Berechtigungen erteilt hat. Andernfalls gebe 170 00:14:06,790 --> 00:14:10,080 ich true zurück, da wir jetzt wissen, dass wir 171 00:14:10,090 --> 00:14:14,920 Berechtigungen haben. Übrigens, wenn wir dies aufrufen Funktion mehrmals und der Benutzer hat bereits 172 00:14:14,920 --> 00:14:20,050 in der Vergangenheit Berechtigungen erteilt, wird dem Benutzer diese Eingabeaufforderung nicht erneut angezeigt. Dies gilt übrigens 173 00:14:20,050 --> 00:14:27,880 auch, wenn der Benutzer dies ablehnt. In beiden Fällen wird das Ergebnis automatisch von iOS gespeichert und diese Funktion wird nur Geben Sie true 174 00:14:27,880 --> 00:14:33,400 oder false zurück, je nachdem, ob der Benutzer in der Vergangenheit den Zugriff verweigert oder gewährt hat. 175 00:14:33,400 --> 00:14:37,350 Das Überprüfen von Berechtigungen ist jetzt einfach eine Funktion, die wir im Take Image 176 00:14:37,350 --> 00:14:40,590 Handler aufrufen müssen, bevor wir versuchen, die Kamera zu verwenden. 177 00:14:40,780 --> 00:14:46,600 Daher möchte ich hier auch das asynchrone Warten verwenden, da das Überprüfen von Berechtigungen natürlich eine Funktion ist, 178 00:14:46,660 --> 00:14:47,600 die ein 179 00:14:47,770 --> 00:14:55,080 Versprechen zurückgibt. Daher werde ich dies abwarten und das Ergebnis, das ich in einer Konstanten mit dem Namen "Berechtigung" speichern werde, speichern, da 180 00:14:56,100 --> 00:15:01,020 dies entweder wahr oder falsch ist abhängig davon, ob der Benutzer Berechtigungen erteilt hat oder nicht. 181 00:15:01,020 --> 00:15:05,580 Wenn dies falsch ist, wenn es nicht wahr ist, werde ich einfach hierher zurückkehren, ich werde nicht 182 00:15:05,580 --> 00:15:11,100 weitermachen, ich werde die Kamera nicht öffnen, weil ich das sowieso nicht tun darf, also können wir es einfach nicht weiter, 183 00:15:11,100 --> 00:15:11,580 das 184 00:15:11,580 --> 00:15:12,360 ist die Sache. 185 00:15:13,500 --> 00:15:17,910 Andernfalls können wir fortfahren und jetzt sollten wir auch unter iOS eine Kamera starten können. 186 00:15:17,940 --> 00:15:18,810 Probieren 187 00:15:18,810 --> 00:15:19,720 wir es aus, 188 00:15:19,830 --> 00:15:25,750 speichern wir das und jetzt, da es geändert wurde, deinstalliere ich die Expo hier, um 189 00:15:25,750 --> 00:15:29,530 sicherzustellen, dass die dort erteilten Berechtigungen wieder im Ausgangszustand sind. 190 00:15:29,640 --> 00:15:33,860 Sie müssen dies wahrscheinlich nicht tun, wenn Sie in Ihrer Expo-App nie Berechtigungen erteilt 191 00:15:33,900 --> 00:15:39,810 haben. Wenn Sie jedoch zuvor mit Berechtigungen und nativen Paketen herumgespielt haben, sollten Sie die Expo-App deinstallieren und anschließend neu 192 00:15:39,810 --> 00:15:44,870 installieren, indem Sie Ihre App unter iOS erneut ausführen, indem Sie i drücken in der Konsole dort 193 00:15:44,890 --> 00:15:47,910 unten, um sicherzustellen, dass alle diese Berechtigungen zurückgesetzt werden. 194 00:15:47,910 --> 00:15:53,220 Wenn wir nun zum neuen Wiedergabebildschirm gehen und auf Bild aufnehmen klicken, werde ich gefragt, ob 195 00:15:53,490 --> 00:16:00,120 ich Zugriff auf die Kamera gewähren möchte. Hier kann ich auf OK klicken, und jetzt wird dieser Fehler weiterhin angezeigt. 196 00:16:01,490 --> 00:16:07,420 Der einzige Grund dafür ist, dass, obwohl wir hier versuchen, auf die Kamera zuzugreifen, dies und 197 00:16:07,420 --> 00:16:12,450 das, was ich für dieses Paket weiß, Berechtigungen für die vollständige Kamerarolle erfordert. 198 00:16:12,450 --> 00:16:16,020 Ändern wir dies, um hier nach Berechtigungen für die Kamerarolle zu 199 00:16:22,830 --> 00:16:25,880 fragen. Gehen Sie zurück und klicken Sie auf Bild 200 00:16:25,880 --> 00:16:32,550 aufnehmen. Jetzt frage ich, ob ich den Zugriff auf Fotos zulassen möchte. Wenn ich jetzt auf Ja klicke, ist die Kamera 201 00:16:32,560 --> 00:16:37,710 nicht verfügbar Der Simulator, der jetzt ein anderer Fehler ist und ziemlich klar ist, was das 202 00:16:37,780 --> 00:16:43,510 Problem ist, der iOS-Simulator hat einfach keine Kamera. Also werde ich von nun an auf 203 00:16:43,510 --> 00:16:47,380 Android weitermachen, aber natürlich können Sie dies auf einem echten iPhone 204 00:16:47,380 --> 00:16:54,250 testen, um zu sehen, dass es dort auch funktioniert. Wenn Sie dort Ihren Expo-Barcode mit der Expo-App scannen und die App 205 00:16:54,250 --> 00:16:56,000 dort ausführen, wie Sie sie 206 00:16:56,050 --> 00:17:02,020 zu Beginn des Kurses gesehen haben, können Sie Bilder mit einem echten Telefon aufnehmen, und ich werde am Ende dieses Moduls 207 00:17:02,200 --> 00:17:05,750 auch die fertige App demonstrieren auf iOS- und Android-Geräten, auf realen Geräten. 208 00:17:05,890 --> 00:17:10,600 Im Moment werde ich mich also auf Android konzentrieren und dort konnten wir dies natürlich bereits öffnen. 209 00:17:10,690 --> 00:17:18,530 Ich werde hier noch einmal gefragt, aber jetzt kann ich das öffnen und ein Bild machen. Das ist natürlich schön, aber das Bild so aufzunehmen ist nicht alles, 210 00:17:18,530 --> 00:17:20,490 was ich tun möchte. Ich möchte 211 00:17:20,570 --> 00:17:24,590 auch konfigurieren können, wie ich es aufnehme, und ich möchte es verwenden können.