Feb 22, 2014 - Wrkout 1.8.0 for Android has been released


The new versions of Wrkout and its free counterpart, Tabata Trainer, have been released!

Major highlights for Wrkout 1.8.0 include:
  • The ability to import and export workouts to the external storage;
  • The ability to set a loop count for specific exercises, individually;
  • Google Analytics - to quickly detect future issues and fix them as soon as possible;
  • Great stability improvements.

Get Wrkout:
Get it on Google Play

Get Tabata Trainer:
Get it on Google Play

(QR Codes at the bottom of the page.)

For the complete list of changes please analyse the changelog of each app:
Follow Wrkout / Tabata Trainer on:
Wrkout / Tabata Trainer apps are available in English, Spanish, French and Portuguese. If you are interested in translating to other language(s), please contact me.

QR Codes:
Wrkout - Play Store
Wrkout - Amazon Appstore

Tabata Trainer - Play Store
Tabata Trainer - Amazon Appstore

Feb 20, 2014 - Changing Android Text-to-Speech (TTS) Engine (and other hints)


Changing the Android Text-to-Speech (TTS) Engine step-by-step in three different Android versions, as well as pointing to some alternative TTS engines, are the objectives of this post. The main reason for creating it is to provide additional troubleshooting support for Wrkout users, who may be having issues with the speech feature present in the app.

Note: If you've reached this page from Wrkout HIIT or Wrkout Pro and are using a Kindle Fire device, I can't guarantee you that these procedures smoothly apply to your device as I have no way to test them. Also, any TTS engines presented come bundled with the device or are downloadable from Google Play Store. I can't help with Amazon Appstore -only devices.

I will present how to change the Android TTS in three different Android versions/flavors: CM7.1 Android 2.3 (Gingerbread); Samsung GALAXY Fame Android 4.1 (Jelly Bean); 2012 Nexus 7 Android 4.4 (KitKat). Then, I will also show how to download offline languages to be used in the Google Text-to-Speech engine.

Critical zones in each screenshot are marked with red brushes.

Even if don't use any of these Android versions, you will still be able to follow this guide due to the similarities (with at least one version) being very high.

You can click the images to view them in higher resolution.

Unfortunately, I've made the whole guide in English. You can try to use Google Translate at the right of the page, but not everything will be correct.
Automatically translate this guide, at the top-right corner of the page.

Available TTS engines

There are many Text-to-speech engines available. There's no need to create yet another list of these, so I invite you to look at this list made by SoftwarePreneur.

Personally, I've had some success with SpeechSynthesis and IVONA TTS HQ (which is the one Wrkout redirects to in case the user chooses to install a TTS engine). To get more unusual languages, like Portuguese, offline, you may need to spend some money on language packs for SVOX Classic and IVONA TTS HQ, or just use Google Text-to-Speech engine present in the most recent versions of Android (which can also be installed from Play Store). Most of the languages Google TTS can play are online-only, but some can be manually downloaded to be played offline as well. Portuguese from Brazil was recently made available offline. Some phone/tablet brands also seem to provide offline TTS support for many languages.

CM7.1 Android 2.3 (Gingerbread)

1. Go to your app drawer and select "Settings";

2. Select "Voice input & output";

3. Select "Text-to-speech settings";

4. Make sure the wanted engine is selected and properly configured in the "Engines" section presented;

5. Finally, select the actual engine you want to be using with your Android apps in "Default engine".

Samsung GALAXY Fame Android 4.1 (Jelly Bean)

1. Go to your app drawer and select "Settings";

2. Select "Language and input";

3. Select "Text-to-speech output";

4. Select one of your TTS engines as the preferred to be used in your Android apps (don't forget to press the cog as well to configure them).

2012 Nexus 7 Android 4.4 (KitKat)

1. Go to your app drawer and select "Settings";

2. Select "Language & input";

3. Select "Text-to-speech output";

4. Select one of your TTS engines as the preferred to be used in your Android apps (don't forget to press the control in the right side as well to configure them).

Downloading offline languages for Google Text-to-Speech

This new section, added 7th March 2014, shows you how to download an offline language for Google TTS in recent versions of Android (4.x). Google recently improved its Text-to-Speech engine and added some new languages for offline download.

After getting to the "Text-to-speech output" screen in your Android settings (by following the screens above), you can download new languages, to be used offline, by going to the screens shown below (click the images to zoom):


Feb 18, 2014 - Loading app/web page from Android intent when app is disabled


In Android, it's pretty easy to load a page from Facebook or Twitter or a similar one, from our very own app. By passing an intent with the request, the related app will automatically show up with the desired content. If the app is not installed we can detect that scenario so that, for instance, the browser starts up and loads the link for the wanted page. With Google+  it's even simpler, as we just need to pass the web URL. Android then selects if it should use the Google+ app or a browser (taking into account users' preferences).

However, what if the app is installed but has been disabled (for example through App Quarantine)?

Let's consider Facebook as the app/website to load from our Android application.

Typical code for loading a page is something like the following:
Intent intent;
try {
getPackageManager().getPackageInfo("com.facebook.katana", 0);
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/620681997952698"));
} catch (NameNotFoundException e) {
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/620681997952698"));
try {
} catch (ActivityNotFoundException e) {
getString(R.string.facebook_error), Toast.LENGTH_LONG).show();

Which works most of the time: with or without the app installed.

However, if the user has Facebook installed but disabled (for example by using App Quarantine), this method will not work. The intent for the Facebook app will be selected but it will not be able to process it as it is disabled, ultimately resulting in the Toast above.

So, a quick fix (and the whole point of this post) is to detect if the app has been disabled and then choose to use the web URL:

Instead of:
getPackageManager().getPackageInfo("com.facebook.katana", 0);
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/620681997952698"));

You can use the following to decide what to do:
PackageInfo info = getPackageManager().getPackageInfo("com.facebook.katana", 0);
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/620681997952698"));
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/620681997952698"));

This process is similar for other apps (not required for Google+).

Some links: