Sunday, August 12, 2012

Android Activity Wizard : please let me create a simple activity !

Today, I wanted to create a new activity in my next application...

Nothing really strange for now...

So I tried the new Activity wizard to create a very simple activity ( it's just to play a video, so I don't even want an action bar ) :

Then I choose not to use any navigation option :

And Taadaaa !!
It just failed :

Note that I've installed the latest support library version ( 9 ), and restarted Eclipse :

But no, it won't let me create a new activity :(

It's no big deal as I can still create it manually, but I was expecting more support from this wizard :)

Saturday, June 23, 2012

What's wrong with Search in Google Play

What's wrong with the search in Google Play ?

Yesterday, I was looking for something in my sliding tile puzzle called 'Nature Puzzle'.
So I opened Google Play website, and started with a search for 'Nature Puzzle'.

Here is the result :

We have :
* Photo Puzzle Game, NumberPuzzle,
* Nature Puzzles,
* Nature Puzzle,
* Natural Seasons,
* Zoo and Nature Puzzle 2 in 1
* kids Puzzle:Animal

and my game is not listed !

What I don't understand is that I gave the exact name, and I didn't find it !
I looked at the last app (kids Puzzle Animal ) more closely, and there is only 1 occurence of 'natural' in the description.
And the application called 'Nature Puzzle' ( so with the exact same name as mine ), it has the same rating, and less downloads.

Note that
* I'm not complaining here that my application does not have enough visibility : I only published it as a proof of concept of Html5 android applications
* I'm not asking the description of the search algorithms in the Google Play Store !

I'm just amazed that, from a customer point of view, giving the exact name of an application does not bring this application to the top !

Actually, if I specify that I want to search only in Android apps, then my game appears at the 7th rank :

I even discovered another application named 'Nature Puzzle' ( it now sounds like a very common name ), that is even more badly ranked than mine !

Am I the only one to found it strange ?
Do you feel like there are some reasons, for the customer, not to put the application with the exact name first in the search results ?
Do you understand how the ranking is done ?

Sunday, May 13, 2012

Ghost Recon Future Soldier

It's been a long time since my last update on this blog.

Actually, my Android's developments are only hobby projects. My real job is working on console video games.
 And we've just finished Ghost Recon Future Soldier !
I was very busy finishing the game, so I couldn't really post any more.

But the game is now done, I am really proud of it, the whole team has done an amazing job, so I will now be able to return to more Android developments !

During this time, I could port my 'Word Prospector' game on the Blackberry Playbook, and I started a new project.
More on all this later :)
Now I just want to enjoy the Ghost Recon Future Soldier launch.

Monday, August 8, 2011

Orientation for both phones and tablets

Tablets are now a new component to take into account when programming applications on Android.
And it brings issues with your application orientation...

My game Word Prospector was meant to be played in portrait mode on a phone.
But on tablets, I want it to be played in landscape ( as it feels more natural for tablets ).

But how to achieve that ?

Activity orientation is fixed in the manifest, and you can't have different manifests for different screen configurations.

So how to manage that ?
I found three different ways...

First solution : different apk for different screen configurations

Now that the Android market gives us support for multiple apk, ( see here ), you can use it just to have some differences in the manifest.
So you can have the very same application and only have different orientations in the manifest, and let the market make the work for you.

But having several apk is painful for developers : it's a lot of work to develop, and to maintain.
So I would  not recommend this solution.

Second Solution : have some activity code to manage the orientation

You can impose the orientation of your activity in the onCreate method of the activity, with the setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_XXX ) function.

So you can have some code like this :
if ( isXLargeScreen() )

With this code, when there is an orientation change, the activity is destroyed, then re created.
To avoid this destruction / recreation step, that would break the smoothness of the user experience, you have to disconnect the destruction of the activity mechanism.
So you have to add a
parameter in the activity declaration in the manifest, and add an empty onConfigurationChanged method.

Now you can even be more flexible.
If you want one configuration ( for instance the tablet one ) to handle both orientation, and the other ( the smartphone ) to handle only one orientation, you can do it :

In the OnCreate method, impose the orientation only for the smartphone :
if ( ! isXLargeScreen() )

Then in the onConfigurationChanged, you have to recreate the Activity only when on tablet. And in this case, you have to save the activty state, and restore it, as the classic destruction / creation of the activity is deactivated :

    public void onConfigurationChanged (Configuration newConfig)
        //Log.d("tag", "config changed");

        if ( ! isXLargeScreen() )
        // FOR BIGSCREENS :
        setContentView( R.layout.MyActivity );

Third solution : let's get back to the manifest...

The manifest really is the tool Android developers gave us to handle the orientation...
So my last ( and prefered ) solution is to have two different activities, with different orientation capacities :

        <activity     android:name="LetterGame"
        <activity     android:name="LetterGameLandscape"

and to create a MyActivityLandscape class, that just do ... nothing !
It just inherits from MyActivity :

package com.alocaly.LetterGame;

public class MyActivityLandscape extends MyActivity

Then you just have to choose what activity to launch in the caller activity :

Intent i;
if ( isXLargeScreen() )
    i = new Intent(MainMenu.this, MyActivityLandscape.class);
    i = new Intent(MainMenu.this, MyActivity.class);
startActivity( i );

And that's it !!
The onConfigurationChanged function should still be empty, or you can specialize it for your second activity.

Do you see another technique to handle different orientations with different devices ?

And my turn to ask a question :
How can we easily implement an isXLargeScreen method ? ( my current implementation is something I'm really proud of :) )

Thursday, June 2, 2011

An Android Application in HTML5

Hi all,

After my Blackberry / Html5 pause ( see here ) , I decided to port the games I made in Html5 on android.
So the first one is there now : it's called Nature Puzzle, and it's a simple sliding puzzle.

I will soon write another post on this development on android with Html5, but at least, it's here and feasible.
And if some people are interested, I will perhaps open source this simple game...

Although it's a very simple game, the pieces move is not totally smooth on my G1, but on my Nexus One, it's nice.
I will soon try the second blackberry game I made, that was more demanding...

Here is the link
Nature Puzzle on Android Market

And some screenshots :