{"id":5517,"date":"2025-01-01T03:36:42","date_gmt":"2025-01-01T03:36:42","guid":{"rendered":"https:\/\/obsidiansofteducation.com\/?page_id=5517"},"modified":"2025-01-01T03:36:42","modified_gmt":"2025-01-01T03:36:42","slug":"camera-app-in-mit-app-inventor","status":"publish","type":"page","link":"http:\/\/obsidiansofteducation.com\/index.php\/camera-app-in-mit-app-inventor\/","title":{"rendered":"Camera App in MIT App Inventor"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Hello friends and welcome to Obsidian Soft,<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/snake20game2014.png\" alt=\"\" style=\"width:609px;height:auto\"\/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhm_dTQNbOMQr9PpHG_aidaB5yrFsS0JVdvJsFM_tqZIZLwJaCiHgcXPG_ITMNSZO0JHM8UR3O1PPExWqtMy0rFIvmOKyqjrOcIqtaEpChb4MzAKmHB9RtGcisYgsb5UOCtzdkaKXvkp-vV0zKv7jaG4bVFBRbROi75jTvOZBZd6O5anrzz0BAeT9vIRDw\/s1280\/snake%20game%20(14).png\" target=\"_blank\" rel=\"noopener\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In today\u2019s class, we will make a camera app using which we can take pictures. We will also add image viewing features to it so that we can look at all the images taken through our app\u2019s camera.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s begin. Start a new project and call it MyCamera.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First of all upload images for the camera button and first, previous, next, and last image buttons.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/cameraImg.png\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/firstBtnImg.png\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/lastBtnImg.png\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/nextBtnImg.png\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/prevBtnImg.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I downloaded the images from:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.freepik.com\" target=\"_blank\" rel=\"noopener\">https:\/\/www.freepik.com<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I also resized these images to be 50 by&nbsp; 50 pixels.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now, for screen 1 properties, make the background dark gray and the screen orientation portrait.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Make sure that the default file scope&nbsp; is \u201cApp\u201d<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Change the title text to My Camera.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Drag and drop an&nbsp;<strong>image<\/strong>&nbsp;from the&nbsp;<strong>user interface<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For the image properties, make height and width fill parent and make sure that \u201cscale picture to fit\u201d is checked.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Drag and drop a&nbsp;<strong>horizontal arrangement<\/strong>&nbsp;from the&nbsp;<strong>layout<\/strong>. Make align horizontal and align vertical both center. Make height 15% and width fill parent.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Drag and drop a&nbsp;<strong>button<\/strong>&nbsp;from the&nbsp;<strong>user interface<\/strong>&nbsp;inside this horizontal arrangement. Rename it to cameraBtn. And choose cameraIBtnImg from uploaded media as the image for this button. Remove text from it. Add a 1% width label with no text on the right of this cameraBtn. This is for spacing between the buttons. Duplicate cameraBtn by selecting it and pressing&nbsp;<strong>Ctrl + C and Ctrl + V<\/strong>&nbsp;for Windows or&nbsp;<strong>Command + C and Command + V<\/strong>&nbsp;for MacOS. Rename it to firstBtn. Change image to firstBtnImg. Again add space on the right of it using a 1% empty label. Similarly, add previousBtn, nextBtn, and lastBtn. You may have to change view to tablet mode for adding the lastBtn.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/v6yhL-EtcafWRTnCEee-kT8Yo2zLtip5exhr8wzkDSBb27CsrZokXw1L35gPx42j17vNFsUqwe93fjMYKVqDqVChN5MJL20-q-db8DtcdVDCK9Cuf9ZBuEzOpGjlNCYs9BOZyky6GJ4G1BERFxJKtzQ.png\" alt=\"\" style=\"width:604px;height:auto\"\/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Drag and drop a&nbsp;<strong>Camera<\/strong>&nbsp;component from the&nbsp;<strong>Media<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Drag and drop a&nbsp;<strong>TinyDB<\/strong>&nbsp;component from the&nbsp;<strong>Storage<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Screen Design is done.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your project components should look similar to this:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/fBDkMyQtKL_dBkEaanQXVMqU-Xpz0aXgbu-y1xwLSjf_rBjW87Wb_SdrsWeqs0cleqTRCD-NazW8bA9_hoqV6eZzXX1pAtXhcR-T4r3DHUPibkInw014qBSrJhtmv2CLK1a0Vukv1dc9T2zt0Va3Vmk.png\" alt=\"\" style=\"width:288px;height:auto\"\/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">And, your screen in the&nbsp;<strong>Viewer<\/strong>&nbsp;should look like this.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/WL7RwUqH5Q4INzpLAJyoxKNgwU8KIE6qpzgOqz1vyUZxYs0Qu1LRh61lUFavrXkxZJHFsU76l0cS9UJABxYCBprBQFEYYWA7cVzKQcdOvzBRhh7dkiEU8s6Wuc_gD5FxwX6Kfm2u-7UJnoRinx6BlG8.png\" alt=\"\" style=\"width:411px;height:auto\"\/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s work on the code now so go to the blocks section.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let me explain first how the camera component works in MIT App&nbsp; Inventor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We want our camera component to take a picture when the cameraBtn is clicked so get the click event for cameraBtn and call camera\u2019s TakePicture procedure.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/wync2NCKvl0zSSrXAaQBbpsJRPs5mm_7Dofn0soJaMHAUuRzQC4XchmQD3PJ_-yt-ewMc5TF_TZr7cmnK-UfVE-Dn5Ebwv-oqArAAuNkmF2S4pOseIRBJADUIDC_Oc3_lYyNHBC1z2HG8O-Qs_bNaDE.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Select camera1 again. You will see that it has an AfterPicture event. Drag and drop it too in your blocks.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/Wn8LytEQt_dCxcTxycqKLGdYa0qE5JbIJlPz6HPdKOKQ57Wq_-VIbsg-OA5Y68PSIXWKuL3gyikaJzHX3eJ4xEJaEYYbFH5-02emj_sKBOWEgD7mFmMwIpS1uu2qOcSSV0plg9dwkxlTm8o3b9kJtn4.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The AfterPicture event gives us an image but don\u2019t be confused. This is not an image but the address or location of where the image is.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What we are going to do is that after each picture is taken by our camera, we will store the picture\u2019s location inside our imagesList.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hence, we need a global variable for our imagesList which again I will reiterate is not a list of digital pictures but instead the location of those pictures.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/vo62u8VdXydTgheGqGQYWtt7iQH5wysiwDKsl8BeXBkiY-rjPs5KC8hOzy1bB-MgKnlVCQk6dxd6M9NPruyb23WkumOPdtTPs2ZdRQ4nfqM2jz-5n24tMVCwmglAnWDr7FDZnwoKgZYrRRiK1R4ZZRw.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We also need a global variable for maintaining the index or position within this list so that we know which image should be shown when the next, previous, first, or last button is clicked. Initialize it to 1.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/1QqqMEoZOuz5Y1JezcC60C7jLzkK_R-Ixv-n2jOQ54uv5Ac9XJtMdUQ5nCfrfEtx9D7vKkHdqF6AiuAXbvmDP1kBHq8lpueCnr3yXtx3rHY2ByPBco7ym9B9qCD7ZbIt0eZ7Ju6BbRavuiK2Zpo_16k.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Now, let\u2019s work on our Camera1.TakePicture event.&nbsp; We will store the new image address in our imagesList and we will further store this imagesList in the tinyDB so that whenever we start the app, we are able to see our previous images.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/ha1gtEvqVBjyR5OeeBFyb3LDHDPufLf-NaEPkbidTyV75z65EgFZtZZ6HG67hDFQGlcS8ROIqWKLImggNgioepnaaASw7WAbdWUi9BXcbd1W78qOps0mxN3WLUmaxap3oRCnc4LRpn66Ygizn7DI7mo.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Next, within the same event, we want to update the index to the size of imagesList and set our image component\u2019s picture value with the image at that index.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/MOeeFHW0yaFh26ofTNvihb5sOvLOcpI-OHSwBjex6jhq8TVN6vEfBs4KLpjTPvIqO7I7fGGGAFPbJHZZxcfTHWOB0xx7xR-QJPLJDhVDX0dUHSotySrMgAlGHPWgZQzZiyCA1ZhAkeU3s2e408g9Cvo.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We are going to make a procedure for setting the image component\u2019s picture value.&nbsp; The picture value will be loaded with the actual digital picture at that location and this way shown to the user.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/zC-hvg8mh_bn0FuZxq5WS3KZJWcdbmnZX9kA20SNK5UzxEC-2s5Dh5JwEeOBNLWIzoHloCR0uoQ3T3w1d7Tq4tk2dExo0BW7eJRjIIdcH0XzLm5jfut7qbOGS0kbrcK1KY1FBxHpfyazVCvi01u7O_4.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Now, call this procedure from the AfterPicture event.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our final AfterPicture event will look like this:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/zFuTuKPkbXOb30UMhtA5ublBVFiztLx4upF6YKoNiOOfAbQQtWuKV038JKSybJx5W0WvAet70DINGakRWQ4VTPTCp7Il9FaTzmPx80iCVm_CAA-CFCcLX0RMo0H9Lx4xYj1aYNktjqKwf2Iej48BxkE.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Now, let\u2019s work on our screen initialize event. When the screen is initialized, we should get the images\u2019 locations from tinyDB.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the list length is greater than 0,&nbsp; we will show the picture at the index = 1 when the app is started i.e. the first image otherwise we will call TakePicture because this means that no pictures have been taken with our app so far.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/KkVDoU9df6wgSa45lLRU0kyIIhk3OMu2HLzG7WPMSZPigNRcXd0vGBWQAXG6yY1A3r5kK5HYPPYxU6NahpNkvOT2HTtPaAiMM7RU3TmsT2w08WccH1pdLBNhLED3w4iVP_3Ef0GYHF9AVm5xGMrYBMA.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Another important thing to do for Android devices is to rotate the image 90 degrees. You don\u2019t have to do this for iPhones.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/l3lyvH8e1mScGg8RIoC0l-BbNpxA6e-Nfxtwi6sWNNsohCC1_wBzFRU0ZfPDmCJ0bvElxTrbRUlIE5A7gx9wfE86TUk2icER8Jg-elgwaaG8d3YP52ibQC9lCo2R2hp9scddLpTkWyCw_AOr3LwnMM.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Now, let\u2019s work on our position buttons.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The First button will show the image at index =1<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/OjYn7dhsLsaF2YV_HL3mxz2YfDuB34EhNkWcOzWc2qsXSgy53Q8Q1uOsqEOVMCD-sMQnULsbWp-jbH4-x-3UclHCKbHCyW62CmsgSBCflX9493K5KbDA2YvRJX0g4URPu3CkE8xZwx74cEi3Gk0bb8Q.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The Last Button will show the image at index = length of imagesList.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/bNfBDlmQ68UCXqBLinlgrj1MDiXHlgIs_NJCA-41KiudmtIeYhgC2vW2qOtprksj-G4SruY4ZzGSYV01Jm8gdZdXHXSEHbl0HXCxsEm0ONSrDbR4OyqHwBNawXr1lfuFbwOhuT5Yi1ODLP9dFKrsQAA.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The Next button will add a 1 to the index but before showing the image we will check if the index has become greater than the length or size of imagesList. If it has then this should be not allowed as it will give an error because we are trying to access an index that doesn\u2019t even exist in our imagesList( index out of bounds error) so we will put it back to the length of imagesList. In the end we will call showPicture procedure.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/A_WfouE2C-u85-UCQ22U3zrACoHY2BWjr2fyJtw_LdoF3Mao9B1Cic3kgX4ZAjmUq5Jo9Af1dFrWDelX0F2qfn3-byN9bcr5CSY_ZsTQOLiriqsK21QlB3KFUO_guxecB8e9wLCPodr52Ityzc4s8z8.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The previous button will subtract a 1 from the index but before showing the image we will check if the index has become less than 1. If it has, we will put it back to 1 to avoid an index out-of-bounds error. In the end, we will call the showPicture procedure.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/Fw_P5h0lnabczGltvNV3QQin__S0r8pRm8ObuprFNFVKHEZf31YLXqL2pQTw8cka-AS7npdq6Ii-Dup2e1lTgcz8ng925uuYBsklcTlOaJgxPXrtSQEztAwWTK-kxCSTwXgXSC68z9H0t521PVUAkE8.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">So, we are done. This app will work for both iPhone and Android.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you like my tutorials, consider supporting me:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><a href=\"https:\/\/obsidiansoft.gumroad.com\/l\/cxdft\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"372\" height=\"196\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/donate-button-1.png\" alt=\"\" class=\"wp-image-5381\" style=\"width:202px;height:auto\" srcset=\"http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/donate-button-1.png 372w, http:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/donate-button-1-300x158.png 300w\" sizes=\"auto, (max-width: 372px) 100vw, 372px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">You can also download the project file i.e. the aia file from below:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><a href=\"https:\/\/drive.google.com\/file\/d\/18dQ6_77BmXEjVTgdp6WGuFg45oi1DsNv\/view?usp=sharing\" target=\"_blank\" rel=\"noopener\">My Camera App<\/a><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The video tutorial is here:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<p class=\"responsive-video-wrap clr\"><iframe loading=\"lazy\" title=\"MIT App Inventor Camera | No Extension | MIT App Inventor Photo Viewer | View Camera Photos #camera\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/1ZyHx6EZVLs?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Please like my videos and share it with your friends and family. Also, subscribe to my channel and press the bell icon so you don\u2019t miss any of the great projects I have planned for you.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.youtube.com\/c\/obsidiansofteducation\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/c\/obsidiansofteducation<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Please like my Facebook page and Instagram page for more educational resources and tips.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Facebook:<\/strong><a href=\"https:\/\/www.blogger.com\/blog\/page\/edit\/4947000819484484884\/7140650632339107612#\" target=\"_blank\" rel=\"noopener\">&nbsp;https:\/\/www.facebook.com\/ObsidianSoft\/<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Instagram:<\/strong><a href=\"https:\/\/www.blogger.com\/blog\/page\/edit\/4947000819484484884\/7140650632339107612#\" target=\"_blank\" rel=\"noopener\">&nbsp;https:\/\/www.instagram.com\/obsidiansoftapps\/<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pinterest:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-pinterest wp-block-embed-pinterest\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"oceanwp-oembed-wrap clr\"><iframe loading=\"lazy\" title=\"Obsidian Soft\" src=\"https:\/\/assets.pinterest.com\/ext\/embed.html?grid=obsidiansoft&#038;src=oembed\" height=\"900\" width=\"450\" frameborder=\"0\" scrolling=\"no\" ><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">For links to free educational apps, have a look at the\u00a0<a href=\"https:\/\/obsidiansofteducation.com\/index.php\/mobile-apps\/\">educational apps page<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello friends and welcome to Obsidian Soft, In today\u2019s class, we will make a camera app using which we can take pictures. We will also add image viewing features to it so that we can look at all the images taken through our app\u2019s camera. Let\u2019s begin. Start a new project and call it MyCamera. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-5517","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"http:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages\/5517","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/comments?post=5517"}],"version-history":[{"count":1,"href":"http:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages\/5517\/revisions"}],"predecessor-version":[{"id":5519,"href":"http:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages\/5517\/revisions\/5519"}],"wp:attachment":[{"href":"http:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/media?parent=5517"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}