pokemon-go-usage-comparison

Pokemon Go – Start of the Next Generation Gaming

Within past 2 weeks you may have somehow came across a name, topic, Game saying ‘PokemonGo’. It is Niantic’s first ever client Project. If you have no Idea on who is Niantic, its a company that has spun out of Google in October 2015, and they are already popular among many for creating Ingress a real world map based augmented reality game.

If you are already into PokemoGo, you may have already come across some people who were trying to say, PokemonGo players must thank the Ingress Community, but no one ever care about that guy.

13710455_10207066020269213_5072986070562172765_o

The truth is Niantic made Ingress as their Portfolio Game to prove the world and the Gaming community that the Next Generation Gaming should be close to reality. So made this Game Niantic, the time they created the Game they have no data on Portals/PokeStops(in PokemonGo), then they tried to find some individuals in each country and encouraged them to play the game and submit Portals. This may look easy but if you are an Ingress Player Playing it for 3 years, you may see it as how tiresome and how much distance people have walked to make it to the number it has now. We can also say that Niantic has tricked the People in collecting data for them to use for it’s own other Products like PokemonGo in future.

Ok so this Game PokemonGo makes people stand up go out side and play?  Yes it does, you cant stay inside your house and expect a Pokemon to come in, You have to go near lakes sea to catch water Pokemon near mountains and rocky areas to catch Rock Pokemon, you some times have to chase after rare Pokemon that goes in front of your eyes. People who are fans of Pokemon Cartoons and Console Games know how exciting is to really go out and catch your Own Pikachu, the Pokemon’s Idol. But some people say how convincing is this game or is there a future to games like this.

Yes you may remember once upon a time there came a game called Farm Villa, first of it’s type game. No if you open the App Store it is filled thousands of Similar Game. In Farm Villa it only uses real time and people are really excited to see their plants grow in certain hours. But here it is real time, environment, people will really get excited, but again people always gets bored. So for now Pokemon Go will still arise high despite it’s battery draining issues and bugs. Its already so popular and not launched in Asia yet, when they launch it world wide its going to be Crazy.

In the economical ankle, PokemonGo has send up the stock prices of Nintendo by a a Great leap. Can get more info on that news at Forbes

20160718_Pokemon_Effect_Forbes-1

Based on the current popularity and the regular server downs. You can have an idea on how many people are playing this game at the Moment.  Niantic has also revealed the plan to use Pokestops as a paid Ad spot so that the Business’s can have a great visibility. So it also going to work as the next Generation marketing tool.  You can check out the following Graph on how it is penetrating in to the user base

Pokémon-Go-Likely-to-Overtake-Google-Maps-Snapchat

Some people worry about incidents like accidents and kidnaps that involves Pokemon. Yes its true and it’s a Dangerous fact. But the world is growing fast technology is advancing we cannot stick to the same old thing. People have to learn to adopt to this new behavior. And some people are trying to force in the fact that this is stupid. But if you can think a bit into the future, your kids or their kids are going to live in more advanced era than us, so its a fact that they will play these kinds of Games, they may get into the same trouble. So without staying a step behind from technologies like Real World Gaming, why don’t you try it at least to understand the idea behind it, how it works and  the possible problems that can arise. So that you can be prepared for any trouble when it happens.

The world is changing fast, you wanted a Augmented reality world like you see in Iron man, here it is, its there now in front of your eyes, don’t stay away from it. Get into it and learn to adopt it. And be happy for the fact that your children in future will not always be glued to the Console Games and PC like they did till 2 weeks before.

RoundedImageView – Android

round-white-label-l

This is a library which consist of a RoundedImageView. This is a hassle free light weight ImageView that you can use for user profiles and other needs.

This can be integrated in your Android Studio project using this Gradle integration

compile 'com.pathofacoder.roundedimageview:roundedimageview:0.1.0'

Library can be found here – https://bintray.com/batzee/maven/RoundedImageView/view

This project is made Open Source under the Apache 2.0 license, so you can help improve the library by contributing here
https://github.com/Batzee/Android-RoundedImageView

A small sample will be added soon…

Pocket Signature View for Android

Android Signature View

This is a library which consist of a Signature View. This can be used as a Signature Pad
Main intention to develop this view is to avoid using bitmaps to use device memory efficiently.

Features
-The drawn image can be out put as SVG(Vector Image), which is very much small in size. -Also the drawing data can be saved as String and that String can again be loaded in to this view.

This can be integrated inside your Android Studio using the Gradle

compile 'com.batzeesappstudio.pocketsignatureview:pocketsignatureview:0.1.6'

Library can be found here – https://bintray.com/batzee/maven/android-signature-view/view

This project is made Open Source under the Apache 2.0 license, so you can help improve the library by contributing here
https://github.com/Batzee/Android-Signature-View

A small sample will be added soon…

New Permission Model in Android

Hi Folks, today we will be seeing the new permission model in action and how to handle it. You know that we define the system permissions that we need to run the app like Camera and “READ_EXTERNAL_STORAGE” and “WRITE_EXTERNAL_STORAGE” permissions in the manifest file. But this is not enough for the from the API level 23 , Android 6.0, the new model is introduced that is getting the permission from the user on the run time.

So we will see how we can do it. For this I am using the latest Build Tools 23.0.2
And the Compiled SDK Version is API 23

Always make sure you are using the latest build tools as Google always improve the backward compatibility through it.

Ok the the first thing you have to understand is, we will be checking this permission availability exactly before the place where we access the permission related operation. Adding this code will have no special effect on the phones that are running versions less than Android 6.0

And we have to add the regular permission as usual in the Manifest too. Else again the app will crash.

We will be doing a sample on getting a screen shot and saving it to the SD Card so here we need the “WRITE_EXTERNAL_STORAGE” permission

Step 1
At the place where we have to invoke the screenshot function we check if the permission is already available. If the permission is already available we proceed with the taking screen shot, else we call another methods which will invoke the  new permission request procedure.

if(PackageManager.PERMISSION_GRANTED== ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)){
    shareScreenShot();
}else{
    requestWritePermission(MainActivity.this);
}

Step 2
the method requestWritePermission(context) will check if the permission is already requested and if already requested and rejected it shows another Custom Dialog which explains why the permission is needed and when the Allow button is click it shows the Permission request again. Meanwhile if this is the first time the request permission procedure will automatically fired.
While we invoke the ‘ActivityCompat.requestPermissions’ method we pass a request code, in our case it is “REQUEST_WRITE_EXTERNAL_STORAGE” so that we can track back the result on the onRequestPermissionResult() override method and respond to it appropriately.

private static void requestWritePermission(final Context context){
    if(ActivityCompat.shouldShowRequestPermissionRationale((Activity)context,Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
        new AlertDialog.Builder(context)
                .setMessage("This app needs permission to write data to the phone so that the Screenshot can be saved")
                .setPositiveButton("Allow", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_WRITE_EXTERNAL_STORAGE);
                    }
                }).show();

    }else {
        ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_EXTERNAL_STORAGE);
    }
}

Step 3
In the onRequestPermissionResult() we catch the reult from the permission dialog and decide whether to go for the screenshot procedure or not

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    switch (requestCode) {

        case REQUEST_WRITE_EXTERNAL_STORAGE: {
            if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                shareScreenShot();
            } else {
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            }
            return;
        }
    }
}

So here is the order in it work, these are taken from one of my other app, and its done for reading from the SD card
step1    Step 2   Step 3

So that’s it guys hope you guys understood and will implement in your own application
Sample app can be found at the GitHub gitHub-download-button

You can get more info from the official documentation here :  http://developer.android.com/training/permissions/requesting.html

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

Exploring Flic Button

What is a Flic?
Flic is a wireless hardware button. Works using Bluetooth, paired with your phone. It is not rechargeable but the battery is replaceable. Can be stuck on wall or pinned in dresses, for easy access depends on your need. It can broadcast 3 functions to your phone for 3 actions, Single Click, Double Click and Press and Hold.

IMG_20160212_093850

It already has an app called flic, which got some basic day to day usable functions already defined. It is more than enough for your daily usage. But it got an API which we can use to invoke our own app or services that is running in the phone. This will enable us to develop a mobile solution which can be triggered using this button or create a service which can gather resources using the available sensors in the phone and send it to server. So we can consider this under Concept of IOT.

Ok so we will try to write something so we invoke our own functionality using the Flic Button.

Step 1
First of all this API does not work alone it needs you to install their android app and connect your Flic buttons using it. Before you start to concentrate on the API. You can download the app here

Step 2
Now you have to visit GitHub and download the Flic Library project. You can simply download it as a zip file and unzip it.  you can visit the site here

Step 3
Open the Android studio and create a new project that supports Minimum API level 19(Android 4.4), then go to File –> New –> Import Module and select the ‘fliclib-android’ from the git hub library project you have downloaded. Now you have added the library to the project structure.

Step 4
Now you have to add reference to the added library by going to  File -> Project -> Structure -> app (in the left sidebar) -> Dependencies tab -> The + button in the rightmost section -> Module dependency -> fliclib  and selecting ‘OK’

Step 5

on your main activity on the onCreate you have to set up the app credentials

FlicManager.setAppCredentials("[appId]", "[appSecret]", "[appName]");

You can get the credentials by registering your app at the Flic here

Step 6
Now after setting the App Credentials you have to grab a button from the main flic button app using this code snippet

try {
    FlicManager.getInstance(this, new FlicManagerInitializedCallback() {
        @Override
        public void onInitialized(FlicManager manager) {
            manager.initiateGrabButton(MainActivity.this);
        }
    });
} catch (FlicAppNotInstalledException err) {
    Toast.makeText(this, "Flic App is not installed", Toast.LENGTH_SHORT).show();
}

So when you have selected the button on the onActivityResult call back you will get the results, and if the grab is success, you can registerBroadcast for specific functions, based on that the Broadcast receiver we are gona write in a moment, will trigger events. In this case we are subscribing the Broadcast Receiver for UP_OR_DOWN operation and REMOVED events only

@Override
public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    FlicManager.getInstance(this, new FlicManagerInitializedCallback() {
        @Override
        public void onInitialized(FlicManager manager) {
            FlicButton button = manager.completeGrabButton(requestCode, resultCode, data);
            if (button != null) {
                button.registerListenForBroadcast(FlicBroadcastReceiverFlags.UP_OR_DOWN | FlicBroadcastReceiverFlags.REMOVED);
                Toast.makeText(MainActivity.this, "Grabbed a button", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "Did not grab any button", Toast.LENGTH_SHORT).show();
            }
        }
    });
}

So now we have configured the setting up we, have to write a BroadCastReceiver to get the calls from the button and trigger events

Step 7

Create a class called ‘BroadCastReceiverFlic’ that extends ‘FlicBroadcastReceiver’, which comes from the API project we added.
In that class in the Override method ‘onRequestAppCredentials’ you have to again setup the flic credential that you did at the main activity onCreate function.

Then as we have already registered for the UP_OR_DOWN and REMOVED broadcasts we can override these functions

@Override
public void onButtonRemoved(Context context, FlicButton button) {
    // Button was removed
}

and

@Override
public void onButtonUpOrDown(Context context, FlicButton button, boolean wasQueued, int timeDiff, boolean isUp, boolean isDown) {
    super.onButtonUpOrDown(context, button, wasQueued, timeDiff, isUp, isDown);
    if (isUp) {
        Log.d("IS UP", "True");
    } else {
        Log.d("IS DOWN", "True");
    }
}

In the final method you can trigger events based on if the button is up or down(In my case I am Logging different messages). If you have subscribed for the Broadcast service “CLICK_OR_DOUBLE_CLICK_OR_HOLD” you could override the function ‘onButtonSingleOrDoubleClickOrHold()’

Any way for the sample code I’ll do the coding for ‘”CLICK_OR_DOUBLE_CLICK_OR_HOLD”‘ broadcast

So thats it folks you guys can get the full code here
gitHub-download-button

Will Write our Own App to Trigger Mi Band

10371404_10206191040355262_3352352559338119016_n
Xiaomi Mi Band is the world’s cheapest and branded fitness tracker. So why don’t we do some experiments so that we can make the Mi Band do what we say for a change?

I’ll be doing this code session for Android using Android Studio, hope others can understand the basics

Step 1
Firs of all we start a new empty project. And add 4 buttons. This is to test 4 basic functions of the Mi Band. Then initialize the buttons and ready the the setOnclick listners.

Step 2
Add Bluetooth Permissions in the Manifestfile, else you wont be able to connect to the band😀

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /

Step 3
Add the Xiaomi Mi Band dependencyto the gradle and sync it

compile 'com.zhaoxiaodan.miband:miband-sdk:1.1.2'

Step 4

In the oncreate you have to create and initialize an instance of the MiBand Class

private MiBand miband;
miband = new MiBand(this);

Step 5

I have not done the pairing part in the code, but I assume the Mi band of yours is already paired to the device. If you have paired more than one device you can populate all the paired devices and allow the user to select one. But for the demonstration purpose I have only paired with my Mi Band so it is the one and only device returns to me

Object[] devices = BluetoothAdapter.getDefaultAdapter().getBondedDevices().toArray();
final BluetoothDevice device = (BluetoothDevice) devices[0];

So I am getting my paired device from the available devices, as I only got my Mi band paired I get the 0th device. hope you people got that part😀

Step 6
No you have to connect to the paired device

miband.connect(device, new ActionCallback() {
    @Override
    public void onSuccess(Object data) {
        pd.dismiss();
        Log.d(TAG, "Success !!!");
        miband.setDisconnectedListener(new NotifyListener() {
            @Override
            public void onNotify(byte[] data) {
                Log.d(TAG, "Disconnected!!!");
            }
        });
    }
    @Override
    public void onFail(int errorCode, String msg) {
        pd.dismiss();
        Log.d(TAG, "connect fail, code:" + errorCode + ",mgs:" + msg);
    }
});

Step 7

So if you have successfully connected to the device. You can start invoking functions of the MiBand in the button clicks
For example : You can make it Vibrate using this code snippet

miband.startVibration(VibrationMode.VIBRATION_WITH_LED);

You can check out some more commands in the sample code available in Git HubgitHub-download-button