Apps to make your Android smarter

Today‘s smartphones are pretty smart. We can browse the Internet, play music and videos, take pictures, connect to social networks, talk with our friends, etc. However, they can be even smarter. If we browse the market, both App Store (iOS) and Google Play (Android), we have apps for almost everything.

In this post I am going to give a brief overview of some apps to make your Android smarter. With the right app you can automate thinks like turning off your notifications after midnight, switching to silent mode when you are working in your office, navigating through the apps faster and customize your launcher. These apps can be classified into those for customization, creation of widgets, quick navigation and automation:

Automation

taskerLatest versions of Android OS automatically switch from 3G to WiFi when this is available, increasing battery life and preserving our data plan. However, not all tasks can be automated with the features of the operating system. In the store we can find several apps that allow/enable from switch to silent mode when you are sleeping to launch your favorite music player when you plug-in your headphones. The automation apps lets you make mini programs that carry out task you would otherwise need to do manually.  Features:

  • Tasker: app to set up actions (aka tasks) based on contexts (application, time, date, location, event, gesture) in user-defined profiles or clickable or timer home screen widgets.
  • Llama: app that allows automatically change sound profiles depending on your location.
  • Automatelt: this app allows to automate various tasks by assigning actions to be performed when triggered with the location, event, gesture, application, time, etc.
  • Good Night, Android: it provides a widget to turn off and restore WiFi, sound, or lock the screen immediately with one click.
  • Phone schedule: scheduler for your phone. It allows to auto-sync, schedule backups and restores, switch on/off WiFi or Bluetooth, launch apps, change ringtones and notification tones, etc.
  • Screebl: this app controls your screen based on orientation. It detects how you are holding the phone to turn on the screen, and releases the lock and turn off the screen when not. 

Quick Navigation

In our mobile devices we have apps for almost anything. The Android’s app drawer allows to customize the launcher, organizing the apps in several ways and also combining them with widgets. Moreover, in Android, not all apps have to be in the launcher, allowing with this way to use the launcher only for the apps we use the most and making navigation easier. However, sometimes we want to switch between apps, start the apps we use the most, or navigate through the recent opened apps quickly. For this purpose, there are several solutions for setting up quick navigation on your device:

  • SwipePad: It consists of a launcher panel overlay to switch apps and tasks quickly. With a single swipe action such as touch down a pre-set edge of the screen, move your finger towards the center of the screen or release your finger on a specific slot, you can launch anything from within any app.
  • Homeflip: another app to switch between favorites, recent and set-up apps faster. It can be activated with the home button or a swipe gesture.
  • Sidebar: this apps creates sidebars where you can put various items on them such as apps, contacts, commonly accessed settings, shortcuts, and widgets. It supports multiple bars, as well as change the visuals and trigger options for the bars.
  • Glovebox: this apps performs multitasking by swiping without lifting the finger to select an application to open it. It has apps, shortcuts and widgets on the side bar and also pins recent tasks, notifications and includes floating widgets.

swipepad

Customized launcher

Android is a very customizable operating system (OS), especially if we compare with  iOS, Windows Phone and other proprietary OS. It is possible to customize the home screen, lock screen, launcher (including the app, widget and notification drawer), dock… Some of the featured apps for customization are:

  • Nova Launcher: one of the most popular apps for customization of the launcher. It includes color themes, icon themes, scrollable dock, scroll effects and styles, etc.
  • Chameleon launcher: is an app that lets you create multiple home screens with different layouts of widgets and apps. It includes a set of widgets for the most featured apps (google, clock, facebook, twitter, instagram, media player, switches…) to layout as drawing on a screen.
  • Aviate: it is an intelligent home screen that categorizes your apps and rearranges them giving you the apps and information you need the most at precisely moment you need it. It is currently in Beta version.
launcher

Widgets

widgetsWidgets are small application views of an app’s most important data and functionality that is accessible from the home screen. Widgets are only available for Android. Many apps come with widgets to perform some features quickly, such as play music with one click, create and store a quick memo, or check the weather in the home screen. However, sometimes you want a widget to perform a different function or a feature that is not available in/possible with the widgets that come when you download an app from the store. For this purpose, some apps allow to  create your own widgets, allowing to design and customize almost anything. Some examples are:

  • Ultimate Custom Widget (UCCM): app to create your own widgets easily. You can use a custom layout, fonts, images, shapes, and objects (clocks, weather information with icons, unread sms, battery information, and more).

Hopefully, these apps will change your Android experience and make you discover new features and functionalities. Developers around the world are continuously working to create original and interesting apps, and at the same time, Google is improving their OS to add more and more functionalities. In this post I tried to highlight the most interesting apps for customization, navigation and automation but feel free to suggest any others.

Indoor positioning using smartphones

Currently, GPS is the most used navigation system for outdoors. It provides location, altitude and speed through GPS satellites and it offers an accuracy down to a few meters. However, the accuracy of the system in indoors is bad, which makes it useless for navigation and positioning in this environment. 

Today smartphones have full GPS capability onboard but it is also useless for indoor navigation. Nevertheless, the combination of other connectivity capabilities such are WiFi or 3G with the built-in motion and position sensors offers many possibilities for the future of indoor positioning. In this post I will discuss some of the techniques that can be used for indoor positioning taking advantage of the smartphones capabilities. 

Distance and bearing

The first approach consist off determining the distance and bearing (angle between two points measured in a clockwise direction from the north line) between two points. The distance and bearing could be calculated through the A-GPS, a set of location sensors that combines GPS location, network positioning and cellular positioning. The figure below shows how to determine the angle between two points. However, this approach is not useful using the A-GPS because of its bad accuracy of location in indoors (10m).  location by triangulation using several WiFi or blueetoth hotspots.

Bearing

Distance and bearing using WiFi and Blueetoth hotspots (requieres additional installation)

This method requieres the installation of WiFi or Blueetoth transmitter every few meters. Distance and bearing can be approximated based on the relationship between transmitted and received signal strength. The problem of this solution is that accuracy is significantly impacted by reflection and absorption from walls. Moreover, measurements can be extremely noisy so there is a lot of ongoing research focused on making more accurate systems by using statistics to filter out the inaccurate input data.wifiBluetooth

Integration of the acceleration

The second approach uses the double integration of the linear acceleration (acceleration of the device minus the acceleration due to gravity) to measure position, like the following equation shows. However, double integration amplifies acceleration noise so fast. The acceleration readings from the smartphone’s sensors are very noisy, making this approach useless for most of the systems.

position integration

Inertial measurements

The third approach consists of the development of algorithms based on the detection of steps and heading directions while walking. The positioning might be reliable using the accelerometer and gyroscope sensors, and with an accurate estimation of the step length.

Currently, this seems the best approach for reliable indoor positioning using only smartphones and without any additional installation. This system is  specially useful if the measurement of the steps is referred to maps or additional sensors (using sensor fusion)  to constrain the inherent sensor drift encountered with inertial navigation.

inertialMeasurements

Using the Kinect to verify fall events

Microsoft’s Kinect is a powerful sensor for motion tracking and analysis. There are different applications that take advantage of its functionality of 3D motion capture. In the medical field, for example, the sensor offers great possibilities to the treatment and prevention of disease, illness or injury, as we discussed in this post.

The Kinect can be used in a fall detection system to detect when an individual is walking and suddenly falls. Its implementation is quite easy using the framework for skeleton tracking. However, we designed a system to detect fall events using a smartphone and we want to use the Kinect for verification after a fall. This verification consists of detecting if the individual is lying down in the floor. In this post we will discuss three different approaches for the verification of the fall event and its associated problems.

Skeleton tracking with the Microsoft SDK

The fall verification could consist of detecting some joints (head and hands, for example) using the skeleton tracking framework (included in the Microsoft SDK) and calculating the distance from the floor.The fall will be considered detected if the distance from the floor is almost zero from all joints.

We performed several experiments implemented with the official Microsoft SDK. The main challenge is to detect the joints when the Kinect turns on and the individual is already lying on the floor. The algorithm gives good results after small movements of the individual, but sometimes the person remains unconscious after a fall which makes this approach not useful.

skeletonKinect

Skeleton tracking with OpenNI

OpenNI is the open source SDK for the Kinect. As we discussed in this post, it has some advantages and disadvantages but is always an alternative to develop Kinecting applications. Since the first approach presented some problems to detect the individuals joints when the Kinect turns on and the individual is already lying on the floor, we decided to try with this SDK. Using this SDK we obtain better results in terms of accuracy of detection but not enough for a reliable verification of the fall.

skeletonOpenNI

User selection using depth data with OpenNI

We also performed some experiments using OpenNI and open source libraries. The fall verification consist of detecting the individual using the depth data to segment the user from the background. Once the individual is selected, we check if the individual’s bounding box is less tall than a threshold value and the position of the highest point is lower than a threshold, which means than the user is lying on the floor. This approach has the same limitation: pickup the person if is already lying on the floor when the Kinect turns on. This is the same problem we had with the previous approaches.

userselectionOpenNI

After all the experiments using both SDKs for the Kinect and different methodologies, we realized the Kinect has an important limitation to track joints when the individual is motionless. All SDKs present good accuracies after small movements but this is not useful in our system, where we want to detect if an individual is lying on the floor. Any ideas or suggestions about how to implement it?

Smartphones in healthcare

Today’s smartphones are devices with advanced computing capabilities and connectivity which also have a wide range of built-in sensors. These features make the smartphones a good platform for telehealth,  health-related services and information via telecommunications.

Using smartphones and communication networks it is possible for practitioners and patients to collect remote aggregate health data, provide care via mobile telemedicine, and real-time monitoring of patients. Different systems have been developed, that take advantage of the new technologies and devices.

Autodiagnosis and telemedicine

  • Poket Doc is like having a doctor in your pocket. It allows you to search for and compare information about health services and pricing based on location, condition or a doctor’s speciality.
  • Scanadu (available in 2014) is an app connected with a scanner device packet with sensors to check the temperature, heart rate, oximetry, ecg wave, heart’s beats, pulse, urine analysis and stress. The app keeps the report with all the information and it contacts to the doctor in case of emergency.
  • uCheck analyzes the urine. Users have to purchase a kit containing urine test strips that can be visually analyzed with the iPhone’s camera.
  • Mango Health lets patients monitor their use of medications by setting up schedules for taking their medication. When it is time to take the medications, it reminds them through notifications.

Scanadu

Patient monitoring

  • Asthmapolis is connected with a sensor that patients can place on the inhaler. The app collects all the data and information. It is used by doctors to monitor asthma symptoms and create the patients report.
  • Dr. Diabetes provides diabetes awareness, monitoring and management to patients with chronic illness. It provides medical data (via the cloud) to physicians for accurate diagnosis.
  • AirStrip allows doctors check in on patients and review their vitals, cardiac waveforms, medications, intakes and outputs, and allergies. The phone is connected to a bedside monitor and send the collected data to doctors or caregivers through cellular or Wi-Fi connection.
  • GI Monitor is an app that helps patients with Crohn’s and Ulcerative Colitis track their symptoms and provide accurate data to physicians for optimal treatment. Data is synchronized across all platforms in real-time and users can print out easy-to-read reports for their physicians.
  • RheumaTrack is a patient diary app which record pain on the VAS scale. Patients have to record their pain, use of medication and activities. All this information is useful for the doctors.

Asthmapolis

Unlocking an Android phone

Android is an open source operative system released by Google. Carriers and manufacturers create their own version based on the Android code but they block some funtionalities and add commercial applications. Though it is an open source OS, they design a specifically Android OS version for the device and they don’t allow you to install other operative systems. Unlocking your phone allows to install a custom operating system (also known as custom ROMs) with innovatives features and root the phone to have complete access to the system.

Why root the phone ?

Rooting the device allows to modify the device’s software on the very deepest level. The greatest advantage that rooting provides is the ability to install powerful applications  that requires more than usual privileges on your device. When your phone is rooted you can
Android_unlock install apps to access and edit the system memory, speed up or slow the chip for more performance and battery life,  connect to WiFi networks that have proxy settings, block advertisements on websites and apps… Moreover, if your phone is rooted it is pretty easy to manage the operating system, backup and restore your data and manage custom ROMs.

Why install a custom ROM?

A custom ROM is simply a version of Android to replace the version of Android that the manufacturer provided on your device. Custom ROMs are created by developers and in most of cases they take away all the bloatware that is usually impossible to remove, increase performance and/or improve battery life.


There are hundreds of custom ROMs but CyanogenMod is probably the most popular and
cyanogenmod one of the most reputable. CyanogenMod is supported for a huge variety of phones and it includes some cool features such as gestures in locked-screen mode, music player and other apps, phone goggles, set up a VPN to tunnel all your IP and network data, install apps to the SD card (this safe a lot of space!) and much more. 

How to root the phone and install a custom ROM

The bootloader is the code that loads the system software on the devices and determines which applications must run in the startup (boot up) process. Manufactures block the bootloader for security reasons but also to prevent you to install custom ROMs. Unlock the bootloader is the first step to install a custom firmware on your Android phone.

HTC_BootloaderNot all the Android-phones can be unlocked although it is possible in the most advanced onces. Some manufactures such as HTC, Samsung or Google launched the official tools to unlock the bootloaders. In this post I will show the steps for HTC phones altough it is really easy to find the steps for other phones on the xdna developers forum.

 Be aware that unlock your bootloader may void your warranty.

1. Backup

Before start unlocking your phone it is highly recommended to backup all your data. You can use your Google account to backup your apps and automatically sync back when the process was complete. HTC Sync, available from the HTC website allows to backup your contacts, messages, notes, call logs….The application Go Backup Pro has the same purpose.

2. Unlocking the bootloader (HTC phones)

HTC_unlockBootloaderThe official webpage of HTCDev provides all the resources to unlock the bootloader of your HTC. If you follow all the steps of the HTCDev guide you will get your unlock code to root your phone. You need to download the Android SDK and once downloaded it basically consist on start the device into Bootloader mode and run the adb (which is on the SDK) to get the token, which is an unique code that identifies your phone. Then they will provide you with a unlock token to copy on the phone and unlock the bootloader from the Bootloader screen. All the steps are detailed in the website.

3. Rooting the phone

The bootloader is now unlocked but still not rooted. There are different ways to root your phone, for example installing the application ClockworkMod from Google Play and use the feature Reboot into Recovery. You can also create and run your temp_root script (be sure your phone is plugged in) with the following code:

adb shell mv /data/local/tmp /data/local/tmp.backup
adb shell ln -s /data /data/local/tmp
adb reboot
adb shell echo "ro.kernel.qemu=1 > /data/local.prop"
adb reboot

If you want to remove the temp root you can create and run the remove_temp_root script with the following code:

adb shell rm /data/local.prop
adb shell rm /data/local/tmp
adb shell mv /data/local/tmp.backup /data/local/tmp
adb reboot

4. Installing a custom ROM

There are lots of custom ROMs you can download and install on your phone. One of the most populars is CyanogenMod which offers features not found in the official Android based firmware. You could choose another one though, and the process will be basically identical.

clockwormodBe sure the custom ROM you chose is supported on you phone and download it. Then copy the downloaded zip file to the phone SD card. If you didn’t download Clockworkmod, you will need to do at that point. This applications allows to root your phone and install custom ROMs among other possibilities. Installing the downloaded custom ROM is as easy as tap into the Install ROM from SD Card and wait until process finish.  I highly recommend to do a backup of the current ROM before start the installation.

At this point your phone is rooted and running a customized operating system. You have super-user privileges, you can control everything from your phone,  you can do wathever you want!

Kinect overview before starting programming

The Microsoft Kinect is a set of sensors developed as a peripheral device to use with the Xbox 360 gaming console. Since it was released, hackers immediately saw potential in the device far beyond it and created open source libraries to use in other applications. Microsoft also released the official SDK and the Kinect for Windows, a more powerful device to use in research. Nowadays there is a big community of developers and researchers around the world and several new applications are emerging.

Developing for Kinect is really easy. There are lots of official and non-official tools, libraries, demos, tutorials….But Kinect sensor has some limitations that you should know before starting developing for this device.

Kinect for Windows vs Kinect for XBox 360

Kinect for Windows is specifically designed to be used with computers. It is licensed for commercial app distribution so it is the best option for development. Kinect for Xbox 360 was designed and tested for the console but can also be used on development with some limitations. 

The features unique to the Windows version of Kinect include:
kinect

  • A shortened USB cable to ensure reliability
  • A small dongle to increase compatibility with other USB devices
  • Expanded skeletal tracking abilities, including “seated” skeletal tracking that focuses on 10 upper body joints
  • A firmware update called “Near Mode” that allows the depth sensor to accurately track objects and users seated as close as 40 cm from the device
  • Expanded speech recognition including four new languages, French, Spanish, Italian, and Japanese
  • Language packs improving speech recognition for many other English dialects and accents
  • Improved synchronization between color and depth streams
  • Improved face tracking

Official Kinect SDK vs Open Source alternatives

The official SDK maintained for Microsoft is better than open source alternatives in some applications such as the skeleton tracking. However the force of the open source community with OpenNI (drivers, APIs, libraries, demos) and OpenKinect (drivers) to create the SDK, middleware libraries and apps.Both have cons and pros.


Official SDK

  • Programming languages supported: C++, C#, or Visual Basic by using Microsoft Visual Studio.
  • Operative System support: Windows 7 and 8.
  • Documentation and support: official website, development toolkit and support forum.
  • Calibration: not needed.SDKs

OpenNI and OpenKinect

  • Programming languages supported: Python, C, C++, C#, Java…not requiring Visual Studio.
  • Operative System support: Linux, Mac OS X and Windows.
  • Documentation and support: website, support forum, twitter...
  • Calibration: needed.

Features and limitations

The Kinect’s image, audio, and depth sensors allow to detect movements, identify faces and recognize speech of players. However they have some physical like the sensing range. On the other hand, Kinect for Windows SDK frameworks also have limitations such as the number of tracking skeletons.depth

  • RGB camera: angular field of view of 57° horizontally (plus 27° up or down with the motorized pivot). and 43° vertically.
  • Depth sensor: viewing distance range from 0.8 m to 4m. Practical limits are from 1.2m to 3.5m.
  • Depth near mode: viewing distance from 0.4m to 3m.
  • Audio beam forming: angular field to identify the current sound source of 100° in intervals of 10°.
  • Skeleton tracking: normal mode with 20-joints per player and seated mode with 10-joints. Both modes have simultaneously tracking up to six people including two active players (motion analysis and feature extraction of 20 joints per player).
  • Interactions: library with basic gestures (e.g. targeting and selecting with a cursor) which also supports the definition of gestures.
  • Face tracking: angle limits to track face movements are +-45 degrees (yaw), +-90° (roll) and +-25° (pitch).

skeletonTracking

Microsoft Kinect in healthcare

Microsoft Kinect has transformed the way people interact with technology. The combination of the camera, the depth sensor and the microphone enable new applications and functionalities such as 3D motion capture or speech recognition. New applications are emerging.

In the medical field, kinect sensor offers great possibilities to the treatment and prevention of disease, illness or injury. Most of applications in the medical field, specially in eHealth (healthcare through the use of technology), use the kinect for tracking patient’s movements in order to perform rehabilitation or patient’s monitoring.

Physical Theraphy and Rehabilitation

Red Hill Studios from University of California is researching about how Kinect can be implemented to help people with Parkinson’s disease. They have developed specialized games to improve the gaith and balance of people with functional impairments and diseases.

Home Training System for Rehab Patients (HTSRP) motions and captures the physical exercises of the patient using a Kinect. It presents a 3D version of the person, analyzes the movements  to pre-detect if physical exercises are performed right or wrong and gives visual feedback on the screen. Jintronix, like HTRSP and other companies, performs rehabilitation in a virtual environment.

Telemedicine

Medicine and diagnose can be performed remotely for people who lives a long way from the hospital. A few months ago Microsoft launched InAVate, a platform which allows group therapy session using avatars.

Collaboration and Annotation of Medical Images (CAMI) of University of Arcasas uses Microsoft Kinect to capture the data, which can be checked on a Windows device such as a tablet, phone or computer.

University of South Florida developed a Robotic Telemedicine System using the kinect sensor for mapping the environment and plan a path and trajectory. The telemedicine platform also provides video communications for doctor-patient communication through the camera and microphone’s kinect.

Remote patient monitoring

Remote patient monitoring and telehealth are used in chronic diseases like heart disease, diabetics or asthma. Cognitiont’s Global Technology is a remote health monitoring solution for multiple sclerosis physiotherapy at home.

Medical applications

Microsoft Kinect is also used as a hands free tool to control medical imaging equipment. Toronto’s Sunnybrook Hospital uses Kinect to move and zoom X-Ray and MRI without touching the screen and leaving the sterile area, which is very useful for surgeons and interventional radiologist. Getstix also has developed a touchless gestural interface for the surgeons and interventional radiologists.

Researchers from University of Konstanz have made a step forward with NAVI system. They use the Kinect camera and depth sensor with a laptop, a vibrating bell and a bluetooth headset to avoid obstacles for blind people.