Frequently Asked Questions

When you are looking to engage an app development company for your project you are bound to have lots of questions. You might find the information you are looking for below, however, please feel free to get in touch with us to ask for advice.
We have offered low-cost, cutting-edge app development services since the year 2000 and will be happy to answer any questions you have and provide a fixed-price detailed quote for your app development requirements. We are happy to sign a non-disclosure agreement (NDA) if you require it.

We do not employ sales staff nor do we have an expensive swanky office and therefore we have very low fixed costs and can charge extremely competitive rates for our custom app development services.
App development is a very fast-moving world where technological advances, device & browser capabilities and end-user expectations are evolving at a tremendous pace. Whilst we have been developing complex bespoke applications for over 20 years, we do not rest on our laurels and we keep abreast of all the latest trends and technologies in the app development arena to make sure we are always offering the most advanced, secure and robust application solutions for our clients.
If you are looking for a bespoke Android app that will also run on supported Chromebooks, look no further, we can develop your Android app!

By allowing your Android app to work well on Chromebooks, you can take advantage of large screens, keyboard/mouse input, stylus capabilities, and higher processing power while reaching new users (for example, as of January 2019 there are over 30 million Chromebooks used by students and teaching staff).

Optimising a bespoke Android app for the Chrome operating system is relatively easy for developers like us who have worked as bespoke developers and software engineers for the last 20 years and optimising an Android app for Chrome OS offers big rewards in usability and functionality. Allowing your app to handle keyboard and mouse input correctly can make your app more accessible for users who have difficulty with typical smartphone interfaces.

What are the main optimisations needed for Android apps to run well on Chromebooks?

The key optimisations for Chrome OS are the following:

Handle keyboard input including
  • Enter key
  • Arrow keys
  • Ctrl- and Ctrl-Shift- shortcuts
  • Visual feedback for currently selected items

Handle mouse input including
  • Right-click
  • Hover effects
  • Tooltips
  • Drag and drop
What is ARCore?
ARCore is Google’s platform for building augmented reality apps on Android, basically tracking the position of the mobile device as it moves, and building its own understanding of the real world.

Android apps integrated with the ARCore APIs allow your phone to sense its environment and enable multiple users to place virtual content in the same real world location that can be seen on different devices in the same position and orientation relative to the environment. This is due to "Anchors" that are hosted in the cloud and can be used by multiple users to establish a common frame of reference across users and their devices.

When an Anchor is hosted, the anchor's pose and limited data about the user's physical surroundings is uploaded to the ARCore Cloud Anchor Service. Once an anchor is hosted successfully, the anchor becomes a Cloud Anchor and is assigned a unique cloud anchor ID. ARCore apps that use Cloud Anchors are responsible for sharing and exchanging app specific cloud anchor IDs with other users in the same location. Once a cloud anchor ID for a previously hosted anchor is shared with another user, that user can use the Cloud Anchor API to create a local anchor by resolving the provided Cloud Anchor ID. This creates a new anchor with the original anchor's pose, provided that the two devices are present in the same physical environment as the original hosting device, and that the Cloud Anchor has not expired (they expire after 24 hours).

Augmented Reality Apps on Android

Key Capabilities
ARCore uses three key capabilities to integrate virtual content with the real world as seen through your phone's camera:

  • "Motion Tracking" allows the phone to understand and track its position relative to the world by using a process called concurrent odometry and mapping (COM).

  • "Environmental Understanding" allows the phone to detect the size and location of horizontal, vertical and angled surfaces by detecting feature points and planes and we can use this information to place virtual objects resting on flat surfaces.

  • "Light Estimation" allows the phone to estimate the environment's current lighting conditions by providing us with the average intensity and colour correction of a given camera image so we can light your virtual objects under the same conditions as the environment around them, increasing the sense of realism.

Supported Devices
ARCore is designed to work on a wide variety of Android phones running Android 7.0 (Nougat) and later.
Whilst Artificial Intelligence and Machine Learning have been around for a while, it is only recently that Deep Learning architectures, such as deep neural networks, are within reach of specialist app developers. Deep Learning architectures allow app developers to integrate Machine Learning (i.e. allowing apps to use data and then learn for themselves) into low-cost bespoke apps. Think of Machine Learning as teaching applications to think like humans whilst being far better than humans with regard to speed of computation and eliminating human error.

Visual Recognition
We have been testing the use of artificial intelligence and machine learning for our bespoke apps and we are simply blown away by what we can achieve in the sphere of image recognition by training deep convolutional neural networks with machine learning algorithms. Google’s Artificial Intelligence unit has made available powerful Machine Learning frameworks like TensorFlow (an open source software library for numerical computation) which are causing a major paradigm shift in the way in which we can give "intelligence" to the bespoke enterprise apps we develop for UK businesses.
Try it!

Voice Recognition
Recognising and distinguishing between different voices within an audio stream when more than one person is talking is very difficult for artificial intelligence (AI). However, Google has developed a new technique of "Speaking Diarization" which is able to achieve circa 92 per cent precision. At the end of October 2018 the basic algorithms were made publicly available in open source form so that they can also be used by third-party developers. We of course took advantage of Google’s largesse and have downloaded what is called their “Unbounded Interleaved-State Recurrent Neural Network (UIS-RNN)” algorithm and are currently experimenting with it. The potential of this technology is enormous, e.g. the AI being able to follow a doctor-patient conversation.
Learn more

Android Neural Networks API
Released in November 2017, the Android Neural Networks API (NNAPI) is used to perform demanding, in-depth, data-processing activities for Machine Learning on smartphones and tablets and contributes a foundation for powerful Machine Learning frameworks like TensorFlow Lite which instruct and teach neural networks. The API is available on smartphones and tablets running Android 8.1 (API level 27) or higher.

NNAPI aids "inferencing" (i.e. deduction, the steps needed to move from assumptions to conclusions) by applying data from Android devices to previously worked out models such as categorising images, forecasting user behavior and providing pertinent responses to a search query.
Learn more

Google Cloud Machine Learning Engine
Google Cloud Machine Learning Engine allows us to create machine learning models that work on all types of data with no size restrictions. It can take any TensorFlow model and perform large scale training (i.e. the software learns from the data) and support thousands of users and many terabytes of data (a terabyte = 1,024 gigabytes).

The service is integrated with Google Cloud Dataflow for pre-processing, allowing us to access data from Google Cloud Storage and Google BigQuery should we wish to. Basically it allows us to harness the power of Google's global data centres and networks to perform high-end Machine Learning which was previously only available to the likes of massive research organisations such as CERN (European Organization for Nuclear Research) when analysing data from the Large Hadron Collider to confirm the existence of the Higgs boson.
Learn more

Some Innovative Uses for Machine Learning & Artificial Intelligence
Assisting Pathologists in Detecting Cancer with Deep Learning
Investigating how deep learning can be applied to digital pathology, by creating an automated detection algorithm that can naturally complement pathologists’ workflow.

Understanding Medical Conversations
Could the voice recognition technologies already available in Google Assistant, Google Home, and Google Translate be used to document patient-doctor conversations and help doctors and scribes summarize notes more quickly?

DeepVariant: Highly Accurate Genomes With Deep Neural Networks
The open source release of DeepVariant, a deep learning technology to reconstruct the true genome sequence from HTS sequencer data with significantly greater accuracy than previous classical methods.

Closing the Simulation-to-Reality Gap for Deep Robotic Learning
Simulating many years of robotic interaction is quite feasible with modern parallel computing, physics simulation, and rendering technology. Moreover, the resulting data comes with automatically-generated annotations, which is particularly important for tasks where success is hard to infer automatically.
We leverage 20 years of skill and expertise in commercially-proven bespoke app development to develop affordable, bespoke Android apps.

If you are looking for a low-cost, cutting-edge, custom-made Android app, you have come to the right place. We have traded as New Media Aid Ltd in Hitchin, Hertfordshire, UK (only 30 minutes from Central London and Cambridge) since the year 2000 and we provide low-cost Android app development services by leveraging 20 years of skill and expertise in commercially-proven app development.

The Android apps we create and code are developed with the best Android developer tools and our mobile app developers follow all the latest Android development tutorials from Google’s Android engineers to make sure our custom-made Android apps are cutting-edge whilst still being robust, stable and secure.

In short, we are a UK Android app development company providing UK businesses with low-cost bespoke enterprise apps for Android devices (e.g. smartphones, tablets and barcode scanners).
We are seasoned web app developers who build bespoke e-commerce websites from the ground up (we do not simply resell ready-made e-commerce software like many design agencies tend to do) so you know you will be getting a bespoke e-commerce website that is 100 per cent tailored to your business requirements.

We will build into your bespoke e-commerce website all the features you require (just tell us what you want). We would generally recommend at least the following features for your e-commerce website:

Mobile Friendly
Most online sales through e-commerce websites are now performed on a smartphone or tablet rather from a PC. We will make your e-commerce website works perfectly and in a user-friendly manner (i.e. no pinching or zooming) on all smartphones and tablets as well as PCs.

Search Engine Friendly
Our e-commerce software engineers will code your e-commerce website so all product category and individual product pages have auto-generated search engine friendly URLs which will all be indexed by search engines such as Google. (e.g. and

Secure Content Management System (CMS)
The bespoke web app we develop for you will provide a secure online Content Management System (CMS) where you will be able to manage all your website content (even from your phone).

Product Management
You will be able to add, update, suspend and delete all products online through the CMS (categories, title, description, price, photos, videos, etc.) and we can give you all the variables you need for all your product categories (e.g. sizes, colours, etc.)

Stock Control
We will code your system so the stock number shown against each product is correct and will auto-update whenever a product is purchased. You will also be able to enter the stock locations to aid producing pick-lists for dispatch.

Promotional Discount Promo Codes
The e-commerce web app will give you the ability to create promo codes for fixed amounts, percentages, BOGOFF (Buy One Get One For Free), etc. which you can use in various marketing initiatives to generate new customers or to incentivise repeat purchases from existing customers.

Order Fulfilment & Dispatch Notification
Our web app developers will always add order fulfilment functionality to our bespoke e-commerce systems to make it really easy for your staff to fulfil and dispatch orders. For example you will be able to print off (or view on a phone/tablet) order pick lists with the ability to tick when an order has been prepared for dispatch and which will then send a dispatch notification email (or SMS text if you like) to the customer.

Product Reviews
Our expert e-commerce developers will code your e-commerce system so it can automatically send (a defined number of days after dispatch) an email asking customers to review the products purchased (e.g. select stars and add text review) which can then appear on the product details page (you will have the ability to edit or delete in case it is a malicious review).

Sales Statistics
We will give you the ability to view all sales stats required to help you manage and plan your online business. This will include graphical views and Excel spreadsheet generation in case you wish to slice and dice the data offline.
As low-cost custom app developers we are aware of the need to design and build cutting-edge bespoke applications with accessibility in mind.

What is accessibility?
Broadly speaking, when we say a website is accessible, we mean that the site's content is available, and its functionality can be operated, by literally anyone.

Even as bespoke app developers with decades of experience, we sometimes just assume that all users can see and use a keyboard, mouse, or touch screen, and can interact with the apps we develop in the same way. Whilst the majority of users will experience the app as the developer intended, users with any forms of common disability could experience issues that range from user-unfriendliness to complete showstoppers rendering the app unusable for them.

There are over 1 billion people with disabilities!

Whenever we are developing a custom app for our clients we will always consider the accessibility of the app's core components and features.

By integrating accessibility features we can improve your app's usability, especially for users with disabilities.

English: A collection of pictograms. Three of ...

English: A collection of pictograms. Three of them used by the United States National Park Service. A package containing those three and all NPS symbols is available at the Open Icon Library (Photo credit: Wikipedia)

Native Android Accessibility Features
Android has an accessibility layer that helps blind and low vision users navigate their Android devices more easily. These services provide things like text-to-speech, haptic feedback and trackball/directional pad navigation that augment the user experience.

Android Developer Accessibility Resources
Android app developers such as New Media Aid can use the resources below to design and test for accessibility. These accessibility testing tools can help our experienced Android app developers catch common mistakes like missing content descriptions, insufficient contrast, and undersized touch targets. Accessible Web Initiatives
There exist a number of global and country-specific committees defining standards and advising on accessibility requirements and features for app development. Here below are some of interest:

FCC Video Programming Accessibility Advisory Committee (VPAAC)
The Federal Communications Commission (FCC) is an independent agency of the United States government that regulates communications by radio, television, wire, satellite, and cable across the United States. VPAAC was created by the FCC to develop recommendations for increasing accessibility to video content on apps.

Web Content Accessibility Guidelines (WCAG)
Web Content Accessibility Guidelines (WCAG) 2.0 covers a wide range of recommendations for making Web content more accessible. Following these guidelines will make content accessible to a wider range of people with disabilities, including blindness and low vision, deafness and hearing loss, learning disabilities, cognitive limitations, limited movement, speech disabilities, photosensitivity and combinations of these. Following these guidelines will also often make your Web content more usable to users in general.
We are extremely confident in the quality of the apps we develop as well as the level of support we provide. However, we do understand that using a boutique app development company such as New Media Aid can be seen as risky by large corporations. As the saying goes: "Nobody ever got fired for choosing IBM".

To give complete peace of mind to customers we are happy to enter into a Software Escrow Agreement where the software source code is deposited with a neutral, third party escrow agent. The software source code can be released to you if we fail to maintain and update the software as specified in the software license agreement.

Your peace of mind is important to us!
Software Escrow is a simple way of protecting both our intellectual property rights whilst ensuring the long-term availability of your business-critical systems.

Most of our clients do not ask for escrow agreements as our level of support is outstanding and because the fees charged by escrow agents can be relatively high compared to the low prices we charge for the actual development of our web and mobile apps. However, if you want the peace of mind of an escrow agreement we are happy to deal with your escrow agent of choice.
What is WorkManager?
WorkManager is an Android library that supports asynchronous one-off and periodic tasks as well as managing network conditions, storage space and charging status.

It allows the chaining of complex work requests, including running work in parallel, so we can schedule the order that each action is performed, even when the app has been closed.

WorkManager is part of "Android Jetpack" which is an "Architecture Component" for "Background Processing" tasks that need to be carried out even when your users navigate away from your app (e.g. syncing data with a cloud server).

WorkManager sits on top of a few long-existing Android APIs such as “JobScheduler” and “AlarmManager” and it picks the best APIs to use depending on the version of Android installed on the user's Android device.

Android Jetpack
Jetpack is a collection of Android software components which make it faster for us to develop cutting-edge Android apps (the quicker we develop your bespoke Android apps the cheaper the price as we base the cost of our bespoke Android app development on the number of developer hours used to code and test your Android app). These components help us follow best practices, whilst simplifying complex tasks, so we can focus on coding the algorithms and business logic for your specific business requirements.

What are Android Architecture Components?
Android architecture components are a collection of software libraries that help us develop robust, scalable, testable, and maintainable bespoke Android apps. These include classes for managing the User Interface (UI) component lifecycle as well as handling data persistence whilst avoiding memory leaks.

What is the Android JobScheduler?
This is an Android API for scheduling various types of jobs which will be executed in your app's own process. The Android framework will be intelligent about when it executes jobs and will attempt to batch and defer them as much as possible. If we don't specify a deadline for a job, it will be run at any moment depending on the JobScheduler's internal queue. While a job is running the device stays awake for the duration of the job.

What is the Android AlarmManager?
The Android AlarmManager provides access to the system alarm services on an Android device which allows us to schedule your app to be run at some point in the future. When an alarm goes off we can automatically start your app if it is not already running. The AlarmManager is intended for cases where you want to have your application code run at a specific time, even if your application is not currently running.

What is Background Processing?
Every Android app has a main thread which is in charge of handling the UI (User Interface - i.e. the screen the user sees). If there is too much work happening on this thread, the app appears to hang or slow down, leading to a poor experience for your Android app's users. Any long-running computations and operations (e.g. syncing data with your cloud server) should be done on a separate background thread. In general, anything that takes more than a few milliseconds should be delegated to a background thread.

In order to maximise battery life, Android restricts background work when the app isn’t visible to the user.

  • Android 6.0 introduced Doze mode and app standby. Doze mode restricts app behaviour when the screen is off and the device is stationary. App standby puts unused applications into a special state that restricts their network access, jobs, and syncs.
  • Android 7.0 limited implicit broadcasts and introduced Doze-on-the-Go.
  • Android 8.0 further limited background behaviour, such as getting location in the background and releasing cached wakelocks.

WorkManager is designed to give the best possible behaviour under these restrictions.
We tend to develop bespoke enterprise Android apps for use by engineers, surveyors, salespeople, etc. who are out in the field and the data they see on the app (e.g. job details) and the data they capture on the app (e.g. text inputs, photos, videos, customer signatures) usually needs to be synced with other systems so management back in the office can update details which appear on the apps and likewise see data and reports which have been captured on the apps. We will generally do this by using background threads so we do not affect app performance when carrying out resource-intensive activities such as uploading saved videos to cloud-based systems.

The reason we do this on so called "background threads" is because every Android app has a main thread which is in charge of handling the User Interface (UI) - i.e. the app screens you see - and if we are doing too much work on this thread then the app can slow down, hang or even crash. Therefore, any long-running computations or operations (e.g. syncing data with servers) will mostly need to be done on a different background thread.

However, sometimes we need the data syncing operations to be performed on the main thread (e.g. we need to receive data from a remote location instantly when requested via say a button submission on the Android app) and in this case we can use a foreground service. If we use a foreground service this tells the Android operating system that the app is doing something important and shouldn’t be killed and users are aware of this action because they can see a notification (non-dismissible) in the notification tray.

If the task is deferrable and needs to run even if your device reboots or the app restarts, then we can use the Android WorkManager library (read more here). This is especially useful on newer versions of Android as the latest versions (Android 6 - Marshmallow and upwards) restrict background work when the app (or a foreground service notification) isn’t visible to the user.
The UK data centre we use has ISO 27001 certification which demonstrates that the data centre protects the confidentiality, integrity and availability of all the information within its organisation. This includes your information.

App Security
We develop our web apps with the assumption that they will be targeted by hackers and therefore we make sure that apps are coded in a way that protects them from hacking attempts (e.g. SQL Injection, Cross-Site Scripting, Cookie/Session manipulation, etc.). We keep abreast of current hacking trends and engage in "white hat" hacking attempts and "penetration testing" of our apps to help keep them secure.

Data Encryption
Where requested by the customer we will make sure that all data captured and stored on the apps we develop is encrypted with the strongest cryptography currently available to allow secure encoding and decoding of data.
Hope for the best, plan for the worst!
Servers and networks can always fail. It is how you deal with the failure that counts! We will work with our clients to define a disaster recovery plan relevant to the app solution we have developed for them. In the disaster recovery plan we specify the procedures we will follow in the event of a disaster. It will list the actions to be taken before, during and after a disaster. The objective of a disaster recovery plan is to minimize downtime and data loss. The plan minimises the disruption to operations and ensures an orderly recovery of data and service.

Benefits of drafting a disaster recovery plan
  • Minimise data loss risk
  • Provide a sense of security
  • Minimise risk of delays
  • Guarantee reliability of standby systems
  • Provide a standard for testing the plan
  • Minimise decision-making during a disaster
  • Lower stress levels during a disaster
We have been developing custom Android apps for UK businesses since the first stable version of Android in 2009, using a blend of cutting-edge development methods and deep knowledge and experience to deliver bespoke solutions for exchanging data between a client’s corporate systems and bespoke Android apps. Our flexible and client-focused approach uses the latest methods and technologies whilst remaining within the client's comfort zone (e.g. when integrating with legacy system EDIs).

Keep Using Without An Internet Connection!
We code all our Enterprise Android apps so any data which needs to be pulled from the cloud or data, photos, signatures which need to be pushed to the cloud (e.g. for real-time management reporting) is synced whenever there is an available Internet connection. This means your staff will be able to use the Android app we develop for you even when they are in an Internet connection black spot. Any operations or reporting they do on the app can be safely carried out and then this will sync with the web-based cloud systems (which we can develop for you) as soon as a connection is established.

How We Transfer Data From The Android App To Your Cloud Systems?
Most of the bespoke Android app solutions we develop for companies will be made up of an Android app which can be installed on your Android phones or tablets and a secure web-app which can be used for setting up Android app users, adding data which populates forms on the Android app, setting up customer sites, setting up technician jobs, etc.. We usually also develop an API as part of the web app so the web app can integrate with other corporate systems (CRMs etc.). We then tend to code the Android app and web apps to exchange data in JSON format. JSON is an acronym for JavaScript Object Notation which is an open-standard file format used to transmit data between devices. For photos taken, or signatures captured, on the Android device, we tend to convert the photos into a Base64 array (basically a very long string of data in ASCII format where each digit represents exactly 6 bits of data) and this is sent as JSON to the web app and then on the web app we convert that string back to an image so the photos and signatures are saved on your cloud systems as images.

How We Build Our Android Apps
We develop our Android apps in the Java programming language (the latest version is Java 9, released by Oracle in September 2017). In the early days of Android (back in 2009 for us) we used the Eclipse IDE with the ADT plugin (IDE stands for Integrated Development Environment which usually comprises a source code editor together with build and debugging tools; ADT stands for Android Development Tools and this plugin developed by the Android team at Google provided an integrated environment for the development of Android apps). In June 2015 Google announced that they would soon stop supporting ADT and any security bugs would not be fixed. Developers were therefore told they should migrate their apps to the new version of Android Studio which would become Android's official IDE. We of course followed this advice (we take security very seriously) and now all our Android apps are developed using Android's official IDE, Android Studio.

How Does This Help You The Client?
Well, Android Studio has a number of great features which help speed up the coding and testing of Android apps. The less time we spend coding and testing our bespoke apps, the cheaper the development costs for you.

Instant Run
A great feature of Android Studio is called “Instant Run” which allows us to see coding changes in real time on a running app. We can connect any of our Android devices to the development computer via a USB cable and as we change the Android app’s source code in Android Studio we see those changes instantly on the app running on the phone/tablet without having to restart the app or rebuild the APK. This makes our lives as Android developers so much easier compared to the lengthy process we used to have to follow when developing Android apps in Eclipse.

Code Editor
The code editor in Android Studio is excellent and helps us work faster (and write more accurate code) because it offers code completion (i.e. start typing and if offers suggestions), refactoring (i.e. restructuring existing Java code without changing app behaviour) and also code analysis.

Super-Fast Android Emulator
An emulator is a screen on your computer which simulates various Android phone, tablet, Android Wear, and Android TV devices. When using the Eclipse IDE, trying to test Android apps on the device emulator was painfully slow and kept crashing. The Android device emulator which comes with Android Studio is a great tool as it comes with configurations for popular devices and can transfer data faster than a real device connected via USB. The Android Emulator also allows us to simulate features such as GPS location, network latency, motion sensors, and multi-touch input. Together with the real Android devices we test our apps on, the emulator allows us to test the Android apps we develop on any number of device configurations so we are sure they will work as intended on the many Android devices out there in the wild!

What Happens If Testing Doesn't Pick Up A Bug?
Don't worry! We've got it covered! We build bug and error monitoring into all the Android apps we develop so we know instantly if there is a problem! We integrate ACRA (a leading open-source bug/crash reporting library) into our apps. This means we get instant notification if any of our apps crash or throw any type of error. This allows us to deal proactively with any issues which were not identified during our extensive pre-release testing.

What Is ACRA?
ACRA is a Java library which allows Android apps to automatically send crash or error reports to our report server. This allows our team to receive instant notifications when an app we have developed crashes or behaves erroneously.

Why Is ACRA So Good?
ACRA is a robust error notification tool which is running on over 1 billion Android devices worldwide. It allows us to receive far more detailed crash and error reports about the device running the app than the data displayed in say in Google Play. As we focus on the development of private enterprise Android apps rather than public consumer Android apps, this ACRA reporting tool is indeed priceless. Just some of the benefits of us integrating the free open-source ACRA bug and error monitoring into all our apps: We can add our own content or debug traces to the reports so we can get back error data relevant to the business logic of the specific Android app we developed. If there is no network coverage, ACRA crash/error reports are stored on the Android device and sent to our report server as soon as network coverage has returned.

What Do We Do With Crash Or Error Reports?
It is all well and good receiving data, it is how you use that data which counts. Our team get an email notification as soon as any of our apps generate any error or indeed crash. This error report tells us the device used, the screen they were on, the activity they were attempting when the error was thrown and the exact line of Java code which triggered the error. This allows us to look at the app source code and try to replicate that error and then resolve. We then push an automatic update of the Android app to devices so that error does not happen again.
When developing Android apps, the only constant is change! Android is evolving so quickly that sometimes it is hard to keep pace with developments. However, we try to keep ahead of the curve by continuously learning about advances in Android development and the Android operating system by following the resources shown below.

Android on YouTube
This is where Google's Android team place demos, tutorials, and anything else related to Android development. This is invaluable information for developers.
View Channel

Google Developers Blog
Google's latest news and updates for Android app developers. Here we find out first about new APIs which will allow us to code state-of-the-art Android apps faster and therefore cheaper for clients.
View Blog

Google I/O
Google I/O is an annual developer festival held at Mountain View, California. Here you see presentations, demonstrations and codelabs for the latest Android developments.
View Google I/O

Google Developers Codelabs
Here you can see videos from Google's Android engineering team that guide developers through integrating new cutting-edge features into their Android apps.
View Codelabs

Android Architecture Components
A collection of libraries that help us develop testable and maintainable Android apps. A library is a collection of precompiled routines that our apps can use.
View Components

Android API Package Index
These are the Android API packages. A package is a namespace that organises a set of related classes and interfaces, essential reading for app developers.
View Android API

Android API Class Index
Each Android API package contains classes which are the building blocks of Java. A class is a template that describes the data and behaviour of instances of that class.
View Android Classes
It is of the utmost importance to us, as professional software engineers specialising in the development of cutting-edge, custom-made Android apps, that we keep the data entered by users of our bespoke Android apps safe, secure and private (e.g. information they enter as text on forms or indeed photos, videos or signatures they take via the enterprise Android apps we have custom-developed for them).

This is not just about encrypting data (which is of course very important); it is making sure we store data in the most appropriate locations with regards to security. For example, all private data should be stored in the app's internal storage, not in the device's shared storage (which can be accessed by other apps if you have accepted they can 'access external storage' when installing those other apps). Of course all network traffic (e.g. when syncing data with cloud servers) should be sent over SSL and any third-party libraries or SDKs integrated with the Android apps we have developed will be kept up to date.

Each Android app we develop (in fact all Android apps) have their own internal storage directory that is private to the app and not accessible by any other apps on your device. No special permissions are required to access this directory (so users do not need to accept permissions on installation) and if the user uninstalls the app, these files are removed.

We follow industry best practice when developing bespoke Android apps to make sure they are as secure as possible!
When developing your custom-made Android apps we aim not to use any APIs that access personal data. However, if we need to access personal data (e.g. usernames, emails or passwords) we will always try not to store or transmit that data to reduce the risk of hackers trying to exploit the bespoke Android app we have developed for you. Also, for privacy compliance (e.g. GDPR) we have to explain the use and storage of any personal information in an app-specific privacy policy; the less personal data we store, the easier it is to adhere to global privacy legislation.

If the enterprise Android app we develop for you requires access to sensitive data, we will evaluate whether we need to transmit it to a cloud server for processing - e.g. we need to run CPU-intensive machine-learning (artificial intelligence) against the data - or if we can run the operation on the client. We will always try to run code using sensitive data on the client to avoid transmitting user data!

Likewise, if we need to create a GUID / UUID (globally unique identifier / universally unique identifier) on the app we will not use identifiers such as the phone number or IMEI as these could be associated with personal information. We will try to use Settings.Secure.ANDROID_ID which is an integer value generated and stored when the device is first booted.

Also, when developing our bespoke Android apps we utilise a great Android operating system tool called Logcat which dumps a log of all system messages (including stack traces when the device throws an error) as well as messages our Android app developers have written into your app with the Log class. Although these logs are automatically deleted whenever a device is rebooted, we make sure no sensitive data is included in these Logcat logs because they are a shared resource available to any app with READ_LOGS permission.
Nearly all mobile devices offer location awareness (i.e. we can tell the current location of a device) and the custom-made Android apps which our Android app development team code for you can utilise this data to say stamp the longitude, latitude and time on photos taken via the app as well as passing this data back to your server-based systems so management can monitor the location of staff out in the field. The device obtains this location data via either WiFi, GPS (Global Positioning System) or mobile phone networks but will use the most accurate one available.

If required we are also able to code your Android app so you can set up geofences (e.g. a circular area of a defined radius around locations based on longitude and latitude) and notify you if a user enters or exits the geofenced location.

Obviously, your staff out in the field may not like the idea of you knowing their exact location, however, as the bespoke Android apps we develop for you can continuously track location, it also means the apps can provide very useful information to users such as giving step by step directions while they are walking or driving.

In the early years of developing bespoke Android apps we used a mixture of GPS, Wi-Fi, mobile phone networks and device sensors such as the accelerometer, gyroscope and magnetometer to help establish the user's location and speed of travel. However, choosing the correct combination of these signals was very time-consuming (remember, the more time it takes for us to develop your bespoke Android app, the greater the cost of the Android app development project) and also it tended to put a strain on the device's battery. Luckily for our Android app development team, the Android engineers at Google have come up with the Fused Location Provider API which allows us to easily combine a number of signals so we can request the most accurate location data available (greater accuracy but more battery drain) or instead the best accuracy available without additional battery use which is useful when you just need to know roughly where your people are at any given time. Basically, the greater the location accuracy, the greater the battery drain.
Android Fused Location Provider API
When developing your tailor-made Android app we need to make sure that the app uses as little battery power as possible, starts up quickly and responds quickly and gracefully to user swipes and clicks. Nobody wants to use a sluggish app or one that drains the battery!
Processes and Threads
When the custom-made Android app we've developed for is started on your device, the Android operating system starts a new Linux process for the app with one "main" thread.

The default setting for the Android operating system is that all components of an Android app run in the same process. We do have the ability to change this in the app's manifest file so certain activities, services or broadcast receivers run in their own process (using the android:process attribute), however, we generally code our bespoke Android apps to use the default one-process model.

The process lifespan cannot be controlled by the custom-made Android app we've developed but is instead controlled by the Android operating system on the device which can kill processes if it needs to free up memory so we need to make sure important processes are in the foreground so the operating system knows they are running and therefore prioritises keeping them open over and above other conflicting demands for resources.

Our Android app development team pays particular attention to the interaction between activities, services and broadcast receivers to avoid the risk of the Android operating system killing the process before it has finished some mission-critical task.
As mentioned above, your app runs under the "main" thread which is generally the thread that deals with all UI activities (i.e. the User Interface screens you see when using the app). When the Android apps we develop need to carry out intensive tasks following say a user selection or button click, then this single thread model can give less than optimum performance (leading to screens 'hanging' or 'freezing' because the UI is blocked until such tasks have finished).

We have two basic rules when it comes to coding our bespoke Android apps:

1. Never block the main UI thread with intensive tasks.
2. Never access the UI from outside the main UI thread.

Background Threads
It is absolutely imperative that we do not block the main (UI) thread when performing resource-intensive tasks (like syncing data, photos or videos with the cloud) as otherwise our Android app could hang or freeze, and therefore we carry out these tasks on separate background threads. However, as we cannot update the UI (e.g. the app screen you see) from any thread apart from the "main" thread, the Android operating system gives us some 'Runnable' methods we can use to access/update the UI from a background thread.

This Android method executes the specified action on the main UI thread.
This Android method causes the Runnable to be added to the main UI thread's message queue.

View.postDelayed(Runnable, long)
This Android method causes the Runnable to be added to the main UI thread's message queue but to be run only after the amount of time set in the 'long' value has elapsed.

However, the aforementioned 'Runnable' methods to access the main UI thread from background threads become difficult to maintain (having to manage threads and handlers) and therefore in the bespoke Android apps we develop for clients we tend to always use the AsyncTask class for short background tasks (i.e. those taking no more than 5 seconds). If we need to keep background threads running for a long time due to some long-running operation, we can use dedicated Java APIs for long running thread tasks such as Executor.

The AsyncTask class allows our Android app developers to carry out short background tasks and then publish the results on the main UI thread without having to mess around with handlers.

This Java interface executes submitted Runnable tasks without our Android app developers having to know how each task will be run (e.g. thread use and scheduling).

Optimising our Android apps to conserve battery life
Nobody will want to use one of our custom-made Android apps out in the field (e.g. a travelling sales rep or engineer) if the app drains the battery before the day is out. Therefore making sure the Android apps we develop do not use battery power unnecessarily is of the utmost importance to us. We do this by using Android operating system features to manage an app's battery consumption as well as using tools during the testing phase of our Android app's development to identify any tasks which may be draining the battery. We will ask the client important questions during the discovery phase of their app's development, e.g. do they need data sent up to the cloud instantly or perhaps only when the device is charging. As syncing data with the cloud can be a big drain on the battery, it is always worth asking this question (although in our experience most clients want their field worker's data synced with their cloud based systems as soon as possible).

Our Android app developers have found that the best way to conserve the battery life of a device on which one of our bespoke Android apps is installed is to schedule jobs intelligently. These jobs are mainly to do with updating data from/to the cloud and updating background tasks. There are several Android APIs that our bespoke Android apps can use to schedule background work, however, the recommended option is currently the JobScheduler class which offers our Android app development team very scalable functionality and is suitable for large tasks such as syncing a database to the cloud.

Because the latest versions of Android aggressively restrict apps which hog system resources (e.g. memory or battery), e.g. they may block Location services when the screen is off so you cannot get the user’s current location or they may block Internet access to apps in the background which could stop data cloud syncing, we therefore try to test your app while battery saver is active to make sure everything works as it should when the operating system decides to restrict certain features when the app is not actively being used at that moment. Useful hint: you can turn on the battery saver manually through the device's Settings > Battery Saver screen.

There are also Android tools such as ‘Profile GPU Rendering’ and ‘Battery Historian’ to help our Android app developers to identify areas that they can optimise for an improved battery life.

Profile GPU Rendering
The Profile GPU Rendering tool tells us how long it takes to render the frames of an app screen (using a benchmark of 16ms per frame) which tells us if the GPU is getting overloaded when trying to render (draw) complex graphics etc. on the Android app screen.

Battery Historian
Battery Historian is a tool that allows developers to inspect app-specific battery use info while the Android device was not on charge.

Restricting an Android app's use of memory
Mobile devices usually have limited memory (RAM) so coding our Android apps to use the least possible memory (and release any allocated memory as soon as no longer needed) is very important. Fortunately for Android app developers, both the Android Runtime (ART) and Dalvik virtual machine keep track of memory allocation and carry out routine garbage collection (a mechanism for reclaiming unused memory).

The Android operating system sets a hard memory limit for each app depending on how much RAM in on the device and if our app reaches that limit it can trigger an out-of-memory error. Fortunately we can code our Android apps to interrogate the operating system (by calling the aptly named getMemory class) to see how many megabytes of data we have available in case we wish to cache a lot of data between screen loads rather than say writing to the SQLite database and reading back on the next screen load.
Because we develop bespoke Android apps for UK businesses who, a lot of the time, have users (e.g. surveyors, technicians, engineers, drivers, etc.) that have to work in remote areas or perhaps basements with poor or no internet / WiFi connectivity, we need to make sure that any data from remote servers (e.g. job/site data from project management systems and CRMs) persists locally on the app when they don't have an internet connection so the user can still browse that content while they are offline. Any user-initiated content changes are then synced to the server after the device is back online. This is done by saving data to a SQLite database.

What is a SQLite database?
SQLite is a self-contained, serverless, transactional SQL database engine and is the most widely deployed database in the world. It is available on the Android operating system via the android.database.sqlite package.

Unlike most other SQL databases (e.g. Microsoft SQL Server), SQLite does not have a separate server process because it reads and writes directly to disk files (a complete SQL database is contained within a single disk file).

Whilst SQLite runs faster the more memory you give it, performance is usually very good even in low-memory environments such as smartphones and tablets and SQLite responds well to memory failures and disk errors as transactions are ACID even if interrupted by system crashes. In computer science, ACID (Atomicity, Consistency, Isolation, Durability) is a set of database transaction properties meant to guarantee data validity even in the event of errors.

Since we started developing bespoke Android apps for our clients way back in 2009 (doesn't a decade fly by) we have always used Android's SQLite APIs and used an SQL helper to define how our databases look and coded methods that created and maintained the databases and their respective tables. This process can be time consuming and error prone, especially when having to make database table changes when say adding new features to an app we previously developed. Having to update the affected SQL queries manually as well as having to write a lot of boilerplate code to convert between SQL queries and data objects can take a lot of development time and testing.

Android Architecture Components

What is Room?
The Android Team at Google have recently launched a package called "Room" as part of their Architecture Components artifacts.

Room is a database layer that sits on top of the Android app's SQLite database and it deals with the time-consuming tasks that we used to handle with the SQLiteOpenHelper class (a helper class to manage database creation and version management).

Architecture Components help us to structure our bespoke Android apps in a way that is robust, testable, and maintainable with less boilerplate code. The less we have to code, the less we have to charge!

Room offers a layer that sits over SQLite to allow easy database access whilst maintaining the full power of SQLite.

There are 3 major components in Room:

  • Database: the main access point for app's persisted, relational data.

  • Entity: Represents a table within the database and to persist data we will use the Room persistence library where our bespoke Android app developers can define sets of related fields as "entities". A database table is created for each entity. However, to persist a field, Room must be given access to it, so we must either make it a public field or we can code a getter and setter (using JavaBean-like conventions in Room).

  • DAO (data access object): Contains the methods used for accessing the database. By accessing the bespoke Android app's database using a DAO class, instead of say the old-school method of query builders or using direct queries, we can separate different components of the app's database architecture which also permits us to simulate database access when we test your app. Also, these database queries run asynchronously on a background thread so we don't risk locking the user interface (UI) when retrieving lots of data (i.e. the screen freezing).

Our app can use the Room database to get the data access objects which in turn get entities from the database and save any changes to those entities back to the database. The app uses an entity to save and retrieve values that correspond to table columns within the database.

Android Room Architecture

What is a Repository?
A Repository is a class that we can use to access many different data sources (it handles data operations). Whilst the Repository is not part of the Android "Architecture Components" libraries, it is recommended as best practice for professional Android app developers such as us in order to allow for the separation of code and architecture. This gives us a clean API which we can use throughout the bespoke Android app we develop for you in order to get data (here we implement the logic for deciding whether to fetch data from a cloud server or use results cached in a local database).

Android Repository

What is a ViewModel?
The ViewModel is part of the Android lifecycle library and its role is to provide data to the UI and survive any configuration changes (e.g. if the user rotates the phone from portrait to landscape). A ViewModel manages communication between the Repository and the UI. We can also use a ViewModel to share data between fragments. Basically, activities and fragments draw data to the screen and the ViewModel looks after the data needed for the UI (e.g. data needed to populate a list seen on the Android app screen).

Android ViewModel
Most web app hacking attacks happen by means of cross-site scripting (XSS) or SQL injection attacks. This is usually due to the poor coding practices of the relevant web app developers.

We develop our web apps assuming they will be targeted by hackers hence we ensure our custom-made web apps are coded in a way that protects them from such hacking attempts. We keep abreast of current hacking trends and engage in "white hat" hacking attempts and "penetration testing" of our apps to help keep them secure.
The likely development cost of a custom-made Web, e-commerce or Android app will be anywhere between £2,000 and £5,000.
However, we can provide a detailed fixed-price quote for your app development project if you contact us. We are happy to sign a non-disclosure agreement (NDA) if you require it.
We can make sure that all data captured and stored on the apps we develop is encrypted with the strongest cryptography available to protect your data.

We will generally encrypt data using cryptographic algorithms that meet the Advanced Encryption Standard (AES) which is a symmetric block cipher used by governments to protect classified information.

AES is made up of block ciphers which encrypt and decrypt using secure cryptographic keys with government "Top Secret" information requiring 192-bit or 256-bit cryptographic key lengths.
Advanced Android Development Because we wish to stay cutting-edge when it comes to developing low-cost, custom-made, state-of-the-art Android apps for our customers, we make sure that we follow the ‘Advanced Android Development' sessions created by the Android development training team at Google so we know the most secure and robust way to add the very latest, advanced features to our Android apps.

The Advanced Android Development instructor-led courses are aimed at experienced Android app developers like us who wish to keep abreast of advanced Android programming concepts from the people who have created and maintain the Android operating system.

The Advanced Android Development courses are broadly broken down into extending Android apps to improve user experience, using tools to identify performance issues to make our custom-made Android apps run faster and more efficiently, localising our apps for other languages and making them accessible to users with disabilities, detecting and using the device location and creating advanced graphics and custom views.

Extending Android apps to improve user experience
This tells our Android app developers how to use fragments, widgets, and sensors to improve the user experience.

Using fragments allows us to create a master/detail layout for our bespoke Android apps which means we can keep a consistent look and feel to each screen of the app without having to replicate code. The less coding, the less development and testing time and hence we can charge you a lower the price for the development of your custom-made Android app.

App widgets
The small app views that appear on the Android home screen are called app widgets; these can be made both interactive and able to update requests.

Because the Android operating system supports the following range of sensors, it is important that our experienced Android app developers know the best way (without draining the battery) to obtain and use data from these sensors in the bespoke Android apps we develop for you.
  • Motion sensors
    These sensors (e.g. accelerometers, gravity sensors, gyroscopes, and rotational vector sensors) measure acceleration forces and rotational forces along three axes.
  • Environmental sensors
    These sensors (e.g. barometers, photometers, and thermometers) measure environmental parameters like air pressure/ temperature, lighting and humidity.
  • Position sensors
    These sensors (e.g. orientation sensors and magnetometers) measure the physical position of a device. This category includes orientation sensors and magnetometers.

Not every Android phone or tablet has all of these sensors; most will have a magnetometer and an accelerometer, however, very few will have a barometers or thermometer.

The Android platform allows us determine at runtime which sensors are present on a device as well as their capabilities (e.g. maximum range, resolution, power requirements, etc.) so we can make sure the bespoke Android apps we develop for you can utilise or gracefully ignore functionality reliant on certain sensors.

Making the Android apps we develop run faster
This is where we work with the latest tools to identify possible performance issues in our apps (e.g. using too much battery, calling cloud servers too frequently, not compressing data) because the performance of the bespoke Android apps we develop for you is very important to us.

One of these tools is the excellent Android Profiler which comes with the Android app development IDE we use, Android Studio. The Android Profiler tools give our Android app developers real-time data so we can see how the custom-made Android apps we develop use CPU, memory, network, and battery resources.
  • Inspect CPU activity with CPU Profiler
    Optimising an app’s CPU allows us to give users a faster and smoother user experience whilst saving battery life. We can inspect the bespoke Android app's CPU usage and thread activity in real time whilst we are using the app. This allows our Android app development team to make sure the app we have coded is not invoking resource-heavy tasks too often.
  • View memory allocations with Memory Profiler
    The Memory Profiler helps our Android app developers identify any memory leaks that could lead to screen freezes or app crashes. The way the Android operating system works with memory is that it automatically pauses some app processes when it needs to fee up memory and if our app allocates memory faster than the system can collect it, the app might be delayed while the collector frees enough memory to satisfy the allocations which could cause the app to skip frames or become slow to respond. Even if our app isn't running slowly, however, it is invisibly leaking memory our app could retain that memory even while it's in the background, thereby slowing the rest of the system's memory performance. Hence the importance of managing memory use in the custom-made Android apps we develop for you.
  • Inspect network traffic with Network Profiler
    The Network Profiler displays real-time network activity (data sent and received) as well as the current number of connections. This lets us check how our Android apps transfer data and optimise our coding accordingly. This is very important because every time our bespoke Android apps sync data with say a cloud server, the smartphone or tablet has to use either mobile or WiFi radios to send and receive data packets and this leads to battery drain because these radios use battery power to both transfer data but also to turn on and keep awake. Where possible we will try to batch any network requests (e.g. syncing data with the cloud) to reduce the number of times the radios must turn on to send or receive data (thereby allowing the radios to go into low-power mode and save battery in those gaps between batched requests).
  • Inspect energy use with Energy Profiler
    The Energy Profiler helps us determine if the custom-made Android app we have developed for you is using more energy than necessary by using a model that estimates the energy consumption for each resource on the device (e.g. CPU, GPS sensor, alarms, wake locks, etc.).
We take mobile app security very seriously! The bespoke enterprise Android apps we develop for UK businesses manage business-critical data and corporate intellectual property and our clients need to know that we do our utmost during the development of their custom-made Android apps to protect them from risk of financial loss, brand reputation damage, intellectual property theft or indeed government penalties.

When coding our bespoke Android apps we pay particular attention to the following:
  • Managing Android app login credentials in a secure manner
  • Where we store the data that is consumed by the Android app
  • Using high level cryptography to protect data stored in the custom-made Android apps we develop
  • How we use networking (e.g. Internet access) to sync data between our Android apps and corporate cloud/server based systems
  • Performing robust input validation on any data entered via the app which is then stored or transmitted
  • Handling any personal data on the Android app which needs to adhere to privacy legislation such GDPR
  • Only requesting to user to accept the bear minimum permissions to use the Android app
  • Never use WebViews in our bespoke Android apps (see below why not)
Here below are just a few of the common security issues which Android app developers can unknowingly introduce into their code when developing bespoke Android apps. Because we are aware of these security issues we make sure our Android app development team does not introduce these vulnerabilities into the Android apps we develop.
  • JavaScript Interface Injection Vulnerability
    The Android platform allows us to use WebViews which display web content and are embedded within our normal app screens. However, this content is vulnerable to JavaScript Interface Injection because it could execute malicious code, leak sensitive data or even corrupt data.
  • Intent Scheme Hijacking Vulnerability
    Here again WebViews are the culprit because they can be tricked by malicious web content into sending Intents (using Intent.parseUri) to app components leading to the theft of data.
  • Cross-App Scripting Vulnerability
    Yet again WebViews are to blame if they enable JavaScript and load data which was read from untrusted Intents (see above) as this could lead to the theft of user cookies and other data.
  • File-based XSS Vulnerability
    Malicious web content or networks can inject scripts to redirect the WebView to a malicious local file and launch a Cross-Site Scripting attack to access private local files or cookies.
  • SQL Injection Vulnerability
    Just as with web apps, Android apps are also vulnerable to SQL Injection attacks where a malicious app can supply a crafted input to access private data or corrupt database contents. Just as with server-based SQL databases, the SQLite database on Android can be protected against SQL Injection by using parameters and making sure we use strict mode with a projection map for queries and by using a selection clause that uses '?' as a replaceable parameter and a separate array of selection arguments when updating or deleting data in the Android app's SQLite database.
When data changes you will want the updated data displayed instantly on the relevant active app screen. This means we have to observe the data so that when it changes, the app can react. Observing changes to data across multiple components of your app can be problematic; this is where the Android LiveData class comes into its own.

LiveData holds data that can be observed within a given app lifecycle so that an "Observer" (a callback that can receive data) can be paired with a "LifecycleOwner" (an Android lifecycle class used by custom components to handle lifecycle changes), and this observer will then be notified about any modifications to the data so the active screen is instantly updated. This only occurs on live active screens so we don't risk memory leaks because the bespoke Android app we have developed for you is continually updating screens which are currently hidden (e.g. you have taken a phone call or are using another app).

The advantages of using LiveData
Using LiveData provides the following advantages:

  • Screen data always up-to-date
    Because LiveData notifies Observer objects when the lifecycle state changes (e.g. a screen becomes active) we can code our bespoke Android apps to update the UI using Observer objects so we update the UI every time there's a change.

  • No memory leaks
    Memory leaks are a big no-no on smartphones and tablets because these devices don't have a lot of spare memory (how many times have you seen a poorly coded app crash - lots of the time due to an out-of-memory exception). Because Observers are bound to Lifecycle objects, and clean up after themselves when their associated lifecycle is destroyed, we can avoid the risk of memory leaks caused by data updating inactive UI screens.

  • No crashes due to stopped activities
    If the observer's lifecycle is inactive (i.e. the app screen isn't currently active for that user) then it doesn’t receive any LiveData events.

  • No more manual lifecycle handling
    UI components continually observe relevant data and won't stop or resume observation - LiveData automatically manages this because it is aware of all lifecycle status changes while it is observing.

  • Always up to date data
    If a lifecycle becomes inactive (e.g. in background), it receives the latest data as soon as it is active again (e.g. returns to the foreground).

  • Correct configuration changes
    If a screen is recreated (e.g. the user rotates the device from portrait to landscape view), that screen will immediately receive the latest available data.

  • Sharing resources
    We can extend a LiveData object to integrate with system services so that they can be shared in our bespoke Android app. The LiveData object can connect to the system service just the once and then any observer that needs the system service resource can just watch the LiveData object instead.
Whilst Android apps can be coded in either Java, Kotlin or C++ programming languages, our Android app development team currently code our bespoke Android apps using the tried and tested Java language (Kotlin is a very new programming language so we'll let it play out for a while adopting it for future Android apps).

Our experienced Android app development team uses the Android Studio IDE (integrated development environment) to code our tailor-made Android apps. The code we write is compiled using the Android SDK (Software Development Kit) into an Android package which is a file with the .apk suffix. It is this one .apk file which Android devices use to install the app.

Android app developed for Phoenix Oils
App Components
Each Android app is made up of a number of "App Components" which fall broadly into four categories: Activities, Services, Broadcast Receivers and Content providers. The cost of a bespoke Android app we develop for you will depend on the number of developer hours needed to code and test all these components.

Please see below a quick summary:


An Android app ‘activity’ is basically a screen with a user interface; each different screen on the custom Android app we develop for you will usually be made up of a separate activity. We can set which activity should open first when you open your bespoke Android app (e.g. the home screen) but we can also use broadcast receivers to automatically open any particular activity based on certain triggers (e.g. open the jobs list screen when the device receives a push notification).


An Android app ‘service’ does not have a user interface but runs in the background to perform long-running, resource-intensive tasks (e.g. syncing data with your cloud servers). We can start these services (or interact with them) by calling them from our activity or from a broadcast receiver. When we develop our cutting-edge, bespoke Android apps to target devices running Android Lollipop or above (so basically any devices released after 2014) we will use the JobScheduler class to schedule tasks as this works with the Doze API to save battery power.

What is JobScheduler? The Android JobScheduler is an API for scheduling jobs that will be executed within our bespoke Android app’s own process. The beauty of the Android JobScheduler is that it is clever about how and when it executes the jobs in that it will batch them together and delay them if necessary. However, when the job is actually running the Android operating system will make sure our custom Android app stays awake for the duration of the job by applying a wakelock to the app and device.

What is the Doze API? The Android Doze API helps extend battery life by managing how apps behave when the smartphone or tablet is not connected to a power supply; it does this by deferring background CPU and network activity (e.g. syncing data with the cloud) when the device is unused for long periods of time. It is important that we test the bespoke Android apps we develop for you app in both Doze and App Standby modes to make sure all necessary background tasks are performed as required for your business-critical Android apps.

Broadcast Receivers

An Android app ‘broadcast receiver’ is a component that doesn’t display a user interface but that allows the Android operating system to deliver instructions to the bespoke Android app we have developed for you. For example, the system can deliver broadcasts, e.g. an alarm notification, to apps which are not currently running, without any user interaction. Although not really necessary, we sometimes create a status bar notification to alert users when a broadcast event occurs.

Content Providers

An Android app ‘content provider’ manages your app’s data and we can code your custom-build Android app to allow other defined apps to query or modify certain data via a standard interface that connects data in one process with code running in another process. Basically, content providers help the bespoke Android apps we develop manage access to the data stored in the app itself or indeed to data stored by other apps whilst providing mechanisms for us to define data security.

Manifest File

Before the Android operating system can start any app components (e.g. Activities, Services or Broadcast Receivers), the Android operating system has to know that the component actually exists and it does so by reading the app's manifest file, AndroidManifest.xml. Our Android app development team declare all the components of your bespoke Android app in this file. As well as declaring the app's components we also need to do the following:

  • List user permissions required by the app (e.g. Internet access or access to the user's contacts).
  • Declare hardware and software required by the app (e.g. camera, NFC or Bluetooth).

App Resources

Android 'app resources' are all the additional files and content (e.g. screen layouts, text strings, font styles and images) that the Java code in our main app activities can use. It is best practice for Android app developers to keep such app resources separate from the main coded app components and also to make sure we have a version for each specific device configuration (e.g. we may have different sized images and screen layouts for tablets and smartphones and we may show different text strings based on language settings). The Android operating system detects the user’s device configuration and loads the appropriate resources for the bespoke Android app we have developed for you.
A web app is software that resides on a remote server and is accessed over the Internet through a browser.

Web apps are the perfect way to allow your stakeholders to perform tasks which you may have previously carried out on traditional installed software as there is nothing to download or install and updates are completely hassle-free. All you need is an Internet connection and you can use these web apps from anywhere and on any Internet-connected device (e.g. PC, Mac, smartphone or tablet).

Web apps differ from mobile apps (i.e. those you download from Apple's App Store or Google Play) as mobile apps are developed for a defined platform (e.g. iOS, Android) and installed on the actual phone/tablet rather than being installed on a server and accessed through a browser.

You probably use web apps on a daily basis without even realising it. Using Gmail or Hotmail or online banking means you are using a secure web app!

We have developed bespoke cutting-edge web apps for lots of organisations ranging from multi-national blue chip organisations, large public sector organisations and SMEs.
Android is the world’s most popular mobile operating system currently running on almost 90% of all smartphones worldwide.

The Android operating system is developed in-house by Google and then for each new version the source code is made available to the Android Open Source Project members (e.g. hardware manufacturers such as Samsung, HTC, LG, etc.). These manufacturers then tend to spend time adapting the Android source code for their devices. As we always like to be developing against the latest version of Android (with backward compatibility of course) we make sure the core Android devices we have here in the office are from Google's Nexus range (or since October 2017 from their Pixel range) so we get the latest "pure" version of Android to develop and test our apps against and of course we get the very latest updates and security patches before they would be released by OEM manufacturers such as Samsung on their devices.

Android has the largest installed base of any operating system, more than Microsoft Windows!
Whilst Android apps can be written in a number of programming languages, for now we are sticking with the tried and trusted official Android programming language, Java. However, we are keeping an eye on Google’s new Android programming language Kotlin to see how this pans out in case it allows us to offer better Android apps in the future. Once we have coded an app in Java we then use the Android SDK to compile that code into an APK file (the Android Package) and it is this .apk file which users then install on their Android smartphone or tablet (or for that matter any number of different Android-enabled devices).
We offer our low-cost, bespoke web and Android app development services throughout the UK. Here below are some of the locations covered. Why not click through to see the pollution and crime stats for the areas in question!
East Midlands
Alfreton Belper Carlton Chesterfield Clifton Coalville Corby Daventry Dronfield Glossop Heanor Hinckley Ilkeston Kettering Leicester Loughborough Mansfield Market Harborough Melton Mowbray Newark-on-Trent Northampton Ripley Rushden Sutton in Ashfield Swadlincote Wellingborough West Bridgford
East of England
Ampthill Basildon Bedford Berkhamsted Billericay Bishop's Stortford Borehamwood Braintree Brentwood Bury St Edmunds Bushey Cambridge Canvey Island Chelmsford Clacton-on-Sea Colchester Dunstable Felixstowe Grays Great Yarmouth Harlow Harpenden Hatfield Haverhill Hemel Hempstead Hertford Hitchin Hoddesdon Huntingdon Ipswich King's Lynn Leighton Buzzard Letchworth Loughton Maldon March Newmarket Norwich Peterborough Potters Bar Rayleigh Rickmansworth St. Albans Stanford-le-Hope Stevenage Sudbury Thetford Watford Welwyn Garden City Wickford Wisbech Witham
Barnet Bexley Brent Bromley Croydon Ealing Enfield Greenwich Hackney Harrow Hillingdon Hounslow Islington Kingston Upon Thames Lambeth Lewisham Merton Richmond Sutton Wandsworth
North East England
Billingham Blyth Chester-le-Street Durham Longbenton Peterlee Redcar Stanley Washington
North West England
Accrington Ashton-under-Lyne Bamber Bridge Birkenhead Bootle Burnley Carlisle Chester Chorley Congleton Crewe Crosby Darwen Ellesmere Port Heswall Heywood Kendal Kirkby Lancaster Leyland Macclesfield Maghull Manchester Middleton Northwich Ormskirk Preston Rawtenstall Runcorn Southport Urmston Walkden Wallasey Westhoughton Whitehaven Winsford Workington
South East England
Abingdon Aldershot Amersham Andover Ashford Aylesbury Banbury Basingstoke Bexhill Bicester Bletchley Bracknell Broadstairs Burgess Hill Camberley Canterbury Caterham Chatham Chesham Chichester Crawley Crowborough Didcot Ditton Dover East Grinstead Eastbourne Eastleigh Egham Epsom Esher Farnborough Farnham Fleet Folkestone Gerrards Cross Gillingham Godalming Gosport Gravesend Guildford Hastings Havant Haywards Heath Hedge End High Wycombe Horley Horndean Horsham Leatherhead Leeds Littlehampton Maidenhead Maidstone Margate Milton Keynes New Milton Newbury Newport Oxford Redhill Reigate Rochester Royal Tunbridge Wells Sandhurst Seaford Sevenoaks Shoreham-by-Sea Sittingbourne Staines Stroud Thatcham Tonbridge Totton Walton-on-Thames Weybridge Winchester Windsor Witney Woking Woodley Worthing
South West England
Barnstaple Bath Bridgwater Bristol Burnham-on-Sea Camborne Cheltenham Clevedon Exeter Exmouth Falmouth Ferndown Frome Gloucester Newquay Newton Abbot Plymstock Salisbury Taunton Torquay Trowbridge Truro Weston-Super-Mare Weymouth Yate Yeovil
West Midlands
Aldridge Bedworth Bromsgrove Brownhills Burntwood Cannock Droitwich Evesham Great Malvern Kenilworth Kidderminster Kidsgrove Lichfield Newcastle-under-Lyme Nuneaton Redditch Rugby Shrewsbury Stafford Stourport-on-Severn Stratford-Upon-Avon Tamworth Telford Warwick West Bromwich Willenhall Worcester
Yorkshire and the Humber
Bingley Boston Bridlington Cleethorpes Dewsbury Grantham Halifax Harrogate Huddersfield Hull Keighley Lincoln Normanton Scarborough Skegness Spalding
Northern Ireland
Northern Ireland
Londonderry Newcastle
Aberdeen Airdrie Alloa Ayr Bathgate Bishopbriggs Cambuslang Clydebank Coatbridge Cumbernauld Dumbarton Dundee Dunfermline East Kilbride Edinburgh Elgin Glasgow Glenrothes Greenock Hamilton Inverness Irvine Kilmarnock Livingston Motherwell Musselburgh Newton Mearns Paisley Renfrew Wishaw
Aberdare Barry Blackwood Cwmbran Penarth Pontypridd Rhyl