Tag Archives: eclipse

Lets Write Code for MyO Armband – Android

Myo Armband is kind of a Wearable technology which senses the electrical signals produced when the muscles move. It got EMG Sensor, Gyroscopes and Accelerometer(Check here for Exact Spec 11137159_10204486542423879_2960066497525238836_n

So today we will see how to write code to get data and do stuff accordingly from the MyO Armband from the electrical signals that it can sense.

When the MyO Band is launched first, there was no instructions on how to setup the environment for the Android Studio. So there is a sample for Eclipse in Git Hub you guys can try it
gitHub-download-button

But today we are going to create and run an app that responds to all your gestures in Android Studio

Ok then will jump into the Tutorial

Step 1
First of all you have to Download the MyO SDK from the site and Extract the zip file and place it somewhere so that later you can add the path of it. You may have to register yourself before you can download it.
(You can download the SDK here)

Step 2
Create a new Project in the Android Studio, at the time of this tutorial my Compile SDK Version is API 23 Android 6.0 (Marshmallows), Build Tool version is 23.0.2, Minimum target SDK is 18. Ill be using a Galaxy s3 for testing. When it comes to Android Marshmallows you have to handle the new permission system. I’ll be explaining it in another Blog.

Step 3
Go to the build.gradle(Module:app) and add these code snippet to the dependencies

repositories {
    maven {
        url 'C:\\Users\\adh\\Desktop\\myo-android-sdk-0.10.0\\myo-android-sdk-0.10.0\\myorepository'
    }
}
compile 'com.thalmic:myosdk:0.10.+@aar'

Be careful when adding the maven url, it has to be the path to the MyO SDK, which you have downloaded earlier. And the path should go upto the level of the folder “myorepository”. In my case it was in the Desktop.

The compile line will get the library from the path provided above and sync it. The reason is unlike many other libraries the MYO is not hosted anywhere to automatically Android Studio to find it. So this is kind of a work around to build a MYO app in Android Studio.

Step 4
Next thing is in the SDK you have downloaded go to the
Eclipse –> MyoSdk–>libs and copy all the folders in it.
Capture
Be careful not to copy the “myosdk.jar”

Then go to the file location of your Android Studio Project
In the app–>src–>main create a folder called “jniLibs” and paste the folders you have copied earlier from the MYO SDK folder

Now your Project structure will look like this
Capture2

Step 5
Ok now we have done the important stuffs and the workaround to some errors we may have faced(Actually I faced those errors and found out these workarounds, all happened due to no support for the Android studio from the MYO guys )

So we go to our main activity and first we have to create a instance of Hub and initiate it. Hub is the main guy who will be listening to the signals from the Band.

So we create and initialize it in the onCreate() method

Hub hub = Hub.getInstance();
if (!hub.init(this)) {
    Log.e(TAG, "Could not initialize the Hub.");
    finish();
    return;
}

Step 6
Now we have initialized the Hub, now we have to find available MyO bands and connect to it. For that we start an activity called ScanActivity, which comes with the MyO SDK.

Intent intent = new Intent(context, ScanActivity.class);
context.startActivity(intent);

All the hard work is done by the library, you will just have to select the device shown by this activity to connect your app with

Step 7
Ok now we come to a place where we have to set something called lock policy, as this is a Gadget which will be always moving here and there we have to enable one of the 2 policies available(You can create your own policy and apply them but for now we will see the 2 default ones)
One is LockingPolicy.NONE –  this one will remove any lock policies that are available, for this example I am using this for easy to understand
and the other one is  LockingPolicy.STANDARD – This policy is a general one that is used by most of the developers, which lock the device when it detects that it is not being used, so that when you want to use it again, you have to do the unlock gesture to unlock it.

So we have to apply a Locking Policy to out app too
So the next code snippet to add will be

Hub.getInstance().setLockingPolicy(Hub.LockingPolicy.NONE);

Remember all the code I am adding are in the onCreate() mthod. And I am only showing the snippets here. In the Full Code sample you will find them nicely organized in to methods.

Step 8
The last code snippet in the onCreate is not important, but I thought its important to mention it. The MYO guys are actually getting some usage data through their API, but we can manually stop it by adding this code line

if (Hub.getInstance().isSendingUsageData()) {
    Hub.getInstance().setSendUsageData(false);
}

I am checking if the usage data is being sent and if it returns true I am stoping it by passing the parameter ‘false’ to the method setSendUsageData()

Step 9
Now we have to create a method to create a listener and to respond based on the signals that we receive and Add it to the Hub

private void createAndAddListner() {

    mListener = new AbstractDeviceListener() {
        @Override
        public void onConnect(Myo myo, long timestamp) {
            Toast.makeText(context, "Myo Connected!", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onDisconnect(Myo myo, long timestamp) {
            Toast.makeText(context, "Myo Disconnected!", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onPose(Myo myo, long timestamp, Pose pose) {
            switch (pose) {
                case REST:
                    Toast.makeText(context, "REST", Toast.LENGTH_SHORT).show();
                    break;
                case FIST:
                    Toast.makeText(context, "FIST", Toast.LENGTH_SHORT).show();
                    break;
                case WAVE_IN:
                    Toast.makeText(context, "WAVE_IN", Toast.LENGTH_SHORT).show();
                    break;
                case WAVE_OUT:
                    Toast.makeText(context, "WAVE_OUT", Toast.LENGTH_SHORT).show();
                    break;
                case FINGERS_SPREAD:
                    Toast.makeText(context, "FINGERS_SPREAD", Toast.LENGTH_SHORT).show();
                    break;
                case DOUBLE_TAP:
                    Toast.makeText(context, "DOUBLE_TAP", Toast.LENGTH_SHORT).show();
                    break;
                case UNKNOWN:
                    Toast.makeText(context, "UNKNOWN", Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    };

    Hub.getInstance().addListener(mListener);
}

Here the mListner is an instance of DeviceListener Class. And you can see 3 override methods it has, onConnect, onDisconnect and the onPose

If the device is connected properly onPose is the one that gets triggered when you try to do gestures  using the MyO Arm band. I have added different Toast Messages for each of the Actions. If the action does not match any of the predefined 6 Actions it will be fall under the Action “Unknown”

Step 10
So now that we have created the function to create the mListner and attach it to the Hub now we have to call it in the onResume()

protected void onResume() {
    super.onResume();
    createAndAddListner();
}

and must not forget to detach the listener when we go out of the app so on oPause function we remove the listener

protected void onPause() {
    super.onPause();
    Hub.getInstance().removeListener(mListener);
}

So that’s it folks now you can write your own code to do stuff for each of the MYO Arm Band’s gestures detected.

Have Fun Folks
😀

For clear and clean code of this project visit the GitHub
gitHub-download-button

Advertisements

Lets try Android Game Development with AndEngine

Hi Guys, this time I am back with some Android Game Development. I got this idea after, the popular game Flappy Bird. Hope all may have tried that game…!
Ok, so I wanted to develop a game and I did some researches and found out that there are a lot of Game engines out there.  Some of them are COCOS2D, AndEngine, libGDX and many others. In this article I’ll guild you using AndEngine which is a bit easier one. In future I’ll write on libGDX.

Assumption : I assume that you guys know how to install eclipse development environment, configure java path and install Android plugin to eclipse. This post does not cover all those basic steps.

Advise : As this is a kind of a crash course, its advisable to create files the same name as I use(But it is not mandatory).

Expected Outcome : You will be able to create some lines using the AndEngine

Step 1
Download the Source(library) for the AndEngine using this link and extract
https://github.com/nicolasgramlich/AndEngine

Step 2
Create a new project and when creating select ‘Android Project from Existing Code’ and in it select the folder that we extracted in the Step1.
existing code

This is a library project. Actually this library is the ANDENGINE.
libraryproject

You can check it by right clicking on the project we created now and going to the Android tab. You can see the ‘Is Library’ check box ticked.

Step 3
Now create a new Android project and un tick the create activity. Because we are going to create AndEngine activity using the library project we created above.
createactivity

Step 4
Now you have a project with empty src folder. Right click on that folder and create a new package when naming the package use the package name available in that project ManifestFile
packagename

In my case package name is ‘”com.batz.andengsample”‘

Step 4
Now in side the empty package Download or copy the code and create LineEample.java activity using this LineExample Source Code.

You will get some errors, but don’t worry we will fix it in the next step.

Step 5
So now in your project, right click and go to Android tab and there in the below section(library section), click on the add button and select the AndEngine project and press ok. And then press Apply.
add library

Now all the errors may have gone. Some times you will have errors on the package name, if you have used your own name. So for that, click on the package name that shows as error, click ctrl key +1 key , which will bring suggestion to create a package name according to yours, and click on it to create it. And hopefully all the bugs will be fixed.

Step 6
Before going for the app launch, we have to do one more important thing, we have to specify the activity we created now in the manifest file as a launcher

So go to the manifest file and add these lines between the application tags

         <activity
android:name=”.LineExample”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
manifest

LineExample is the name I gave for the activity we created, so in your one don’t forget to change that

Step 7
Now you are ready to run the app. So while you are in the the activity try running the app. it should bring a screen where you will see lots of random lines.

Step 8(For people getting error saying cannot find andengine.apk)
For some people the AndEngine folder is not getting added as library on the time of building the app. So at that point what you can do is copy the andengine.jar file from the AndEngine project libs folder and copy it into your projects’s libs folder. And right click on the newly added andengine.jar file and click on ‘Add to Build Path’ option. This is how the project structure looks after I added the jar to my project from the AndEngine project in the Step8

projectstructure

AndEngine Resources : http://www.andengine.org/

For people who got more time , for people who needs more detailed instruction on the same project guild please watch this tutorial video
Development Reference : http://www.youtube.com/watch?v=Q0kjiIH6u-M

Thank You
Happy Coding…!

-Batz-