.NET MAUI for cars: Android Auto Tutorial

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
hi guys in this video series we'll be looking at building a cross-platform Maui app that can run on Android auto and apple call play this will be a two-part Series in this first video I'll take you through the steps to create an Android auto app with Maui and then next time we'll add the apple core Play app to our Maui app so be sure to hit the Subscribe button so that you don't miss that one and of course if you found this video useful feel free to hit the like button so that it can help others as well so here's a quick demo of what we'll be building today as you can see the Android auto Maui app is running on my car for you to be able to run the app on your call you'll have to publish it to the Google Play console to your internal track otherwise it won't show up on your call but you can still use the desktop head unit emulator to debug your app before you publish it to your internal track so as you can see the app is a pretty basic layout and I'm using all the standard.net Maui assets that comes pre-installed with the sample app I did this to keep the tutorial as simple and straightforward as possible so I implemented a couple of different templates for the various screens the first one is the message template on this template you can provide an image some text and some action buttons I've hooked up the action buttons to display toast messages when you tap them you can easily override this functionality with your own functionality that you require upon a button press when I tap the back button the navigation stack is popped and we've taken back to the main menu next we have the pane template this basically provides a large image some rows with text and you can hook up additional action strip actions in the top right corner I've also added an action button to the end of the paint template that pops the stack as well lastly we have a grid template this allows you to display elements in a grid layout I've hooked up there on click listeners to also display their relevant toast messages I've added the same action strip to this page that was on the paint template the fourth template is the one the main menu is using which is a list template that allows you to display elements in a list format it's a pretty simple layout but I believe it will provide you with the building blocks to understand how the Android auto framework works and create any kind of UI that you might need before we get started with the implementation there is a couple of things you should know when it comes to Android auto there are two types of core apps you can build with Android namely Android auto and Android automotive OS Android auto runs on your phone as a background service and uses the cause infotainment display as an external display whereas Android automotive OS is when the core system runs Android itself and does not require a phone to run these Android core apps fortunately the process to develop for both is essentially the same but this tutorial will only focus on Android auto another thing to consider When developing an Android auto app is that Google limits you to using one of their predefined templates this is to ensure the layout conforms to driver safety requirements and that the driver will not get distracted by your app this does however limit you as developer on how much you can customize the app's user interface lastly be sure to check out Android app quality for cars and Google's design guidelines which I will link in the description below if you Google Android for cars and click on the first link you will find all the documentation surrounding developing an Android auto app I'll also provide the link in the description below this video's implementation is based on this documentation you will notice there are different categories that you can Target depending on your app's functionality such as media apps which is used to create Radio podcast or music apps messaging apps point of Interest apps Internet of Things apps navigation apps and video streaming apps we will be focusing on the point of interest and iot categories in this video which uses the core app Library but hopefully I'll provide you with enough tools that will provide guidance if you want to Target any of the other categories the documentation is for kotlin and Java but you will quickly see that it is not difficult to translate to c-sharp all right let's get started with setting up our environment the first thing that you will need is Android Studio because there are some SDK packages we need to install with it once you've downloaded and installed Android Studio start Android studio and select more actions then tap on SDK manager you need to have at least one of the SDK platforms installed so that you can develop for your Android phone head over to the SDK tools Tab and select the following packages Android auto API simulators Android auto desktop head unit emulator Google USB driver and Android SDK platform tools once you've successfully installed all of these packages open up command prompt and type ADB and hit enter if you get an unrecognized command it means that the ADB exe has not been added to your system path so you need to add it to your system both next install the latest visual studio if you don't have it installed already during the installation process be sure to select.net Maui platform app UI development start visual studio and select create a new project search for dotnet Maui and select.net Maui app select next provide a creative name and set a location where you want your project to be created on the next page you can select the framework either.net60.net7 at this stage it doesn't matter this tutorial should work for both I'm going to select.net7 since it's the greatest and latest select create and your project sheet be created connect your phone to your PC and let's just do a demo run to be sure that everything is working in the sample app it's on my drop down I'm just going to Android local devices selecting my device and selecting run this is assuming that you've already enabled developer options on your phone and also set USB debugging to chew on your phone settings say remember my choice and select install it all went well your new app should appear on your phone's home page I'm using this screen copy tool which is a free tool that broadcasts your phone screen to your computer it saves a lot of time if you're developing on your phone and it's available for both Windows and Mac alright looks like our demo app is launching and there we go the basic sample app from Maui looks like it is running well okay we can finally get started at implementing Android auto stop the debugging session from the Android developer docs the first thing we need to do is declare the core app service in our manifest however the way that Maui does this is slightly different to vanilla Android Maui and xamarin allows you to specify attributes on top of your service class that will inject these parameters into the Manifest open the platforms folder in our solution open Android and let's create a folder in here called Android auto which will contain all our Android auto code within the Android auto folder create another folder called services which will hold our service class so right click click select add and select class then give it a name so let's just call this a a core service select add so we want this class to be public and here is where we will add our attributes that will tell Maui what to put into the Manifest so this is a service since Android 12 you have to specify exported I'm going to set it to true and then the service needs to have an intent filter which is straight from that Android developer Docs so I say new string array and then we're gonna specify a string here Android x dot car Dot app dot core app service all right categories so here is where we'll be specifying one of those categories that we saw earlier for this demo I'm going to use the POI category not app Dot category dot poi all right so next we need to install the nougat package for our core app Library so right click on your project and go to manage nougat packages then go to the browse Tab and search for Android X dot core and you'll see xamarin.androidx.com.app.app but this also works for Maui it's currently version 1.2 so we don't yet have the version 1.3 available since that's still in release candidate version so select install and it will install it onto our Maui project for the Android platform great head back to your service and now inherit from core app service we will have to specifier using so just select using Android X core app all right now it's complaining that we're not implementing the abstract members so click on show potential fixes and then select Implement abstract class it created two new methods for us create host validator and on create session in the create host validator we want to return a host validator and say dot allow all hosts validator and then in the oncreate session we want to return a new session but we first need to create that class so let's create another folder in our Android auto folder called stations and in this folder let's create a class called a a session okay let's make this a public class as well and this needs to inherit from station and if the autocomplete pops up select the one that says androidx core dot app again it's going to complain about not implementing the abstract members so just say show potential fixes and select Implement abstract loss all right so we have an oncreate screen so this is typically where you will decide which screen you want to display to the user so typically you check your permissions if the user haven't accepted all the permissions you require them to accept that you want to use in the app say you want to use Bluetooth or some other or location or some other permission then this is perhaps where you would want to reroute them to a screen that says you know go to a safe location Park your call and accept the permissions on your phone but for this demo we're just gonna take the user to the main screen which is going to be our menu screen so we're gonna return new and this is where we're gonna call our new screen but first again we need to create this screen so let's create another folder in our Android auto folder called screens let's create the first screen so let's say add class and then let's call this one a a screen menu all right again it needs to be a public class this time we want to inherit from screen another class from the Android X core app and yeah again it's complaining about the abstract members not being implemented so show potential fixes and Implement abstract class you'll see there's another error that it gives us and it says it does not contain a Constructor that takes zero argument so show potential fixes and select the one that says call context there we go all errors gone so when this is called your Constructor will be called First and this will give you your call context core context is quite a useful clause it provides us with many variable methods you can work through this there's a lot of info you can get from this all right on the get template we're gonna return a list template so let's go and return new list template so all the Android auto screens use the Bolder pattern if you've worked with dotnate you should be familiar with the builder pattern if not don't worry it is it is quite straightforward you'll quickly get the hang of it and it's quite a a neat pattern so you say dot Builder with empty brackets say dot and then it provides you with all the extensions you can attach on this folder there's for example the set action strip say Tater action say single list say title so we're gonna first add a title to this page so we're gonna say say title and let's just call this Maui Android auto and this is the menu page once you added all your extensions you can say dot build and then it will create that template for you all right but this isn't exactly a very interesting screen it only has a title so far so let's add some list items to it so what we want to do is create a item list equals new item list dot Builder so again using the Bolder pattern here then we're gonna provide a state no items message so this is when there's no items in the list yet so this is just going to be our hello world message so let's just type something like R Maui app is running on Android auto all right and then again you want to say dot build once you're happy with all the extensions you've added so we want to then save this item list onto the list template so we can go and say dot set single list and specify the item list all right so now we can finally specify this screen on the station so we can go back to our session class say new AAA screen menu and pass through car context all right and then now that our session is set up correctly we can now specify it in our service so let's just go here AA station and there we go all area is gone there's still one or two things that we just need to do before we can finally run our hello world one pager app the first one is in the Android manifest we are going to add one or two items manually so in this application tag just go to the end and before the end application tag just tap enter so that you get that on a new line then we want to specify some metadata in here the moment you upload an app with this metadata in the Google Play console nodes okay this app contains an Android auto part to it so it needs to go through that review process but I'll elaborate on the whole review process of Google when you upload your app to them at a later stage so we want to say here metadata Android name I'm just gonna paste it in here Android resource Automotive app disk so we're gonna have to create this XML resource don't ask too many questions about it it's basically just telling it it needs to use the templates I don't know why they set it up that way but yeah another method tag we're gonna add in here is just the main API level so then that just also says Android name Android x dot car dot app main API level Android value equals one so that even the oldest types of phone that supports Android auto can run this on that point if we do try to build this now it's first gonna fail because of it won't be able to find that XML file but also by default Maui's minimum SDK version is say 221 which I think is like Android four or five and at that stage Android auto didn't exist yet so we need to up that to 23 which is the minimum that Android auto will allow so in if you double click on the project file you can just search for the Android Min SDK specification which is over here which is currently 21 so just change that to 23. oh num lock was off sorry let's just change that to 23 and save the file all right then almost there almost there so we're going to add that XML file inside the resources folder inside the Android platforms folder so add new folder XML all right so in this XML folder we want to create a XML file and then here we just want to specify that name that we specified in the manifest Auto motive underscore app underscore desk dot XML all right should create a file there we go underneath the X and L tag we want to create a tag called Automotive app and inside that tag we want to create an tag that says users name equals template this is the same if you were doing this in vanilla Android you would also have to create this XML file don't ask me why all right let's do a rebuild of the entire solution just to be sure that we didn't make any typos great rebuild all succeeded so let's deploy these changes to our phone again okay it's launching and there we go so no changes on the app since the last launch so to run this now in the emulator there's a couple of things we need to do let's stop the debugging session on your phone go to settings and then in settings search for Android auto great if you're in the Android auto settings it should look like this there's a second set of secret developer options that we need to activate specifically for Android auto so if you scroll all the way down you'll see there's a version down here I'm gonna tap that a bunch of times until we become a developer and there we go allow developer settings okay and then it says developer settings has been enabled okay great so now we can go to these three dots at the top and we have some new settings available to us you want to tap on the start head unit server and then open up command prompts on your computer we want to send the following command ADB forward TCP 5277 TCP colon 5277 this is just folding the port so that we can use the desktop emulator now you need to find your desktop emulator which I have open here so it's quite a pause to Traverse it's C uses your username app data local Android SDK extras Google auto and then finally you'll see the exe here so it might be easier just to right click and then pin to start because I'm sure you don't want to go to that path every single time so let's launch the desktop head unit server and it should pop up like this and start running so let's go to our apps and then if you did everything correctly you should see your brand new app on the app screen so let's see if it launches go in there there we go our Mario app is running on Android auto so it looks like all went well but the app doesn't exactly do a lot at this point so let's go and expand our templates and build some additional pages all right we've made some good progress but it's still a small Hello World app so let's expand a bit on the menu page so let's go back to screen menu and then late first off add a header action a header action is binded to the list template so set interaction and if you look at the autocomplete options there aren't a lot of options that you have here you can either set the app icon that will then appear in the top left corner or you can set a back button which will pop your navigation stack if you try and apply a custom action here the Apple crash and you'll get a exception saying something like custom not allowed in all caps so just something to take into consideration so for this main menu I'm just going to display the app icon and you will see there's an ambiguous reference so let's just add the correct using so we want to use the one from the core app model all right then we can add some list items to our list to give the options to navigate to the various other screens that we're gonna make so first off we are going to have a message screen so let's just save our message template screen equals new row so these are all going to be rows in our list again we're using the Builder pattern so I'm gonna dot say title and this is going to be message template so this is what's going to be displayed on there you can also add text if you'd like so let's just add some text here sample text all right then we can also set an image onto this row item now if you look at the options here we have to supply a core icon or the overload you can then also specify the image type so how do we get an image that's in our shared resources so we want to use this dot netbot a3g in our core Play app so fortunately it is quite simple all you need to do is import it with let's create one here VAR dot net bot icon so this is going to be an icon combat is what they call it we're gonna say icon equals icon compact dot create with resource and this we need to pass the core context and then we can just say resource dot drawable Dot and then we have all our resources available here so we're looking for dotnet bot and there we magically have our image so any images of any format that you place in your shared resources you can have access to here in your Android auto project so that's quite cool but then we also just need to create a car icon from this so again I have to use the Builder pattern for that so let's just call this one dot netbot core icon and this is going to be equals to new car icon dot Builder dot net compact dot build great then we can just pause this car icon through to here and there it is happy all right one last thing that we can add to this row item is a little Chevron to indicate that this is a clickable item so there's a DOT Sate browsable so if we set that to true then it will add a little Chevron on our row so we're gonna duplicate what we've done here two more times for the other two screens that we're also going to have so this one is gonna be called the paint template screen and the last one is going to be the grid template screen and obviously we also just want to change the titles paint template correct templates all right let's just Auto format all right so we then want to add our three items to our list we're just gonna say dot so we always have to do this before the dot bold so we can add extensions to the Builder and then once it's Baltic on to add extensions anymore so say add item so message template screen another one add item paint template screen and the last one the correct template screen all right so that would build our list however if we tap on those list items nothing will happen yet so the way we will handle that is with an on click listener so if we add a DOT set on click listener and you can start the brackets you'll see it is looking for if we control click in here it is looking for something that implements the eye on click listener interface and there is no proper suggestions that it gives us so we're going to implement our own class that implements the ion click listener interface and then this can use it so back to your solution Explorer let's add another folder in here called on click listeners okay and then in here add a class we're gonna call this one the navigation on click listen there so it needs to be made public and we said we're going to implement the I on click listener interface if you hover over it it has a ton of methods that haven't been implemented and you might think oh okay we need to show all potential fixes and apply all these abstract members but there is a much simpler approach fortunately we can inherit from the java.lang dot object based loss and then that implements most of them for us then we only have one and that's the only one we're interested in so we're going to say Implement interface so this on click method will be called once the event is tapped so how would we know to which screen to navigate well we're going to specify that in the Constructor so you can create a Constructor for this by just typing ctor and pasting tab twice in our Constructor we're going to need a couple of parameters the first is the car context since we need to pass that to whatever screen we navigate to next the next is the screen manager which we will use to do the actual navigation and lastly we go on to pass an enum that's going to specify for us which screen the user wants to navigate to so let's create one more folder in here called enums and then let's just add cloth a a screen and public change the class into an enum I like that it always specifies the first one is none for you it's always good practice so then let's make the menu first one the message template will be number two then the paint template will be number three great template will be number four and then let's just add a pop mechanism as well in case we just want to return to the previous screen okay so let's go back to our on click listener and then let's add this AAA screen enum okay and we can just call this screen to navigate to okay so obviously we're gonna need some private references to all of these okay so these can be made read only since we're just setting their value in the Constructor first one is going to be core context okay then we can just copy paste this we wanna screen manager again and then one for the enum all right and we just need to assign these in the Constructor so when we get an on click event we want to have a switch case here and the switch is going to happen on the enum okay so let's start with our nun case we just want to return obviously something went wrong maybe you'll log an event there so that something can be done about it next is the menu so when we want to navigate we're going to use the screen manager dot push so you'll see there's a bunch of methods here so you can push remove pop excise so one thing you need to keep into consideration you only have a stack size of one five or six if you pause that then you get an exception so that's just something you need to take into consideration the reason they implemented that is so that someone doesn't have to navigate through pages of pages of content on their car and distract the driver okay so we have to pass the four context to the screen that we're pushing and there we go it's the case for menu let's just add the other cases even though we haven't created those screens yet we can then just come and fill them in later a message template then we have the paint template and then we have the grid template and let's just add a case for the pop mechanism as well to pop the context you just use the screen manager again and say pop take it to the previous screen and then we always have to implement our default case all right this is our navigation on click listener we can now use this to navigate to the next screen so we can then paste it in here and we're gonna have to create a new instance of this pass through the car context the screen manager and the screen we want to navigate to So for this case it's going to be the message template so a a screen Dot message template fantastic great then we can just copy this to the other two rows and then just change the screen that they will navigate to so this is going to be the plane template screen and lastly it's gonna be the pro template screen Okay so we've done a lot of the groundwork for this now we can start creating our next screen so we can actually navigate to it so next we're going to create the message screen a new class I'm gonna call this a a screen message template change it to a public class implement the screen based loss and then implement the abstract members and also add the Constructor with the core context so in this case we will want to return a new message template dot Builder again against it and then we can have a look here what we have at our disposal so we can copy some things from the menu screens our title is also relevant here our header action is going to change because here we want to actually show it the back button so we can plot the stack with that so let's just paste them in here and do a build and it's complaining because this Builder expects a message in the parameters here so we can specify our message here for the message template so this is a message template there we go and it's complaining that it doesn't know which action to use because there's more than one that implements it and we want the car app action but we want to change this to action dot back that it pops the stack we don't need to use our navigation on click listening for that that already has the intelligence built in to just pop your stack but we probably want to add an image again to this one that it's not just text on the screen so we can copy our dotnet bot that we created from the previous one and just paste it in here then we can say dot set icon and pause through this.net bot icon here we go then we can also add some actions to this message template like what you saw in the demo with the accept and cancel commands so typically you'd use the message template to prompt the user and ask them do you want to proceed or then they can accept or cancel so I'm just going to create here action one equals new action data Builder and then we can just set the icon to the same part set a title and the first one is going to be cancel and we can actually set a background color here and the Android auto don't allow you to set a background to color on a lot of things so use it where you can all right and then you have your dot build and we can just copy paste this one to get a second action or accept action this could be more descriptive maybe cancel action and save to action all right and then we can add these dot add action cancel action and the other one add action accept action I haven't tasted what the limit is of how many you can have here but it's probably just up to two or so so obviously these actions don't currently do something so you'll see we can also set an on click listener too these actions so in this case we want to show a toast that you can just then override to do whatever functionality you would like so let's create another on click listener so add class and then let's call this one action on click listener okay and public so again I on click listener and we want to implement the base loss of java.lang dot object that we don't have to implement all those methods just the on click there we go add our Constructor so we're going to need the car context here again to show a toast message so go ahead and add that to your Constructor yeah and then secondly we want to pass through a string for a message that we going to display and just Implement private read-only members folder so that we can pass it to the on click method okay assign them here in the on click method we would just want to say car toast dot make text and then we want to pass through the car context and the message and you need to pass through a duration if you say car toast dot we have length long and length short we'll use the length long and there we go so if this on click listener is called and the message is passed to it then it will show a toast message so we can go back to our message template in our on click listener we can then say new action on click listener pass through the card context and our message we'll just say cancel was tapped and here we can just say accept was tapped okay so typically if you want to look up other functionality to one of these on click save on click listeners then you would in your on click listener you would probably publish an event from here and then subscribe to that event wherever you need it and then just handle it from there apologies I realized we missed one last thing you have to say dot show on your card toast dot make text otherwise it won't show all right so let's run this and see how it goes there we go it's launching you'll notice the app crashes always when it's deploying it's fine there we go so we can go to our message template everything looks as expected with our image our text and our two action buttons If we tap on cancel it says cancel was tapped and if we tap on accept we get a toast that says accept was tapped all right that's the message template now we just need to implement the pane and the grid templates okay so stop the debugging session and let's create screens for both of those so new class first we're gonna add a a screen template a screen grid template all right so on the pane egg change it again to public inherit from screen again and implement the abstract add the Constructor and also implement the abstract loss all right so here we want to return new pane template so you can see a pattern by now dot Builder and again we can carry some of our let's rather carried over from the message template so copy over the title and header action I accidentally copied the icon here as well we can copy over the bot image as well since we're going to use it in a couple of places on this page so let's just resolve the action again I realized the error of my ways and just removes the core icon again here so let's say dot build here so we're getting an area over here because it's expecting a pane in its Constructors parameters so let's create that so we're going to say our pain let's first create a builder for this and not immediately going to build it since we want to populate it in a for Loop pane dot Builder let's just remove those brackets that it created and then we can say set image.net bot and yeah we don't want to build this yet okay so we're going to create a for Loop here and let's start off from one so we can just use the I directly let's add 10 items in here and increments I so we're going to populate this pane with a bunch of items let's add them here so there are also rows that we're going to use so it's the same we've seen with the list template so row dot Builder say title let's just say add the dollar sign before the quote marks so that we can add parameters in here so add our curly braces put in I and then we say title then we'll say which row it is and then we can set an image for this as well same image and then we can also add text also say something similar so also use our dollar sign and just say row curly braces I text and then we can build these ones and then once each one of them build it we can add them all to our plane builder add row and add that row and then finally we can save our pane equals pain Builder dot build so this is also what makes this Boulder pattern so powerful you can start to build a attach a lot of things and then eventually just say build and then you have a dynamically created object so we can pause this pane through the to the Constructor of the paint template and then that sorts out the errors we can also add an action to our pane so let's add an action over here pain action equals new action dot Builder all right and then we can just also set an icon here same one you can save the background color let's make it blue this time you can say to title to change things up a bit I'm going to use this action to go back we're going to use our navigation on click listener here we're going to sit on click listener new navigation on click listener I'm gonna pass through the core context again pass through the screen manager and an enum to where we want to go but in this case we just want to pop the stack so let's rather use otherwise if we push the menu again on top of it we're wasting some of our stack tips so we're just going to pop the stack and then say build and we can just attach this paint action to the paint Builder so we can say dot add action great so now we've also added an action to the pane and then finally we can also add an action strip so the action strip is maximum of two additional little buttons that you can add to your top right corner just in case there's not enough to tap on on your current page so let's just add them here for action one okay then we can just set our icon again set our own click listener it's gonna use the action on clicklist now then it displays another toast for us add card context and a message action strip item one was tapped and then we can build this dot build there we go so you'll notice the action has a state background color but if you change the background color of any of the action strip actions then you get an exception telling you you're not allowed to change the background color of Your Action step actions so just something to take into consideration as well if you don't want your app to crash so here's action 2 and we're just gonna display action 2 was tapped first just need to also build our action strip of our action strip calls new action dot Builder and then add our two actions action one action two and then let's build this one then we can add this action strip to our paint template there we go so our paint template is finished let's implement the grid template before we run again so we save some time okay same story change this to public inherit from screen implement the Constructor and the abstract base methods here we go so in this Constructor you can also resolve any services that you might need here which would allow you to use the services from your shared code in your Android auto project all right so for the grid template we want to return new red template dot Builder Dot so let's just also copy the action title and header action from our message template we don't have to type that over again so this is then just gonna say great template or I might not have updated the titles here yes there should be message template and the paint template should say find template there we go all right again it doesn't know what action is so let's just leave it at the correct using for us core app okay so the grid template also has a set single list that should look familiar by now and it also has a saved action strip so we can copy that from our paint template so we're gonna need the image again so let's just copy it from here so let's create our item list Builder bar grid item list Builder equals new item list dot Builder dot we can add a site no items message always safer in case you're pulling in the grid items dynamically from your shared code otherwise you might get an exception if you have an empty list I'm just gonna call this no grid items found all right we don't want to build this one yet we're going to populate it again in a for Loop so let's just say four int I let's start from one again while I is smaller than 10 or equal increment I so let's add some grid items in here so we have a grid item near great item dot Builder and then we can set a title for them just takes a string so let's add the dollar sign and then say grid item I title okay and then we can say date text gonna copy this text and then we can also set an image the image same dot net bot icon I'm sure you're tired of that one by now but but you can replace it with any asset that you added to your project set on click listener for this one again just a new action on click listener pass through the car context again dollar sign what do we want to display grid item I was tapped okay and then we can just say dot build and add them to our grid item list Builder good item list Builder dot add item grid item there we go and then we can build our grid item list Builder far great bottom list equals grid item list Builder dot build and we can add it to the state single list pulls through our grid list and we can say build so the one thing I just want to add here is the set action strip it comes in more handy than you might think so I'm just gonna copy that from our paint template uh two actions with the action strip paste it in here and falls through that as the parameter you can always wrap these in try catches just to be safe all right now I just want to go to our navigation on click listener and set the navigation for our paint template and grid template screens all right let's build and run our app and see what our changes look like okay the app is launched let's have a look and see what our paint template looks like so you'll notice here we only have four items in the paint template even though we specified nine so they do limit you to four items here and then we have our action strip items and they're showing the correct toast and then if we tap here it pops the stack we go back to the menu go to our grid template and we have our 10 items here so you can have 10 at least and they're also hooked up correctly and the action strips as well so that's it good job guys you've built a Maui app using four different templates and I think that should give you all the building blocks you might need to Implement any of the other templates so next time we're going to look at taking this a step further and making this a truly cross-platform app and implementing in Apple Core Play app with the same functionality so remember to hit the like And subscribe buttons or you might miss that one feel free to let me know if anything was unclear in this video in the comments below and see you next time
Info
Channel: Christian Strydom
Views: 7,541
Rating: undefined out of 5
Keywords: MAUI Android Auto, .NET, .net maui course, .net maui tutorial, Android, Android Auto, Android Studio, Android auto course, Android auto tutorial, App for car, Build navigation app, Car App, Create android auto app, Cross platform car app, Developer, Dotnet, Dotnet maui, MAUI, Visual Studio, .net maui, AndroidĀ Auto, android automotive, android, android for cars, android auto tutorial, android auto app, aaos, app for car, dotnet maui tutorial, Xamarin, Xamarin Android Auto, .net 7
Id: nNkVxegb2oU
Channel Id: undefined
Length: 57min 18sec (3438 seconds)
Published: Sat Mar 11 2023
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.