 Very good afternoon to all. Everyone is listening or not? OK. So welcome to this whole Android session. Myself Ajay Babar working with team Akash. So I'll OK. The main goal of this whole Android workshop is to give you a small exposure to an Android so that you can quickly learn and start developing our application as fast as possible. And that is from the day one only, without wasting any time. So I'll quickly go through the overview of the whole Android session. So these minute topics we are going to cover in the next three hours. So first one is introduction to Android. So that is what I am going to take right now. Then how to build your first Android application? That is Hello World application. And what folder structure or what different folders are present in each Android project? That will be explained by Mithali. Then third one is the Android component. These are the basic building blocks, which includes the activities, services, broadcast receiver, and et cetera. So that will be explained by Arun. Different layouts we have in Android. And how to design your user interface or front end development. So that will be explained by Raya. And then fifth one is the SQLite database. In that, we will tell you how to store and retrieve the data from the database. So that will be explained by Tushar. In that, we will also have one good example using the SQLite database. And at the end, we have Android media. In that, we will tell you how to deal with the images. Basically, multimedia data. So how to play the audio files, video files. So that will be explained by Ninad. So let's start to the introduction to Android. Yeah, basically, this will be a theory kind of lecture. So yeah, I just wanted to ask that how many of you have developed the Android applications? Good. That means you know Java very well. OK. So let's start to the introduction to Android. OK, can anyone tell what is Android? So these many topics I am going to cover. So first one is introduction. Then brief history about the Android. Then Android version and the API level. So this is a very important topic as a developer to know. Otherwise, his application won't run on his device. OK. Then comparison of Dalvik Virtual Machine and Java Virtual Machine. So this is the reason why the Android is so much fast. That is because of Dalvik Virtual Machine. Then what out of the features Android provides us. And at the end, we have an application fundamental. In that, we'll have .apk file. What is it? What is the purpose of it? So all these topics I am going to cover. So let's see one by one. Is a Linux-based operating system specially designed for touchscreen devices, like smartphones, tablets, and et cetera. Initially, it was developed by the Android INC and later purchased by the Google in 2005. So Google started working on Android in 2005. And after three years, they came up with the first Android power device that is in 2008. Android is an open source. Now see, why Android is so much popular? Because of this reason, Android is open source. And Google releases its code under the Apache 2 license. Now what Apache 2 license says is that you derive your code from the original one, modify it according to your requirement, and redistribute it. So whatever this hardware manufacturer, what they do, like HTC, Micromax, Samsung, what they do, they just customize the Android according to their requirement and then redistribute it. So no licensing, no paying of royalty, nothing. So it involves zero cost. And because of this, the Android is so much popular. Then last one is the Google Play Store. You must have heard about this. So this is very nice place. You can download anything. Like if I want the games, business applications, school applications, you just need to think and you will have a app for it. Next. Yeah, this is just a brief history about the Android. So what different version came in which year? So in 2009, we had a cupcake to Eclair. Then in 2010, we had a Froyo gingerbread. And this is just a picture, a representation of Android versions. So if you have noticed that these are the alphabetical ordered names, ordered desert names. So C for cupcake, D for donor, D for Eclair. So I don't know what they made to keep these desert names. And that is also alphabetical order. Then in 2011, we had Honeycomb Ice Cream Sandwich. Then in 2012, Jelly Bean. In 2013, the latest current update. That is Android KitKat. So again, these are the picture representation. What is API? API in normal terms, API is an application programming interface that consists of lots of classes, lots of methods that you can actually use in your code. But why they need API level means why they need the revisions of API level. So definitely, whenever the new API comes into the market, there always be an additive change on existing one. So old won't be removed. It will be deprecated. So whenever you try it in an Eclipse editor and suddenly comes something like a strike-through on a class name or on a method name, that means that class or that method has been deprecated and you have something new available into the market that you can use. So I just wanted to emphasize on this because whenever the new API level comes into the market, that means you have something new available that you can use. Old won't be removed. So these API levels have been categorized into the three main groups. That is API level from 3 to 10, especially made for smartphones. Then API level 11 to 13 made for tablets. And after four onwards, Android is everywhere. Either it will be a tablet or it will be a smartphone. This is just for your reference. You can have a look later. So this shows the platform versions, their corresponding API levels, and the version name. So things marked in red. So Akash tablet uses these two versions. So some Akash tablet has Jelly Bean. Some Akash tablet has Ice Cream Sandwich. So that is Android 4.0.3 has API level 15. And its version name is Ice Cream Sandwich. So I have mentioned all the API levels, their corresponding version. So choosing an API level. So this is very important topic as a developer to know. So basically every developer must know which API level his device supports. So it totally depends on his device. Then what is application forward compatibility and application backward compatibility? So it's pretty logical. Suppose for example, I have a device with Android version 4.4, that is KitKat. And I compile my program using the Ice Cream Sandwich version. So definitely my program will run, right? Because I am working on a lower level version and I am running that program onto the higher level version. So definitely my program will run. But vice versa may not true. For example, I have a device with Android version 4.0, that is Ice Cream Sandwich. And I'm compiling my application using the Jelly Bean. So it may be possible that my application won't run. Because whenever I'm using that new API level, that is whenever I'm using the new thing, and I'm trying to running on old API level, definitely my application won't run. So this is about the application forward compatibility and backward compatibility. Understand which version Ice Cream Sandwich and Jelly Bean. And this can be found at main menu setting about tablet. Everyone, I think, know. Android is totally based on Java. But there are subtle difference between the Java and Android. So in Java, we have AWT and swing for a user interface. You know, right? But in Android, Android doesn't support the AWT and swing because we are talking about the touchscreen devices. It needs extensive touch functionality, right? So Android has its own library for user interface. In Java, we have a Java byte code and Java virtual machine. But in Android, we have a Dalvik byte code and Dalvik virtual machine. So I'll come to this point in the next slide. And what is Android Java? So what the Android people, what they did, they just removed the AWT and swing from the Java standard edition because we are talking about the touchscreen devices, right? So they removed the AWT and swing components from this Java standard edition. And then they added their own Android API and which forms the Android Java. So yeah, this slide shows the comparison between the Java program execution and Android program execution. So let's concentrate on the left-hand side diagram. So we have Java source code. Then Java compiler compiles this Java source code and we get the Java byte code. And then this executable code runs on the Java virtual machine. Clear? OK, let's look at the right-hand side diagram. What happens at the Android side? We have a Java source code. We have a Java compiler. We get the Java byte code. Now what happens? Dex compiler comes into the picture. Dex compiler again compiles this Java byte code into the Dalvik byte code. And this Dalvik byte code runs on the Dalvik virtual machine. Now the things that are marked in red, it's a new thing introduced by the Android people. So why they need Dex compiler, DVM, and all? So basically the Java byte code is very heavy code. If you try to decompile it, you will get everything right from your Java files, your resources, everything as it is. But we are talking about what the screen devices, that is smartphones, tablets. So what Dex compiler do? Dex compiler optimize this Java byte code into the several layers. And we get the optimized Dalvik byte code, which is a lightweight code. And that can run on Android devices. Because Android devices has limitations, like memory issues, power issues. So what Dex compiler does? Dex compiler optimizes this Java byte code into the several layers. And then we get the Dalvik byte code. So this is the reason why the Android is so much fast. So because of DVM. Understood? Now the differences between the JVM and DVM. So DVM is a register base, JVM is a stack base. So being an engineering student, you must know what is register base and stack base. So I am assuming this, OK. Then also I have one example for you. What is register base and stack base? So here I have a two figure. So upper one is the stack. Upper one is the stack based. And the lower one is the register base. So here I have my stack. And my stack pointer is on the top of the stack. And I wanted to add these two numbers. That is 20 and 7. So what happens here? I need four lines of instruction for adding just two numbers. That is pop 20, pop 7, add 27, store the result into the result, and push the result back to the stack. So I required four lines of instruction. But what about in register? In register base, I need only one line of instruction. That is add R3, R1, R2. R1 and R2 are my source. R3 is my destination. So you can see the figure that operand 5, operand 30, and I store the result 35 in R3. So I required only one line of instruction. Though my instruction length has been increased, but my number of instruction has been decreased. So in stack base, we require more instructions as compared to register base. So I'll come to the back slide. So this point is get cleared. Number of operation in DVM is fewer because it is register base. And for JVM, the number of instructions are more because it's stack base. Then file format. So we are talking about the Android. So it has a Dalvik bytecode that is .dx file. But in JVM, that is in Java. We have a Java bytecode and it has a .class file. You know that .class file is there after compiling the source code. So similarly, we have a .dx file in Android because we are using the Dalvik virtual machine. So it converts the Java bytecode into the Dalvik bytecode. So what Android features we have? So first one is application framework enabling reuse and replacement of component. What is it? See, in Android, the extensive reusability is possible. For example, suppose my application needs to open the camera, then click the picture, and that picture needs to save in gallery. So I don't need to write every line of code for accessing the camera, then clicking the picture, and then again saving back to my gallery. I don't need to write any single line of code because camera application will handle all that functionality. I just need to reuse that functionality and run it. So extensive reusability is possible in Android. So that was about enabling the reuse. Then Dalvik virtual machine, as I said, it is optimized for mobile devices. Then SQLite for structured data storage. So we will have a dedicated session on this. That is the permanent data storage. Then Android also supports the multimedia data like mp3 files, that is audio files, images, like GPG, PNG. And the remaining three are the hardware dependent. If your hardware manufacturer provides this functionality, then you can have this. Like GSM telephony, Bluetooth, 3G, Wi-Fi, camera, GPS, everything. What Akash Tablet has features. So Akash Tablet supports Jelly Bean, as well as some of Akash Tablet supports Jelly Bean, some of Akash Tablet supports Ice Cream Sandwich. Then optimized graphic support, Wi-Fi, camera, accelerometer, application fundamental. So what is APK file? APK is an application package file. It's a zip package format based on the JAR file format. So it's technically incorrect to relate the .exe file in Windows, like you have .exe file, which installs something on your machine. So similarly, in Android, we have a .apk file. But it's technically incorrect to relate .apk with .exe. So for just, for example, I said this. So it's a zip package format based on a JAR file format. So what APK holds? So it's a Java source file, means your Java code. Then resources. So what are the resources? Everything other than your code that are resources, like your images, your documents, like PDF files, everything that are resources. Similarly, with the assets. And then what is manifest file? Manifest file, I'll ask you again. What is it? Bus. Correct. Manifest file defines your application properties. For example, if I wanted, I said that suppose my application requires to open the camera. So I need to give the permission. Then only that kernel will understand, yeah, this application requires to open the camera. And he has given the permission into that manifest file. So one more example, yeah, suppose if I wanted to use the internet, then also I need to give the permission into the manifest file. So manifest file is a very important file in every Android project. So this is just for your reference. Yeah, I just wanted to tell you that these two links. Yeah, these two links. If you wanted to have Android video lectures, you can just go to these links and watch it. Okay, so you just take it down or laterally I will give you. Yeah, you can just note down, not a problem. Okay, now I'll call Mithali. She will tell you about how to build your first Android application and what different folders are present in Android project. Okay, thank you. These are the topics I am going to cover in my talk. That is what are the packages that are needed for developing an Android application. How to configure and how to create an Android project and what are the folder structure within a project. You need to have JDK 6 and above. You can get it from wrackle.com, the site. This is the site. You can download your package based on your bits of the operating system and what type of operating system you are using. Next, the Android SDK. You can get the Android SDK. This is the site. The operating system and the bit of the operating system you are using. You can download the SDK, the GIF file. After downloading, you will get GIF file, just unzip it. Unzip it, you will find a folder something like this. When you double click on it, you will find two folders. One will be the Eclipse folder and another one will be the SDK folder. When you double click on the Eclipse folder, you will find an Eclipse icon. When you double click on the Eclipse icon, its flash player will come up and the pop-up will come, will ask you to set the workspace. Just select the workspace you want to place your files and folders of your project. Otherwise, the Eclipse can by default set the path. Otherwise, you can browse according to your need and according to which folder you want to place your file. Just click on OK. So, here is the Eclipse editor where the actual development starts. Next, I will tell you how to configure the AVD. AD and AVD. Android SDK package by default provides AD that is an Android device simulator which is used to run an Android virtual device which emulates a real Android phone. AVD allows you to test your Android application on different Android versions and configuration without assist to the real world. In configuring AVD, you need to keep in mind the main factor that is speed optimization. You can do it in two ways by the use of Intel system image. That is, I will tell you practically. Go to window menu then Android SDK manager. It will take few seconds to start up. There is a package called Intel x86 atom system image. So, it is mentioned that here it is not installed. So, just check it. And Google APIs if you want to include any Google APIs in your project just check it and install the packages. It will take some time. If you are a window user, you need to install another package that is Intel x86 emulator oscillator. It is only for windows operating system. So, after some time it will get installed. The second way to optimize the spread is by the use of snapshot option or use host GPU option. To know this, we need to know how to create an Android virtual device. That is, you just go to window menu then Android virtual device manager. Then you just create a new AVD one. Suppose I write that is N10. Then the file size. Size of the SD card. Then here is the option to optimize the spread that is emulation option. There are two options. That is one is snapshot and another one is use host GPU. If I check the snapshot option, what it will happen that when you start the AVD for second or subsequent next time, it will resume the previous state. So, rendering becomes very fast. If I check the use host GPU option, it will use the graphics card of the host system and for which the rendering becomes very fast. At the time, I cannot check both of them. It will show a message. So, now I am starting the AVD. So, click on the launch. It will take few. Time to start. Yeah, it got start. Application. That is basically the hello world. So, go to the file menu. Just click on new option. Then others. Then click on Android application project. Click on next. You need to give an application name you want to create. I suppose give hello. Click on next. Then check the create costume launcher icon and create activity icon and check the create project in workspace. Then click on next. Then browse the image icon you want to keep as launcher icon. Suppose I browse it to hello world of PNG. Then you can set the background color you want. Click on OK. Next, just check the create activity. Then suppose I select the blank activity. Then click on next. The name of the activity will come. You can give your activity name any name you can want. Then click on finish. So, here is the project we have created. It is hello world of intense. So, coming to the next. That is what are the folder structure in a project, android project. That is src folder is there. GEN folder is there. Then assets folder is there. BIN folder is there. LIBS is there. RES folder is there. So, coming to the slide I will tell you. Src folder contains the Java source code file which a program need to write the application, the code he wants for the application. Then GEN file contains the auto generated file that is android Java file inside this folder which contains references for the resources that are being used in your project. RES file contains the resources that you want to use in your project like images, the XML configuration files. It contains also folders to keep resources based on the type. Like it differentiate the images file then differentiate the string values that you want to keep. The sub folder there is a folder, sub folder inside RES folder that is value folder. It is used to define string colors, dimension, style, static arrays of the integer string or integer. By convention each type is stored in different files. Like string files are stored in string dot XML file. There is another folder. V like values hyphen V11 or values hyphen V14. V11 means that it is using API version 11 and 14 means it is using API version 14. Then the animator folder contains animations, this folder contains animations in XML for the property animation API which allow you to animate arbitrary properties over time. Layout folder, sub folder contains layout that are being used in your applications. It contains various based on your screen size basically. That is if you choose default size it will be sub folder it will be layout. For small screen size you can choose there will be layout hyphen small. For large screen size there will be layout hyphen, layout hyphen large. Layout hyphen X large. Then for landscape orientation you can use extra large hyphen landscape land. Then for 7 inch tablet or for any tablet it is 600 DP. And for 10 inch that is 720 DP and for multi-pen it is 600 DP. There is another sub folder menu. This folder contains menu resources to be used in an application that is option menu, context menu, sub menu. Then there is another sub folder that is raw. It contains raw resources that are looked up by the resource IDs. Every object assigned with IDs that are stored in various resource files. For areas drawable there is another folder that is drawable. Drawable folder resources directories in an application that provides different bitmap drawable for medium, high and extra high density screens. For medium density you can choose there is MDPI. For high density it is HDPI and for extra high density it is XHDPI. And for no pre scaling it is no DPI. There is a folder that is a folder. All these are sub folders under RES file. And this is there is a folder LIBS. If you want to include any extra library file you want to place in your use in your project you can place that folder in this by default. If you browse it, browse through it and keep the XAR file in it. So it will be available in LIBS folder. Files and directories with no other capabilities. It is just an unstructured hierarchy of file allowing you to put anything you want there. And latter review as raw by stream. The main difference between RES and asset is that in asset you can have unstructured data stored. It is not viewed or accessible by android build system directly. But RES folder contains structured data which is directly accessible by android build system. In bin directory you will be having your apk files. Then android manifest.xml. This is a very important file in every application. You need to have this android manifest.xml file in the root directory. It contains essential information about the application to the android system. It contains information the system needs before running an application. It is just like a control file which describes the application permissions and the component about the components and nature of the components as well. It determines also which process will host the application component. It also describes the permission that other component needs in order to interact with other components of an android or within a component. It is like an intercommunication between component. So the permission is set over here. It declares the minimum label of android api that application requires. That's all. Thank you. Let's talk about android application components. So components of android what comes to your mind? A 5 megapixel camera, 8 megapixel camera, V5, a 5 inch display. Components. Come on, we all use smartphones, right? Everyone has an android phone. So these things come to our mind, right? That the android components can be everything basically. You guys are familiar with Hindi or South people are there. It's alright, I'm from South. It's pretty fine. Yeah, so basically from a developer's point of view. We are thinking, I'm an android developer. From a developer point of view, android application components means the small components and basically building blocks which we use to construct each and every application in android. So if we just name them, there are major four categories of them. One of us already told you activity services and stuff, so you might be familiar with these. So yeah, activities, services, broadcast receivers and content providers. These are like four major types of components in android. And there are a few more also, but we won't be like jumping into stuff. As I said, this will be just a brief about things. So yeah, these are like big names, right? Like content providers, broadcast receivers, oh my God, what are these? But to be frank, these are like really simple stuff which you guys use in your daily life. We all use applications in your touch screen devices these days. So let's jump into the first one and you'll be knowing what these are basically. So the first thing is activity and this is like the most important component in android. So activity is simply a user interface. So in any application, each and every UI that you see, every screen that you interact with is an activity. So let's take some examples like if I'm playing a game and I'm like interacting with the screen, it's an activity. I'm using my browser or viewing a map, using a chat app. All this is activity. So since I said every screen is an activity, you won't argue if I say that each and every application can have multiple activities. So let's imagine that we are creating an application. Like she just created a hello world of intern 2014. Okay, some application. So in that application, I want to create a UI basically, my first screen, let's say. So I want to create an activity. So the first thing I need to do is like jump into my manifest file. By the way, what is manifest file? Exactly, I can't hear what you're saying, but yeah, okay. You guys remember something at least. So basically in manifest file, we need to like mention what all things are there. Do we have activity services, permissions and everything. So since here we are interested in like creating an activity. So let's, I guess you can see the like these tags. So this is my simple XML file together. So there is an application tag over here, which is specific to my so-called app. So inside that I'll just go ahead and add a new tag named activity. That means I'm adding a new activity and there's a attribute name. So basically I'm specifying like I'm just giving some name for my activity. Let's call it example activity. So now my manifest knows that this app contains one activity named example activity. So once this is done, what I can do is I can go ahead and actually write an activity. So in my Java file, like she told you that there's a SRC folder. You have a Java file and stuff. So in my Java file, I'll create a class having the same name, which I had mentioned in my manifest. And now we'll extend this as activity. So basically there's a super class in Android named activity. So this tells Android, he boss, this example activity is a UI. It's an activity. It will have like click listeners and stuff onto it. So since we are like extending a super class, it's obvious that we can like override many of its... You guys are familiar with Java, right? So we need to override them. So most of them are optional basically, but few of them are important. Like you can see on create method over here. There is like on resume, on pause, on start destroy and lots of stuff. So basically these methods, which are like overrided like from the, what do you say, the activity super class can be like summarized as life cycle method. So each activity basically from its birth to its death goes through a life cycle. So basically states, okay? When it gets started, it is running, it is paused. You guys must be familiar with these things already. We basically have this activity life cycle. So basically it's basically, it's just showing how an app starts and how it completes its journey to its end basically. It feels like a movie. But yeah, let's take an example. Suppose I have a movie app. I like watching movies. So I start a movie. So basically I am seeing a movie. There's a interface, right? So it's an activity. So I'm watching my movie. So as in when I'll open it when the activity is launched, the on create, it is being created, right? So there is a method called on create. So inside that I'll write each and every initialization code and stuff like that, which I need to do at the startup basically. Then we have on start and stuff like that. Then imagine my app is running smoothly. I am watching a movie. I am enjoying it. And there is a really nice investing scene going on. I mean fighting scene obviously. But and that moment my friend just called me. For example. So what will happen? My phone will ring. Come on. Call is coming to me. Pause. Okay. By the way, it's right. So my movie will pause obviously. And why is it happening? Because there's a more important activity. Like it is coming in between. And it is like dude just get away. And there's a screen. It's coming up and saying your stupid friend is calling. And there's an image of your friend. Okay. So what happens to our movie activity? It is getting paused or in the background. So usually what happens if I'm playing a game and abruptly, it stops. So it might happen that I'm on the last level. And if I start again, it will start. So in that case, obviously I'll go and kill my friend. And I'll end up in a jail. Right. So thanks to on pause method. We can write specific code in that. So let's say there is another activity coming in between. While I'm playing a game. Then I can save the levels, save the score. So I'll do all these things in the on pause method. And then I'll tell the, the call activity, basically. Okay. And when the call is done, we'll move out. And my game will resume or the movie will resume, basically. To resume that, obviously we have on resume method also. So these are like basically simple stuff. If you look at it, you will understand it. Pure English. And obviously if my game ends or I'm bored or anything, I'll stop my apps on stop method on destroy method. And finally the activity shuts down. So one interesting thing happening here is the two activities, basically they are interacting with each other. So these can be activities from a single application or activities from different applications. Basically they are interacting with each other. This calling activity is coming in between. Emergency. It comes in and it tells, I'm leaving, you can come back in. So how is this interaction going on in Android? So an interesting thing comes into the picture called intents. Now intents are basically a message passing mechanism kind of stuff in Android. Using which an activity can request a particular action from another activity. So I'll show you a simple code snippet of how easily you can like interact. So imagine we are in the first activity which we just created, the example activity. So I'll create an object, my intent of type intent is equal to new intent. And there are two parameters. The first one is the context, so this. And the second is the name of the activity to which we are like aiming, all right. Which we want to start or we want to request anything. So let's say a second activity.class, because it's a class. So finally I'll write start activity, my intent. So this will just go on and pause my app and start the other activity. Similarly, to start a service, you'll write start service and stuff. So it says other deep me jannika zarath neya phila. So I'll wind up here for activity. So moving on to the services. Now, unlike activity, services are a bit different. So services are basically things like they say long running operations which we would like to run them in the background. We don't need a UI, we don't need to like interact with them directly. So we use services at places like that. Like simple examples would be like you're downloading some stuff from your internet. You're installing some game from the Play Store. You click install, you don't need to worry that my Play Store is open or not. You can close it, you can lock your phone, you can throw it away. You'll be assured that your app will be installed. Because there's a service running which is taking care of all these things. So it does not have a user interface. And yes, there are a few more examples here. Listening music obviously. You're chatting with your friends and you're listening music. The music is behind you, you can't see it but you can hear it. So services obviously. And similar to activities in Android. In the manifest if I'm adding a service, I'll put a tag for the service with some name. Let's say hello service. And I'll create a class with the same name hello service. But this time I'll be having, I'll be extending service rather than activity. Because we don't need a UI, we don't need any kind of interaction. So I want this to run in the background. Third one is broadcast receivers. Now these are like pretty interesting stuff. Like these are receivers for like broadcast announcements being made in Android. This is like huge statement. Break it down. So in Android there are specific events which happens. Like alert there's a phone call coming. Alert there's a SMS like received. Your battery is running low. So there might be some activities or applications who must be interested in certain types of like these announcements. Okay. For example, let's say I have a camera application. So it's clicking a picture. Pick Lelia. There might be few applications like gallery, Instagram, let's say Facebook. These might be interested in like getting the image which is captured and like doing something. Like editing. You have to share it on your wall. Something like that. And there might be other applications like the music app or the weather app. They have like nothing to do with the image being captured. So only the applications which are interested in like receiving certain types of what do you say announcements. They register themselves to receive those announcements. And obviously these components can help you to get notified whenever such events occur. Like there's a battery low. So there is a pop up. What are you doing? So stuff like that. And the fourth one is content providers. Now these are interesting because this is the only way using which two applications in Android can share data. There is no shared file. There is no shared memory thing in this. So simple example to take with is phone contacts. So we have a phone contact application in our phone. We save all our friends name and details in it. But you would like you would have noticed that applications like WhatsApp, Viber, they fetch number from the contact. You don't need to like go into WhatsApp and like feed in the numbers again, right? So this is because the phone contact application, it provides its content to the interested applications. So other apps like Viber and stuff, they use the provider which is like which is made by the contact app. They register themselves that by Mirko contacts to you. So they register themselves and they pull out the data from other apps. So for this we use content providers. Now there are few more things like few more types of components like app widgets and stuff. They are like, we won't be like talking about them right now. Even the four we talked about now like activities, services, content providers and broadcast receivers. It is not mandatory that like every app of yours should have all of these. Like my app can have only activities. It can have like five activities, two services and no content providers. It's okay. So basically these are like blocks. We can use them as in how you require and you can build your app. So just to wind up things. Let's take an example and I want you guys to like speak up and tell me. So let's talk about WhatsApp. Everyone know WhatsApp? No? I can't hear you. Is there anyone who does not have an idea what WhatsApp is? It's okay. No one? Okay, nice. I'm blessed. So in WhatsApp, just because we all are WhatsApp users. Is there an activity? Which one? One by one. Anyone from this side? May I see Vila? Clap for me also. Okay. So yeah, so we have a lot of activities in it. So are there any like services running? This side now. I feel like sitting in a concert right? Okay, this side. Okay, anything else? Downloading music and videos. So anyone has a different opinion in what he said. He said notifications. So there's a service for that. Can't hear you. Server? Okay. Sorry. So basically what I am asking is, what she said was absolutely right. We are downloading a video. Okay. I'll click download. I don't need to be like staring at the chat screen. We all know 2G, 3G networks sucks really hard. So basically what I'll do is I'll just stop my app. I mean, press my home key. I'll do my useful work apart from WhatsApp. And I'll come back and watch the music or video later on. So that's service. Now what you said, I don't remember your name. You just met me here. What he said was notifications. So exactly. So that was I wanted to add. So basically those are events. There is like you're receiving an SMS or you're receiving a message in WhatsApp. So there is some kind of events being triggered. So broadcast receivers come into picture at that point. So messaging basically. And content providers? Contacts obviously. So yeah, I guess this session was interesting. I hope so. And yeah, I'll announce a tea break.