<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mobile Apps Archives - Symatech Labs</title>
	<atom:link href="https://symatechlabs.com/category/mobile-apps/feed/" rel="self" type="application/rss+xml" />
	<link>https://symatechlabs.com/category/mobile-apps/</link>
	<description>We at Symatech Labs Limited believe Great Software solves Great Problems. Our services range from Desktop Software Development to Mobile Application Development. Over the years we have been able to develop software for reputable organisations and that has never changed.</description>
	<lastBuildDate>Sun, 10 Nov 2024 21:18:00 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://symatechlabs.com/wp-content/uploads/2023/07/cropped-logo_2401x1067-32x32.png</url>
	<title>Mobile Apps Archives - Symatech Labs</title>
	<link>https://symatechlabs.com/category/mobile-apps/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>How To Get Details Of Your Android Device Using Kotlin</title>
		<link>https://symatechlabs.com/how-to-get-details-of-your-android-device-using-kotlin/</link>
		
		<dc:creator><![CDATA[Symatech Labs]]></dc:creator>
		<pubDate>Sun, 10 Nov 2024 14:44:13 +0000</pubDate>
				<category><![CDATA[Mobile Apps]]></category>
		<category><![CDATA[Software Development]]></category>
		<guid isPermaLink="false">https://symatechlabs.com/?p=70780</guid>

					<description><![CDATA[<p>How to Get details of your Android device using kotlin The Android SDK allows application developers to retrieve information i.e brand of the phone, device name among other details. Below is an example of how this can be done. Build Class import android.os.Build This class provides a number of static fields and methods which return [&#8230;]</p>
<p>The post <a href="https://symatechlabs.com/how-to-get-details-of-your-android-device-using-kotlin/">How To Get Details Of Your Android Device Using Kotlin</a> appeared first on <a href="https://symatechlabs.com">Symatech Labs</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="70780" class="elementor elementor-70780">
									<section class="elementor-section elementor-top-section elementor-element elementor-element-736b005 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="736b005" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-aa3731c" data-id="aa3731c" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-11a1879 elementor-widget elementor-widget-text-editor" data-id="11a1879" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.14.0 - 26-06-2023 */
.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}</style>				<h2>How to Get details of your Android device using kotlin </h2><p>The Android <a href="https://symatechlabs.com/sdk-and-apis-what-is-the-difference/">SDK</a> allows application developers to retrieve information i.e device model, device name among other details.</p><h4> </h4><h4><strong>Build Class</strong></h4><div><pre>import android.os.Build</pre></div><p>This class provides a number of static fields and methods which return details of the device. Some of the fields include:</p><ul><li><strong>Build.MODEL</strong>: <em>Returns the name of the device.</em></li><li><strong>Build.VERSION.RELEASE</strong>: <em>Returns the current version of the Android operating system</em></li><li><strong>Build.MANUFACTURER</strong>: <em>Returns the name of the manufacturer</em></li><li><strong>Build.DISPLAY</strong>: <em>Returns information about the software version and build type installed on the device.</em></li><li><strong>Build.FINGERPRINT</strong>: <em>Returns a concatenated string containing information about the manufacturer, device model, Android version, and build details.</em></li></ul><div><i> </i></div><div><h4><strong>Android Permissions</strong></h4><p>It is also possible to get the Wi-Fi/Cellular strength when connected to a network. This would require requesting permissions from the user. </p></div>						</div>
				</div>
				<div class="elementor-element elementor-element-09dab27 elementor-widget elementor-widget-code-block-for-elementor" data-id="09dab27" data-element_type="widget" data-widget_type="code-block-for-elementor.default">
				<div class="elementor-widget-container">
			<pre class='line-numbers theme-okaidia' data-show-toolbar='no'><code class='language-javascript'>&lt;uses-permission android:name=&quot;android.permission.ACCESS_FINE_LOCATION&quot; /&gt;
&lt;uses-permission android:name=&quot;android.permission.READ_PHONE_STATE&quot; /&gt;
&lt;uses-permission android:name=&quot;android.permission.ACCESS_WIFI_STATE&quot;/&gt;
&lt;uses-permission android:name=&quot;android.permission.ACCESS_FINE_LOCATION&quot;/&gt;


/* Android requires runtime permission requests starting from Android 6.0 or API level 23 */

   fun requestPermissions(fragment: Fragment) {

        val requestMultiplePermissionLauncher =
            fragment.registerForActivityResult(
                ActivityResultContracts.RequestMultiplePermissions()
            ) { result -&gt;
                for (r in result) {
                    Log.d(Constants.LOG_TAG, r.key + &quot; : &quot; + r.value.toString())
                }

            }
        requestMultiplePermissionLauncher.launch(
            arrayOf(
                Manifest.permission.ACCESS_COARSE_LOCATION,
                Manifest.permission.LOCATION_HARDWARE,
                Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.READ_PHONE_STATE,
                Manifest.permission.MODIFY_PHONE_STATE,
                Manifest.permission.ACCESS_NOTIFICATION_POLICY,
                Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE,
                Manifest.permission.ACCESS_WIFI_STATE,
                Manifest.permission.CHANGE_NETWORK_STATE
            )
        )
    }
</code></pre>		</div>
				</div>
				<div class="elementor-element elementor-element-b1b58a6 elementor-widget elementor-widget-text-editor" data-id="b1b58a6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h4> </h4><h4><strong>Code</strong></h4><div><p>For simplicity, we have organised the repository in a manner that eliminates most of the boilerplate code. </p></div>						</div>
				</div>
				<div class="elementor-element elementor-element-6de942c elementor-widget elementor-widget-code-block-for-elementor" data-id="6de942c" data-element_type="widget" data-widget_type="code-block-for-elementor.default">
				<div class="elementor-widget-container">
			<pre class='line-numbers theme-okaidia' data-show-toolbar='no'><code class='language-javascript'>interface DeviceInfoInterface {

    fun getBatteryStatus(): String;
    fun getBatteryPercentage(): String
    fun getBatteryPercentage_(): Int
    fun getTotalStorage(): String;
    fun getFreeStorage(): String;
    fun getStoragePercentage(): Double;
    fun getTotalMemoryUsage(): String;
    fun getFreeMemoryUsage(): String;
    fun getMemoryPercentage(): Double;
    fun getNetworkInfo(): String;
    fun getAppVersion(): String;
    fun getDataSyncStatus(): String;
    fun getDeviceHealth(): String;
    fun getUserActivity(): String;
    fun getDeviceIdentity(): String;
    fun getWifiSignalStrength(): String
    fun getCellularSignalStrength(callback: (String) -&gt; Unit);
    fun getNetworkType(): String;
    fun getUptime(): String;
    fun startNetworkCallback(onNetworkChange: (String) -&gt; Unit);
    fun stopNetworkCallback();
    fun deviceDetails(deviceDetailsBinding: DeviceDetailsBinding);
    fun getDeviceId(): String

}</code></pre>		</div>
				</div>
				<div class="elementor-element elementor-element-f29d4fd elementor-widget elementor-widget-text-editor" data-id="f29d4fd" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h4> </h4><h4><strong>Screens</strong></h4><p> </p>						</div>
				</div>
					</div>
		</div>
							</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-c51b3fc elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="c51b3fc" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b33753e" data-id="b33753e" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-2256a63 elementor-arrows-position-inside elementor-pagination-position-outside elementor-widget elementor-widget-image-carousel" data-id="2256a63" data-element_type="widget" data-settings="{&quot;navigation&quot;:&quot;both&quot;,&quot;autoplay&quot;:&quot;yes&quot;,&quot;pause_on_hover&quot;:&quot;yes&quot;,&quot;pause_on_interaction&quot;:&quot;yes&quot;,&quot;autoplay_speed&quot;:5000,&quot;infinite&quot;:&quot;yes&quot;,&quot;speed&quot;:500}" data-widget_type="image-carousel.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.14.0 - 26-06-2023 */
.elementor-widget-image-carousel .swiper,.elementor-widget-image-carousel .swiper-container{position:static}.elementor-widget-image-carousel .swiper-container .swiper-slide figure,.elementor-widget-image-carousel .swiper .swiper-slide figure{line-height:inherit}.elementor-widget-image-carousel .swiper-slide{text-align:center}.elementor-image-carousel-wrapper:not(.swiper-container-initialized):not(.swiper-initialized) .swiper-slide{max-width:calc(100% / var(--e-image-carousel-slides-to-show, 3))}</style>		<div class="elementor-image-carousel-wrapper swiper-container" dir="ltr">
			<div class="elementor-image-carousel swiper-wrapper" aria-live="off">
								<div class="swiper-slide" role="group" aria-roledescription="slide" aria-label="1 of 4"><figure class="swiper-slide-inner"><img decoding="async" class="swiper-slide-image" src="https://symatechlabs.com/wp-content/uploads/2024/11/1.png" alt="1" /></figure></div><div class="swiper-slide" role="group" aria-roledescription="slide" aria-label="2 of 4"><figure class="swiper-slide-inner"><img decoding="async" class="swiper-slide-image" src="https://symatechlabs.com/wp-content/uploads/2024/11/2.png" alt="2" /></figure></div><div class="swiper-slide" role="group" aria-roledescription="slide" aria-label="3 of 4"><figure class="swiper-slide-inner"><img decoding="async" class="swiper-slide-image" src="https://symatechlabs.com/wp-content/uploads/2024/11/3.png" alt="3" /></figure></div><div class="swiper-slide" role="group" aria-roledescription="slide" aria-label="4 of 4"><figure class="swiper-slide-inner"><img decoding="async" class="swiper-slide-image" src="https://symatechlabs.com/wp-content/uploads/2024/11/4.png" alt="4" /></figure></div>			</div>
												<div class="elementor-swiper-button elementor-swiper-button-prev" role="button" tabindex="0">
						<i aria-hidden="true" class="eicon-chevron-left"></i>					</div>
					<div class="elementor-swiper-button elementor-swiper-button-next" role="button" tabindex="0">
						<i aria-hidden="true" class="eicon-chevron-right"></i>					</div>
				
									<div class="swiper-pagination"></div>
									</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-1ed2218 elementor-widget elementor-widget-text-editor" data-id="1ed2218" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h4> </h4><h4><strong>Github</strong></h4><p>Find the full codebase on <a href="https://github.com/brianosoro/DeviceDetails" target="_blank" rel="noopener">Github</a></p><p> </p><p><em><a href="https://bit.ly/3YsPhmL" target="_blank" rel="noopener">Symatech Labs</a> is a Software Development company based in Nairobi, Kenya that specializes in Software Development, Mobile App Development, Web Application Development, Integrations, USSD and Consultancy.</em></p>						</div>
				</div>
					</div>
		</div>
							</div>
		</section>
							</div>
		<p>The post <a href="https://symatechlabs.com/how-to-get-details-of-your-android-device-using-kotlin/">How To Get Details Of Your Android Device Using Kotlin</a> appeared first on <a href="https://symatechlabs.com">Symatech Labs</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Create An Android Mobile App Using Kotlin That Consumes An API From A Drupal Instance</title>
		<link>https://symatechlabs.com/create-an-android-mobile-app-using-kotlin-that-consumes-an-api-from-a-drupal-instance/</link>
		
		<dc:creator><![CDATA[Symatech Labs]]></dc:creator>
		<pubDate>Thu, 01 Aug 2024 18:29:04 +0000</pubDate>
				<category><![CDATA[Mobile Apps]]></category>
		<category><![CDATA[Software Development]]></category>
		<guid isPermaLink="false">https://symatechlabs.com/?p=70746</guid>

					<description><![CDATA[<p>Create An Android Mobile App Using Kotlin That Consumes An API From A Drupal Instance Drupal is a popular content management system(CMS) written using PHP and is used to build websites and web applications. Popular websites that use Drupal include: Nokia, Prime Minister Of Australia and Tesla. Below are the steps one can use to extend Drupal to the Android [&#8230;]</p>
<p>The post <a href="https://symatechlabs.com/create-an-android-mobile-app-using-kotlin-that-consumes-an-api-from-a-drupal-instance/">Create An Android Mobile App Using Kotlin That Consumes An API From A Drupal Instance</a> appeared first on <a href="https://symatechlabs.com">Symatech Labs</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="70746" class="elementor elementor-70746">
									<section class="elementor-section elementor-top-section elementor-element elementor-element-574623a elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="574623a" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5a38970" data-id="5a38970" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-e8098bc elementor-widget elementor-widget-text-editor" data-id="e8098bc" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h2>Create An Android Mobile App Using Kotlin That Consumes An API From A Drupal Instance</h2><p> </p><p><a href="https://www.drupal.org/">Drupal</a> is a content management system<em>(CMS)</em> written using <a href="https://www.php.net/" target="_blank" rel="noopener">PHP</a> and is used to build websites and web applications. Popular websites that use Drupal include: <a href="https://www.nokia.com/" target="_blank" rel="noopener">Nokia</a>, <a href="https://www.pm.gov.au/" target="_blank" rel="noopener">Prime Minister Of Australia</a> and <a href="https://www.tesla.com/" target="_blank" rel="noopener">Tesla</a>. Below are the steps one can use to extend Drupal to the Android client. The assumption is that the Drupal instance has been installed and is running.  </p><p> </p><h4><strong> </strong><strong>Drupal</strong></h4><ol><li>Install and enable the <a style="font-size: 1.125em; letter-spacing: 0.16px;" href="https://www.drupal.org/docs/core-modules-and-themes/core-modules/jsonapi-module" target="_blank" rel="noopener">JSON:API</a> module on the Drupal instance</li><li>Run the endpoints using Postman to simulate how the requests will be made by the Android client. </li></ol><p> </p><p><strong>Drupal URL structure</strong></p><p>In the <a href="https://www.drupal.org/docs/core-modules-and-themes/core-modules/jsonapi-module" target="_blank" rel="noopener">JSON:API</a>, each resource has a globally unique type property. For example:</p><ul><li>node&#8211;article  <em><strong>for articles</strong></em></li><li>user&#8211;user <em><strong>for users</strong></em></li><li>node&#8211;pages <em><strong>for pages</strong></em></li></ul><p> </p><p>When running the Postman requests, represent the URL as follows. Replace the BASE_URL with your domain or IP Address.</p><ul><li>https://BASE_URL/jsonapi/node/article    <em>get articles</em></li><li>https://BASE_URL/jsonapi/node/page     <em>get pages</em></li></ul><div><i> </i></div>						</div>
				</div>
				<div class="elementor-element elementor-element-43b5ec4 elementor-widget elementor-widget-image" data-id="43b5ec4" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.14.0 - 26-06-2023 */
.elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=".svg"]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block}</style>												<img fetchpriority="high" decoding="async" width="1024" height="614" src="https://symatechlabs.com/wp-content/uploads/2024/08/Screenshot-from-2024-08-01-20-39-54.png" class="attachment-large size-large wp-image-70751" alt="" />															</div>
				</div>
				<div class="elementor-element elementor-element-4d6e779 elementor-widget elementor-widget-image" data-id="4d6e779" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img decoding="async" width="1024" height="614" src="https://symatechlabs.com/wp-content/uploads/2024/08/Screenshot-from-2024-08-01-20-41-03-1.png" class="attachment-large size-large wp-image-70750" alt="" />															</div>
				</div>
				<div class="elementor-element elementor-element-0192030 elementor-widget elementor-widget-text-editor" data-id="0192030" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h4> </h4><h4><strong>Kotlin Android Client</strong></h4><p>The <a href="https://bit.ly/3LQVr8s" target="_blank" rel="noopener">Android App</a> makes HTTP requests to the Drupal instance. Below are the steps used when building the App.</p><p>1. Open Android Studio and create a project</p><p>2. Add the necessary dependencies </p>						</div>
				</div>
					</div>
		</div>
							</div>
		</section>
				<section class="elementor-section elementor-top-section elementor-element elementor-element-eaf4088 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="eaf4088" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-452f28b" data-id="452f28b" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-3110ddd elementor-widget elementor-widget-code-block-for-elementor" data-id="3110ddd" data-element_type="widget" data-widget_type="code-block-for-elementor.default">
				<div class="elementor-widget-container">
			<pre class='line-numbers theme-okaidia' data-show-toolbar='yes'><code class='language-javascript'>dependencies {

    implementation(&quot;androidx.core:core-ktx:1.13.1&quot;)
    implementation(&quot;androidx.appcompat:appcompat:1.7.0&quot;)
    implementation(&quot;com.google.android.material:material:1.12.0&quot;)
    implementation(&quot;androidx.swiperefreshlayout:swiperefreshlayout:1.1.0&quot;)
    implementation(&quot;androidx.room:room-common:2.6.1&quot;)
    testImplementation(&quot;junit:junit:4.13.2&quot;)
    androidTestImplementation(&quot;androidx.test.ext:junit:1.2.1&quot;)
    androidTestImplementation(&quot;androidx.test.espresso:espresso-core:3.6.1&quot;)
    implementation(&quot;androidx.hilt:hilt-work:1.2.0&quot;)
    implementation(&quot;androidx.work:work-runtime-ktx:2.9.0&quot;)
    kapt(&quot;androidx.hilt:hilt-compiler:1.2.0&quot;)
    implementation(&quot;com.google.dagger:hilt-android:$hilt&quot;)
    kapt(&quot;com.google.dagger:hilt-compiler:$hilt&quot;)
    implementation(&quot;androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.3&quot;)
    implementation(&quot;com.squareup.retrofit2:retrofit:$retrofit&quot;)
    implementation(&quot;com.squareup.retrofit2:converter-moshi:2.9.0&quot;)
    implementation (&quot;com.squareup.okhttp3:okhttp:4.9.3&quot;)
    implementation(&quot;de.hdodenhof:circleimageview:3.1.0&quot;)
    implementation(&quot;androidx.activity:activity-ktx:1.9.0&quot;)
}</code></pre>		</div>
				</div>
				<div class="elementor-element elementor-element-415d54a elementor-widget elementor-widget-text-editor" data-id="415d54a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>3. Add the Data Classes corresponding to the JSON structure of your Drupal API responses.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-833bee4 elementor-widget elementor-widget-code-block-for-elementor" data-id="833bee4" data-element_type="widget" data-widget_type="code-block-for-elementor.default">
				<div class="elementor-widget-container">
			<pre class='line-numbers theme-okaidia' data-show-toolbar='yes'><code class='language-javascript'>data class ArticleResponse(
    @field:Json(name = &quot;data&quot;) val data: List&lt;Data&gt; = listOf()
)

data class Data(
    @field:Json(name = &quot;id&quot;) val id: String? = &quot;&quot;,
    @field:Json(name = &quot;attributes&quot;) val attributes: Attributes = Attributes()
)

data class Attributes(
    @field:Json(name = &quot;title&quot;) val title: String? = &quot;&quot;,
    @field:Json(name = &quot;created&quot;) val created: String? = &quot;&quot;,
    @field:Json(name = &quot;path&quot;) val path: Path = Path(),
    @field:Json(name = &quot;body&quot;) val body: Body = Body()
)

data class Path(
    @field:Json(name = &quot;alias&quot;) val alias: String? = &quot;&quot;,
    @field:Json(name = &quot;pid&quot;) val pid: Int? = 0
)

data class Body(
    @field:Json(name = &quot;value&quot;) val value: String? = &quot;&quot;
)</code></pre>		</div>
				</div>
				<div class="elementor-element elementor-element-366c995 elementor-widget elementor-widget-text-editor" data-id="366c995" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>4. In this case, we made use of the <a href="https://square.github.io/retrofit/">Retrofit</a> library to make HTTP requests to the JSON API.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-7845a04 elementor-widget elementor-widget-code-block-for-elementor" data-id="7845a04" data-element_type="widget" data-widget_type="code-block-for-elementor.default">
				<div class="elementor-widget-container">
			<pre class='line-numbers theme-okaidia' data-show-toolbar='yes'><code class='language-javascript'>    @Singleton
    @Provides
    fun provideRetrofit(): Retrofit{
        val okHttpClient = OkHttpClient().newBuilder()
            .connectTimeout(60, TimeUnit.SECONDS)
            .readTimeout(60, TimeUnit.SECONDS)
            .writeTimeout(60, TimeUnit.SECONDS)
            .build()
        return Retrofit.Builder()
            .baseUrl(Common.BASE_URL)
            .addConverterFactory(MoshiConverterFactory.create())
            .client(okHttpClient)
            .build();
    }</code></pre>		</div>
				</div>
				<div class="elementor-element elementor-element-bc7c133 elementor-widget elementor-widget-text-editor" data-id="bc7c133" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>5. Set the API endpoints</p>						</div>
				</div>
				<div class="elementor-element elementor-element-4d88ae1 elementor-widget elementor-widget-code-block-for-elementor" data-id="4d88ae1" data-element_type="widget" data-widget_type="code-block-for-elementor.default">
				<div class="elementor-widget-container">
			<pre class='line-numbers theme-okaidia' data-show-toolbar='yes'><code class='language-javascript'>interface ArticleApi: Common {

    @GET(&quot;node/article&quot;)
    suspend fun getArticles(): ArticleResponse;

}</code></pre>		</div>
				</div>
				<div class="elementor-element elementor-element-ef40bde elementor-widget elementor-widget-text-editor" data-id="ef40bde" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>6. Ensure you have the requisite permissions </p>						</div>
				</div>
				<div class="elementor-element elementor-element-a77a1b2 elementor-widget elementor-widget-code-block-for-elementor" data-id="a77a1b2" data-element_type="widget" data-widget_type="code-block-for-elementor.default">
				<div class="elementor-widget-container">
			<pre class='line-numbers theme-okaidia' data-show-toolbar='yes'><code class='language-javascript'>    /* AndroidManifest.xml file */
    &lt;uses-permission android:name=&quot;android.permission.ACCESS_NETWORK_STATE&quot; /&gt;
    &lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&gt;
    &lt;uses-permission android:name=&quot;android.permission.ACCESS_WIFI_STATE&quot; /&gt;</code></pre>		</div>
				</div>
				<div class="elementor-element elementor-element-d97ddb7 elementor-widget elementor-widget-code-block-for-elementor" data-id="d97ddb7" data-element_type="widget" data-widget_type="code-block-for-elementor.default">
				<div class="elementor-widget-container">
			<pre class='line-numbers theme-okaidia' data-show-toolbar='yes'><code class='language-javascript'>/* Kotlin Activity class */

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {


    @Inject
    lateinit var articleRepository: ArticleRepository;
    lateinit var mainActivityMvc: MainActivityMvc;
    lateinit var networkTools: NetworkTools;
    val mainActivityViewModel: MainActivityViewModel by viewModels&lt;MainActivityViewModel&gt;();

    companion object {
        lateinit var appCompatActivity: AppCompatActivity;
    }

    init {
        appCompatActivity = this;
    }


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mainActivityMvc =
            MainActivityMvc(LayoutInflater.from(this), null, this, articleRepository, mainActivityViewModel);
        setContentView(mainActivityMvc.getRootView_())
        networkTools = NetworkTools(this);
        mainActivityMvc.setListerners();
        appCompatActivity = this;
        mainActivityMvc.sendAPIRequest();
        mainActivityViewModel.observe(this, this, mainActivityMvc, mainActivityViewModel);

        requestMultiplePermissionLauncher.launch(
            arrayOf(
                Manifest.permission.INTERNET,
                Manifest.permission.ACCESS_NETWORK_STATE
            )
        )



    }

    override fun onResume() {
        super.onResume()

        if (networkTools.checkConnectivity()) {

        }


    }

    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            val homeIntent = Intent(Intent.ACTION_MAIN)
            homeIntent.addCategory(Intent.CATEGORY_HOME)
            homeIntent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
            startActivity(homeIntent)
            return true
        }
        return super.onKeyDown(keyCode, event)
    }

    private val requestMultiplePermissionLauncher =
        registerForActivityResult(
            ActivityResultContracts.RequestMultiplePermissions()
        ) { result -&gt;

        }



}</code></pre>		</div>
				</div>
				<div class="elementor-element elementor-element-0fc6010 elementor-widget elementor-widget-text-editor" data-id="0fc6010" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h4> </h4><p>The above codebase is also available on <em><a href="https://bit.ly/3LQVr8s">Github</a></em> </p><p> </p><p><em><a href="https://bit.ly/3YsPhmL" target="_blank" rel="noopener">Symatech Labs</a> is a Software Development company based in Nairobi, Kenya that specializes in Software Development, Mobile App Development, Web Application Development, Integrations, USSD and Consultancy.</em></p>						</div>
				</div>
					</div>
		</div>
							</div>
		</section>
							</div>
		<p>The post <a href="https://symatechlabs.com/create-an-android-mobile-app-using-kotlin-that-consumes-an-api-from-a-drupal-instance/">Create An Android Mobile App Using Kotlin That Consumes An API From A Drupal Instance</a> appeared first on <a href="https://symatechlabs.com">Symatech Labs</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Steps of Creating A Custom Camera using CameraX Library in Android</title>
		<link>https://symatechlabs.com/steps-of-creating-a-custom-camera-using-camerax-library-in-android/</link>
		
		<dc:creator><![CDATA[Symatech Labs]]></dc:creator>
		<pubDate>Thu, 11 Apr 2024 18:58:19 +0000</pubDate>
				<category><![CDATA[Mobile Apps]]></category>
		<category><![CDATA[Software Development]]></category>
		<guid isPermaLink="false">https://symatechlabs.com/?p=70677</guid>

					<description><![CDATA[<p>Steps of Creating A Custom Camera using CameraX Library in Android Comparatively, building a custom camera with Android&#8217;s CameraX library is &#8220;easier&#8221; than with the previous android.hardware.Camera API. android.hardware.Camera  had little control over exposure, focussing, and camera settings. It was devoid of many sophisticated features seen in contemporary cameras. The goal of Android Jetpack, which [&#8230;]</p>
<p>The post <a href="https://symatechlabs.com/steps-of-creating-a-custom-camera-using-camerax-library-in-android/">Steps of Creating A Custom Camera using CameraX Library in Android</a> appeared first on <a href="https://symatechlabs.com">Symatech Labs</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="70677" class="elementor elementor-70677">
									<section class="elementor-section elementor-top-section elementor-element elementor-element-293221d elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="293221d" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7d58903" data-id="7d58903" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-2e216cf elementor-widget elementor-widget-text-editor" data-id="2e216cf" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h2>Steps of Creating A Custom Camera using CameraX Library in Android</h2><p>Comparatively, building a custom camera with Android&#8217;s <a href="https://developer.android.com/media/camera/camerax" target="_blank" rel="noopener">CameraX</a> library is &#8220;easier&#8221; than with the previous <a href="https://developer.android.com/reference/android/hardware/Camera" target="_blank" rel="noopener"><em><strong>android.hardware.Camera</strong></em></a> API. <a href="https://developer.android.com/reference/android/hardware/Camera" target="_blank" rel="noopener"><em><strong>android.hardware.Camera</strong></em></a>  had little control over exposure, focussing, and camera settings. It was devoid of many sophisticated features seen in contemporary cameras. The goal of <a href="https://developer.android.com/jetpack" target="_blank" rel="noopener">Android Jetpack</a>, which includes <a href="https://developer.android.com/media/camera/camerax" target="_blank" rel="noopener">CameraX</a>, is to simplify and standardize camera development across various Android devices.</p><p>Below are steps you can use when creating your custom camera.</p><h3> </h3><h3>Step One: Dependancies</h3><p>Add the following dependancies to the <strong><em>build.gradle.kts</em></strong> file. Sync the project to download the libraries to your local set up. You might experience some configuration issues, in that case you can always go through/download the source code as on <a href="https://bit.ly/3W20dGq" target="_blank" rel="noopener">Github.</a></p><p><img decoding="async" class="alignnone size-full wp-image-70679" src="https://symatechlabs.com/wp-content/uploads/2024/04/carbon.png" alt="Add dependancies Camera X" width="2800" height="640" /></p><h4> </h4><h3>Step Two: Set up the permissions</h3><p>Add the following permissions on your<strong><em> AndroidManifest.xml</em></strong> file.</p><p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-70683" src="https://symatechlabs.com/wp-content/uploads/2024/04/Android_Manifest_CameraX.png" alt="" width="2800" height="640" /></p><h3> </h3><h3>Step Three: Set up the Layout</h3><p>Include the <a href="https://developer.android.com/media/camera/camerax/preview" target="_blank" rel="noopener">PreviewView</a> in your layout file.</p><p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-70688" src="https://symatechlabs.com/wp-content/uploads/2024/04/camera_x_xml_layout.png" alt="" width="2800" height="2464" /></p><h3> </h3><h3>Step Four: Jump to the code</h3><p>In this case we used an <a href="https://developer.android.com/guide/components/activities/intro-activities" target="_blank" rel="noopener">Activity</a>, the same can also be done for <a href="https://developer.android.com/guide/fragments" target="_blank" rel="noopener">Fragments</a>. The full codebase can be found on <a href="https://bit.ly/3W20dGq">Github.</a></p><p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-70684" src="https://symatechlabs.com/wp-content/uploads/2024/04/CameraX_Kotlin_Android_Code.png" alt="" width="2800" height="3618" /></p><h3> </h3><h3>Final output</h3><p>Find the final output in the <a href="https://www.youtube.com/shorts/KsdO0iCyLjo" target="_blank" rel="noopener">YouTube Video</a> below.</p><p><iframe loading="lazy" title="Steps of Creating A Custom Camera Using CameraX Library In Android" width="1778" height="1000" src="https://www.youtube.com/embed/KsdO0iCyLjo?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><p><em><a href="https://symatechlabs.com/contact-us/" target="_blank" rel="noreferrer noopener">Symatech L</a><a href="https://symatechlabs.com/" target="_blank" rel="noreferrer noopener">abs</a> is a Software Development company based in Nairobi, Kenya that specializes in Software Development, Mobile App Development, Web Application Development, Integrations, USSD and Consultancy.</em></p>						</div>
				</div>
					</div>
		</div>
							</div>
		</section>
							</div>
		<p>The post <a href="https://symatechlabs.com/steps-of-creating-a-custom-camera-using-camerax-library-in-android/">Steps of Creating A Custom Camera using CameraX Library in Android</a> appeared first on <a href="https://symatechlabs.com">Symatech Labs</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How To Make Your Android App The Default SMS App</title>
		<link>https://symatechlabs.com/how-to-make-your-android-app-the-default-sms-app/</link>
		
		<dc:creator><![CDATA[Symatech Labs]]></dc:creator>
		<pubDate>Sat, 02 Dec 2023 19:45:13 +0000</pubDate>
				<category><![CDATA[Mobile Apps]]></category>
		<category><![CDATA[Software Development]]></category>
		<guid isPermaLink="false">https://symatechlabs.com/?p=70409</guid>

					<description><![CDATA[<p>How To Make Your Android App The Default SMS App   SMSs are still here with us, 30 years later. Software engineers have built amazing experiences around SMSs complimenting stock SMS clients (SMS Apps that come with your phone/device). To do this, it  is a requirement to make the mobile application the default messaging app [&#8230;]</p>
<p>The post <a href="https://symatechlabs.com/how-to-make-your-android-app-the-default-sms-app/">How To Make Your Android App The Default SMS App</a> appeared first on <a href="https://symatechlabs.com">Symatech Labs</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="70409" class="elementor elementor-70409">
									<section class="elementor-section elementor-top-section elementor-element elementor-element-04ed3ed elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="04ed3ed" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-de5fb91" data-id="de5fb91" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-82f5a6b elementor-widget-mobile__width-inherit elementor-widget elementor-widget-text-editor" data-id="82f5a6b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p></p>
<h2>How To Make Your Android App The Default SMS App</h2>
<p> </p>
<p>SMSs are still here with us, <a href="https://www.vodafone.com/news/technology/25-anniversary-text-message" target="_blank" rel="noopener">30 years</a> later. Software engineers have built amazing experiences around SMSs complimenting stock SMS clients <em>(SMS Apps that come with your phone/device)</em>. To do this, it  is a requirement to make the mobile application the default messaging app running on the Android phone/device.</p>
<p> </p>
<h3>Steps</h3>
<p><strong>1. Android Manifest</strong></p>
<p>Set up your manifest to have the following: </p>
<p><iframe src="https://pl.kotl.in/IY9FP6T91"></iframe></p>
<p> </p>
<p><strong>2. Broadcast Receivers</strong></p>
<p>Have a <a href="https://developer.android.com/guide/components/broadcasts" target="_blank" rel="noopener">broadcast receiver</a> to allow your Android app to receive incoming SMS messages.</p>
<p> </p>
<p><iframe src="https://pl.kotl.in/q3lsrIxKp"></iframe></p>
<p>Have another <a href="https://developer.android.com/guide/components/broadcasts" target="_blank" rel="noopener">broadcast receiver</a> to allow your Android app to receive incoming MMS messages.</p>
<p> </p>
<p><iframe src="https://pl.kotl.in/7u06KlfHn"></iframe></p>
<p> </p>
<p><strong>3. Activity</strong></p>
<p>This activity could be where you would have the bulk of the default SMS app functionality <em>i.e. send SMS, view SMS etc.</em> </p>
<p> </p>
<p><iframe src="https://pl.kotl.in/-aP0FtRAX"></iframe></p>
<p>There&#8217;s a function <em><strong>areWeTheDefaultMessagingApp()</strong> </em>that checks for the default SMS app on the device and returns a boolean <em>(<strong>false</strong> if the Android app you are building is not the default SMS app)</em>. How it is currently set up on the <a href="https://bit.ly/419jir4" target="_blank" rel="noopener">codebase</a> is that the button, when clicked, invokes the said function and depending on the returned value, the option of selecting the default SMS app runs. One should not be limited to doing the same using a button, you can have the function running when the app starts.</p>
<p> </p>
<p><img loading="lazy" decoding="async" class="size-full wp-image-70471 aligncenter" src="https://symatechlabs.com/wp-content/uploads/2023/12/Screenshot_20231202_221748_Permission-controller-portrait-2.png" alt="" width="268" height="300" /></p>
<p>Google announced an impending modification to the way the OS handled SMS apps just before releasing Android 4.4 <em>&#8220;Kit Kat&#8221;</em>. In the past, your Android device could be configured to receive or send SMS messages from any number of apps. Google has attempted to tighten all of that with Kit Kat, restricting the OS to essentially letting only one app send and receive SMS and MMS messages.</p>
<p> </p>
<p><strong>4. Intent Service</strong></p>
<p>There could be occasions where you might want users to promptly reply to incoming phone calls by sending an instant text message.</p>
<p> </p>
<p><iframe src="https://pl.kotl.in/uSOHE8_aK"></iframe></p>
<p>The above codebase is also available on <a href="https://bit.ly/419jir4" target="_blank" rel="noopener">Github</a> </p>
<p> </p>
<p><em><a href="https://symatechlabs.com/contact-us/" target="_blank" rel="noreferrer noopener">Symatech L</a><a href="https://symatechlabs.com/" target="_blank" rel="noreferrer noopener">abs</a> is a Software Development company based in Nairobi, Kenya that specializes in Software Development, Mobile App Development, Web Application Development, Integrations, USSD and Consultancy.</em></p>
<p> </p>						</div>
				</div>
					</div>
		</div>
							</div>
		</section>
							</div>
		<p>The post <a href="https://symatechlabs.com/how-to-make-your-android-app-the-default-sms-app/">How To Make Your Android App The Default SMS App</a> appeared first on <a href="https://symatechlabs.com">Symatech Labs</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Why some Apps require the Device Admin Permission</title>
		<link>https://symatechlabs.com/why-some-apps-require-the-device-admin-permission/</link>
		
		<dc:creator><![CDATA[Brian Osoro]]></dc:creator>
		<pubDate>Fri, 19 May 2023 21:18:27 +0000</pubDate>
				<category><![CDATA[Mobile Apps]]></category>
		<category><![CDATA[Software Development]]></category>
		<guid isPermaLink="false">https://www.symatechlabs.com/blog/?p=126</guid>

					<description><![CDATA[<p>Android provides support for some applications through the Android Device Administration API. This API enables device administration features at the system level, allowing the creation of security-conscious apps that are valuable in enterprise environments where IT professionals require extensive control over companies devices.   A common use case for using the Device Admin Permission is [&#8230;]</p>
<p>The post <a href="https://symatechlabs.com/why-some-apps-require-the-device-admin-permission/">Why some Apps require the Device Admin Permission</a> appeared first on <a href="https://symatechlabs.com">Symatech Labs</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="126" class="elementor elementor-126">
									<section class="elementor-section elementor-top-section elementor-element elementor-element-7d3b2ca5 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7d3b2ca5" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-203600a" data-id="203600a" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-55c30a70 elementor-widget elementor-widget-text-editor" data-id="55c30a70" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							
<p><strong><a href="https://www.android.com/" target="_blank" rel="noreferrer noopener">Android</a></strong> provides support for some applications through the <a href="https://developer.android.com/reference/android/app/admin/DeviceAdminInfo" target="_blank" rel="noreferrer noopener"><strong>Android Device Administration API</strong></a>. This API enables device administration features at the system level, allowing the creation of security-conscious apps that are valuable in enterprise environments where IT professionals require extensive control over companies devices.</p>

<p> </p>
<p>A common use case for using the Device Admin Permission is when a company buys devices for it&#8217;s employers and wants to set policies which are to be adhered to. The policies include:</p>
<p> </p>

<ol class="wp-block-list">
<li>Disabling all cameras of a phone</li>

<li>Disables use of <a href="https://stackoverflow.com/questions/17689842/what-is-the-keyguard-in-android" target="_blank" rel="noreferrer noopener">keyguard features</a>.</li>

<li>Enforce a password change for users within a time limit specified by the administrator.</li>

<li>Force the device to lock or limit the maximum lock timeout for the device.</li>

<li>Limit the passwords that the user can select.</li>

<li>Enforce the device password reset.</li>

<li>Observe login attempts by the user.</li>

<li>Force the device to go on factory reset.</li>

<li>Wipe the device&#8217;s data.</li>
</ol>

<p> </p>
<p>It is important to note that before the above functionalities can run, one needs to accept and enable the Device Admin App. Upon enabling the Device Admin App, users become bound by its policies, which often result in privileges such as accessing sensitive systems and data.</p>

<p> </p>
<p>An example of an App that makes use of the Device Admin Permission is <a href="https://bit.ly/3MnRQyx" target="_blank" rel="noreferrer noopener"><strong>PinFailed</strong></a>, an App we developed. You can also find it&#8217;s source code on <a href="https://bit.ly/3MoYVio" target="_blank" rel="noreferrer noopener"><strong>Github</strong></a></p>

<p> </p>

<p><em><strong><a href="https://symatechlabs.com/contact-us/" target="_blank" rel="noreferrer noopener">Symatech Labs</a></strong> is a Software Development company based in Nairobi, Kenya that specializes in Software Development, Mobile App Development, Web Application Development, Integrations, USSD and Consultancy.</em></p>
						</div>
				</div>
					</div>
		</div>
							</div>
		</section>
							</div>
		<p>The post <a href="https://symatechlabs.com/why-some-apps-require-the-device-admin-permission/">Why some Apps require the Device Admin Permission</a> appeared first on <a href="https://symatechlabs.com">Symatech Labs</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Native Apps vs Hybrid Apps: Who Wins?</title>
		<link>https://symatechlabs.com/native-apps-vs-hybrid-apps-who-wins/</link>
		
		<dc:creator><![CDATA[Brian Osoro]]></dc:creator>
		<pubDate>Thu, 27 Jan 2022 10:59:48 +0000</pubDate>
				<category><![CDATA[Mobile Apps]]></category>
		<guid isPermaLink="false">https://www.symatechlabs.com/blog/?p=60</guid>

					<description><![CDATA[<p>To put it simply, the key distinction between hybrid and native apps is that hybrid apps are developed to work across multiple platforms, whilst native apps are created for a single operating system. It&#8217;s the difference between having a separate build for each smartphone operating system and having an app that works across all platforms. [&#8230;]</p>
<p>The post <a href="https://symatechlabs.com/native-apps-vs-hybrid-apps-who-wins/">Native Apps vs Hybrid Apps: Who Wins?</a> appeared first on <a href="https://symatechlabs.com">Symatech Labs</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="60" class="elementor elementor-60">
									<section class="elementor-section elementor-top-section elementor-element elementor-element-2c39f608 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="2c39f608" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-434ce20c" data-id="434ce20c" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
								<div class="elementor-element elementor-element-3c2f23dc elementor-widget elementor-widget-text-editor" data-id="3c2f23dc" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p><span data-preserver-spaces="true">To put it simply, the key distinction between hybrid and native apps is that hybrid apps are developed to work across multiple platforms, whilst native apps are created for a single operating system. It&#8217;s the difference between having a separate build for each smartphone operating system and having an app that works across all platforms.</span></p>
<p><span data-preserver-spaces="true">Native app development relies on a programming language that has been defined by the operating system. Android makes use of </span><em><span data-preserver-spaces="true">Kotlin</span></em><span data-preserver-spaces="true"> and </span><em><span data-preserver-spaces="true">Java,</span></em><span data-preserver-spaces="true"> while iOS uses the </span><em><span data-preserver-spaces="true">Swift</span></em><span data-preserver-spaces="true"> programming language.</span></p>
<p><span data-preserver-spaces="true">Hybrid app development makes use of frameworks, i.e., React Native, Xamarin, Flutter, and others, that would ultimately run inside the smartphone device&#8217;s browser engine to render the code base and access native APIs.</span></p>
<figure id="attachment_66" aria-describedby="caption-attachment-66" style="width: 300px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-66 size-medium" src="http://176.58.107.223/staging/wp-content/uploads/2022/01/hybrid_vs_native-300x171.png" alt="hybrid_vs_native" width="300" height="171" srcset="https://symatechlabs.com/wp-content/uploads/2022/01/hybrid_vs_native-300x171.png 300w, https://symatechlabs.com/wp-content/uploads/2022/01/hybrid_vs_native.png 717w" sizes="auto, (max-width: 300px) 100vw, 300px" /><figcaption id="caption-attachment-66" class="wp-caption-text">An illustration of how Hybrid Apps work</figcaption></figure>
<p><span data-preserver-spaces="true"> So how do the two compare</span><span data-preserver-spaces="true"> </span></p>

<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis: 100%;">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<figure class="wp-block-table aligncenter is-style-stripes">
<table>
<tbody>
<tr>
<td class="has-text-align-center" data-align="center"><strong>Native Apps</strong></td>
<td class="has-text-align-center" data-align="center"><strong>Hybrid Apps</strong></td>
</tr>
<tr>
<td class="has-text-align-center" data-align="center">They are language-specific, as defined by the platform (Android/iOS).</td>
<td class="has-text-align-center" data-align="center">Not language-specific, a single code base can be deployed on multiple platforms.</td>
</tr>
<tr>
<td class="has-text-align-center" data-align="center">The performance of native apps is far much more superior in comparison to hybrid apps. They execute faster and consistently, access to the device&#8217;s native features is almost guaranteed.</td>
<td class="has-text-align-center" data-align="center">They execute at a relatively slow speed and in some cases, the developers would have to come up with custom wrappers when accessing the device&#8217;s native features.</td>
</tr>
<tr>
<td class="has-text-align-center" data-align="center">They are relatively expensive to build as each platform (Android/iOS) would require its own code base. This also means that the development time will be slightly longer.</td>
<td class="has-text-align-center" data-align="center">They are relatively cheaper to build as one code base can be used for multiple platforms. Development time for hybrid apps will be shorter in comparison to native apps.</td>
</tr>
</tbody>
</table>
</figure>
</div></div>
</div>
</div>
</div></div>

<p> </p>

<p>At the end of the day, the choice between the two has to be based on the business requirements and expected outcome the mobile app is to have.</p>

<p> </p>

<p><em><a href="https://symatechlabs.com/contact-us/" target="_blank" rel="noreferrer noopener">Symatech L</a><a href="https://symatechlabs.com" target="_blank" rel="noreferrer noopener">abs</a> is a Software Development company based in Nairobi, Kenya that specializes in Software Development, Mobile App Development, Web Application Development, Integrations, USSD and Consultancy.</em></p>

<p> </p>
						</div>
				</div>
					</div>
		</div>
							</div>
		</section>
							</div>
		<p>The post <a href="https://symatechlabs.com/native-apps-vs-hybrid-apps-who-wins/">Native Apps vs Hybrid Apps: Who Wins?</a> appeared first on <a href="https://symatechlabs.com">Symatech Labs</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
