• Twitter
  • Facebook
  • Google+
  • Instagram
  • Youtube

About me

Let me introduce myself


A bit about me

Into IT industry since 3rd Jan 2011. Worked on many technologies like Web, android, ios, blackberry, augmented reality, virtual reality, touch tables, gesture based, gaming etc.

Learning new technologies. Passionate about the new gadgets and technologies ivolving in current market.

Profile

Tushar Sonu Lambole

Personal info

Tushar Sonu Lambole

Thane district based freelance developer, working experince from 2011

Birthday: 23 NOV 1987
Phone number: +(91) 9423026579
Website: http://tusharlambole.blogspot.com/
E-mail: tusharlambole137@gmail.com

RESUME

Know more about my past


Employment

  • 2016-2018

    Snap2life Pvt Ltd @ Senior Android / Unity3D Developer

    Got chance to learn Touch table apps, Gesture based app development. Magic mirror virtual dressing room technology. Implemented team work managment skills learn in life.

  • 2012-2016

    Mindspace Technologies Pvt Ltd @ Senior Developer

    Started working on android technologies. Got first time exposure to Unity3D and Augmented reality based apps and game. While learning the technology developed my own AR based action game and launched in market as "AR Battle Tank"

  • 2011-2012

    Prosares Solutions Pvt Ltd @ .Net Developer

    Started my carrier as an .Net developer got first time exposer to the IT industry. In few months got an apportunity to work on Blackberry mobile apps along with Android technology. Got to know about the cross platform technologies for mobile app development.

Education

  • 2011

    Bachelor of Engineering @BE Computer

    Graduated from University of Mumbai with BE degree in Computer stream with first class result.

  • 2005

    Higher Secondary School @ Science stream

    Cetificate of Higher Secondary Education with First class marks from Pune University Board.

  • 2003

    Secondary School @ Passed

    Got education in Maharashtra Military School with First class academic score. Got training for punctuality and discipline in work as well as in life.

Skills & Things about me

Learning Skill
86%
Technology
Punctual
91%
Discipline
Energetic
64%
Development

Portfolio

My latest projects


Android Native Plugin for Unity3D

Android Native Plugin for Unity3D

Author:- Tushar Sonu Lambole


1. Before start this steps will require UnityPlayer classes.Jar



in Mac will find at location "/Applications/Unity/Unity.app/Contents/PlaybackEngines/
AndroidPlayer/bin"

2. Right-click on the project in Eclipse, go to Properties > Java Build Path > Libraries



3. Create new classActivity paste the following code 

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;

import android.app.AlertDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.widget.Toast;

import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class RootActivity extends UnityPlayerActivity {
 static UnityPlayerActivity instance;

 public static UnityPlayerActivity getInstance() {
  return instance;
 }

 @Override
 protected void onCreate(Bundle savedInstanceState) {

  instance = this;
  super.onCreate(savedInstanceState);
 }

 public void showMessage(final String message) {
  this.runOnUiThread(new Runnable() {

   @Override
   public void run() {
    Toast.makeText(RootActivity.this, message, Toast.LENGTH_LONG)
      .show();
   }
  });
 }

 public void SocialMessageAdvanced(String message, String subject,
   String url, String img) {
  
  //showMessage(img);

  Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND);

  if (url != null && url.length() > 0) {
   if (message == null) {
    message = url;
   } else {
    message = message + " " + url;
   }
  }

  try {
   doSendIntent(message, subject, img);
  } catch (IOException e) {
   e.printStackTrace();
  }

  UnityPlayer.currentActivity.startActivity(sendIntent);
 }

 private void doSendIntent(String text, String subject, String image)
   throws IOException {
  final Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND);
  if (text != null && text.length() > 0) {
   sendIntent.putExtra(android.content.Intent.EXTRA_TEXT, text);
  }
  if (subject != null && subject.length() > 0) {
   sendIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
  }
  if (image != null && image.length() > 0) {
   sendIntent.setType("image/*");
   sendIntent.putExtra(Intent.EXTRA_STREAM,
     Uri.fromFile(new File(image)));
   UnityPlayer.currentActivity.startActivity(sendIntent);

  } else {
   sendIntent.setType("text/plain");
   UnityPlayer.currentActivity.startActivity(sendIntent);
  }
 }

 public void SocialMessage(String message) {
  Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND);
  sendIntent.setType("text/plain");
  sendIntent.putExtra(android.content.Intent.EXTRA_TEXT, message);
  UnityPlayer.currentActivity.startActivity(sendIntent);
 }
}

4. Right click on project and export as JAR file.

5. Open Unity3D application and paste the JAR from step 4 at location Assets/Plugins/Andoid

6. Open AndroidManifest.xml of unity3D file and make the changes as follows.
<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.qualcomm.QCARUnityPlayer"
    android:versionCode="1"
    android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />
    <uses-feature android:name="android.hardware.camera" />
    <supports-screens
        android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:anyDensity="true" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />
        
    <application
  android:icon="@drawable/app_icon"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:debuggable="false">
        <activity android:name="com.qualcomm.QCARUnityPlayer.QCARPlayerProxyActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait"
                  android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|
orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
           
        </activity>
        <activity android:name="com.qualcomm.QCARUnityPlayer.QCARPlayerActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait"
                  android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|
orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
        </activity>
        <activity android:name="com.qualcomm.QCARUnityPlayer.QCARPlayerNativeActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait"
                  android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|
orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
            <meta-data android:name="android.app.lib_name" android:value="unity" />
            <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
        </activity>
        <activity android:name="com.unity3d.player.VideoPlayer"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait"
                  android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|
orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
        </activity>
  <activity
            android:name="com.tushar.androidunityplugin. RootActivity"
            android:label="@string/app_name" >
    
   <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
   
  </activity>
    </application>
</manifest>




7. Create new c# script in Unity3D as "AndroidMapInterface"

using UnityEngine;
using System.Collections;

public class AndroidMapInterface : MonoBehaviour {

 // Use this for initialization
 void Start () {

  //Initialize AndroidBridge
  AndroidBridge.Initialize();
  
  //Register Action
  AndroidBridge.OnXploarShowEvent += onXploarShowEvent;
  
 }

 public void CallSocialShare(string text)
 {
  AndroidBridge.CallSocialShare(text);
 }

 public void CallSocialShareAdvanced(string text, string subject, string url, string img)
 {
  AndroidBridge.CallSocialShareAdvanced(text, subject,url,img);
 }
 void onXploarShowEvent(string eventStr){
  Debug.Log("AndroidXploarInterface - onXploarShowEvent:"+eventStr);
  
 }

 void OnDestroy() {
  AndroidBridge.OnXploarShowEvent -= onXploarShowEvent;
 }
}




8. Create new C# script paste code

using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
using System;

public class AndroidBridge : MonoBehaviour {

 public static event Action<string> OnXploarShowEvent;

 #if UNITY_IPHONE
  public struct ConfigStruct
  {
      public string tittle;
   public string message;
  }
  [DllImport ("__Internal")] private static extern void showAlertMessage(ref ConfigStruct conf);
  
 #endif

 // Init the class instance
 static AndroidBridge instance;
 public static void Initialize()
 {
  Debug.Log("Application Init");
  if (instance == null)
  {
   GameObject newGameObject = new GameObject("XploarBridge");
   newGameObject.AddComponent<AndroidBridge>();
   instance = newGameObject.GetComponent<AndroidBridge>();
  }
 }

 //Callback from Java or Objective-C which notifies an event
 //param : "EVENT_OPENED", "EVENT_CLOSED"
 //Method name starts small "o" and Event name is capital "O"
 void onXploarShowEvent(string eventStr){
  //Debug.Log("EasyCodeScanner - onScannerEvent eventStr=:"+eventStr);
  if (OnXploarShowEvent != null)
        {
            OnXploarShowEvent(eventStr);
        }
 }

 public static void CallSocialShare(string defaultTxt)
 {
  if (instance==null) 
  {
   Debug.Log("instance is null");
   Debug.LogError("AndroiddBridge - launchSilverpointMap error : ScriptObject  must be initialized before.");
   return;
  }
  
  
  #if UNITY_ANDROID 
    AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
   
    AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); 
     
    //Invoke the "SocialMessage" method in our Android Plugin Activity
    jo.Call("SocialMessage", defaultTxt);
  #endif
  
  #if UNITY_IPHONE 
   //IPHONE - Display the UIViewController
   ConfigStruct conf = new ConfigStruct();
   conf.tittle  = "Alert Message Tittle";
   conf.message = "First Attempt to call IOS plugin";
   showAlertMessage(ref conf);
  #endif
  
 }

 public static void CallSocialShareAdvanced(string defaultTxt, string subject, string url, string img)
 {
  if (instance==null) 
  {
   Debug.Log("instance is null");
   Debug.LogError("AndroiddBridge - error : ScriptObject  must be initialized before.");
   return;
  }
  
  
  #if UNITY_ANDROID 
    AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
   
    AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); 
     
    //Invoke the "SocialMessage" method in our Android Plugin Activity
    jo.Call("SocialMessageAdvanced", defaultTxt, subject, url, img);
  #endif
 }
}

9. Attach "AndroidMapInterface" script to the any gameobject

10. Call the methods as follows

AndroidMapInterface androidInterface = objectHavingScript.GetComponent<AndroidMapInterface>();
androidInterface.CallSocialShareAdvanced("Text",
"Subject","https://play.google.com/store/apps/details?id=com.tushar.ARBattleTank",

Application.persistentDataPath+"/Pic.jpg");

IOS Native plugin for Unity3D

IOS Native plugin for Unity3D

Author:- Tushar Sonu Lambole

1. In xcode project create new File as File-->New-->File..
Select Cocoa Touch in left panel, in right panel Select "Objective-C class"

2. Click Next Name file as "XploarIOSPlugin" You can Use any file name just remember to rename "XploarIOSPlugin" to your file name in below code.

3. Open "XploarIOSPlugin.h" file and paste the below code 


#import "UnityAppController.h"

@interface XploarIOSPlugin : UIViewController
{
    UINavigationController *navController;
}


struct ConfigStruct {
    char* tittle;
    char* message;
};

struct SocialSharingStruct {
    char* text;
    char* url;
    char* image;
    char* subject;
};


#ifdef __cplusplus
extern "C" {
#endif
    
    void showAlertMessage(struct ConfigStruct *confStruct);
    void showSocialSharing(struct SocialSharingStruct *confStruct);
    
#ifdef __cplusplus
}
#endif


@end

4. Open "XploarIOSPlugin.mm" file and paste the below code 

#import "XploarIOSPlugin.h"

@implementation XploarIOSPlugin{
}

//Grab the Unity3D ViewController (UnityGetGLViewController())

#ifdef UNITY_4_0

//Unity4

#import "iPhone_View.h"

#else

//Unity3.5

extern UIViewController* UnityGetGLViewController();

#endif

+(id) withTittle:(char*)tittle withMessage:(char*)message{

return [[XploarIOSPlugin alloc] withTittle:tittle withMessage:message];

}

-(id) withTittle:(char*)tittle withMessage:(char*)message{

self = [super init];

if( !self ) return self;

ShowAlertMessage([[NSString alloc] initWithUTF8String:tittle], [[NSString alloc] initWithUTF8String:message]);

return self;

}

void ShowAlertMessage (NSString *tittle, NSString *message){

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:tittle

message:message

delegate:nil

cancelButtonTitle:@"OK"

otherButtonTitles: nil];

[alert show];

}

+(id) withText:(char*)text withURL:(char*)url withImage:(char*)image withSubject:(char*)subject{

return [[XploarIOSPlugin alloc] withText:text withURL:url withImage:image withSubject:subject];

}

-(id) withText:(char*)text withURL:(char*)url withImage:(char*)image withSubject:(char*)subject{

self = [super init];

if( !self ) return self;



NSString *mText = [[NSString alloc] initWithUTF8String:text];

NSString *mUrl = [[NSString alloc] initWithUTF8String:url];

NSString *mImage = [[NSString alloc] initWithUTF8String:image];

NSString *mSubject = [[NSString alloc] initWithUTF8String:subject];


NSMutableArray *items = [NSMutableArray new];

if(mText != NULL && mText.length > 0){

[items addObject:mText];

}

if(mUrl != NULL && mUrl.length > 0){

NSURL *formattedURL = [NSURL URLWithString:mUrl];

[items addObject:formattedURL];

}
if(mImage != NULL && mImage.length > 0){

// For image from Web Url

if([mImage hasPrefix:@"http"])

{

NSURL *urlImage = [NSURL URLWithString:mImage];

// NSLog(@"Enter urlImage");

NSData *dataImage = [NSData dataWithContentsOfURL:urlImage];

// NSLog(@"Enter data %d",dataImage.length);

UIImage *imageFromUrl = [UIImage imageWithData:dataImage];

// NSLog(@"Enter data %f",imageFromUrl.size.height);

[items addObject:imageFromUrl];

}else{



// For image in local storage

NSFileManager *fileMgr = [NSFileManager defaultManager];



// Point to Document directory

NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];


NSString *imagePath = [[documentsDirectory stringByAppendingString:@"/"] stringByAppendingString:mImage];

// NSLog(@"Image Path %@",imagePath);

if([fileMgr fileExistsAtPath:imagePath]){

NSData *dataImage = [NSData dataWithContentsOfFile:imagePath];

// NSLog(@"Enter data %d",dataImage.length);

UIImage *imageFromUrl = [UIImage imageWithData:dataImage];

// NSLog(@"Enter data %f",imageFromUrl.size.height);

[items addObject:imageFromUrl];

}else{
ShowAlertMessage(@"Error", @"Cannot find image");
}
}
}

UIActivityViewController *activity = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:Nil];

[activity setValue:mSubject forKey:@"subject"];

UIViewController *rootViewController = UnityGetGLViewController();
[rootViewController presentViewController:activity animated:YES completion:Nil];

return self;
}

# pragma mark - C API
XploarIOSPlugin* instance;

void showAlertMessage(struct ConfigStruct *confStruct) {
instance = [XploarIOSPlugin withTittle:confStruct->tittle withMessage:confStruct->message];
}

void showSocialSharing(struct SocialSharingStruct *confStruct) {
instance = [XploarIOSPlugin withText:confStruct->text withURL:confStruct->url withImage:confStruct->image withSubject:confStruct->subject];
}

@end

Here your IOS code part ends. Copy the both the files "XploarIOSPlugin.h" and "XploarIOSPlugin.m" and paste at the location /Assets/Plugins/iOS of your Unity3D project.

---- In Unity3d ----------

1. Create new c# script name it as "IOSBridge" and paste the below cod



#if UNITY_IPHONE
public struct ConfigStruct
{
    public string tittle;
    public string message;
}
[DllImport ("__Internal")] private static extern void showAlertMessage(ref ConfigStruct conf);

public struct SocialSharingStruct
{
    public string text;
public string url;
public string image;
public string subject;
}

[DllImport ("__Internal")] private static extern void showSocialSharing(ref SocialSharingStruct conf);



#endif


public static void CallSocialShare(string title, string message)
{
#if UNITY_IPHONE
//IPHONE - Display the UIViewController
ConfigStruct conf = new ConfigStruct();
conf.tittle  = title;
conf.message = message;
showAlertMessage(ref conf);

#endif
}
public static void CallSocialShareAdvanced(string defaultTxt, string subject, string url, string img)

{
#if UNITY_IPHONE
//IPHONE - Display the UIViewController
SocialSharingStruct conf = new SocialSharingStruct();
conf.text = defaultTxt; 
conf.url = url;
conf.image = img;
conf.subject = subject;

showSocialSharing(ref conf);

#endif
}

2. Call above method CallSocialShare("This is Alert Tittle"," This is Message Text");

CallSocialShareAdvanced("AR Battle Tank"," AR Battle Tank Application link","https://play.google.com/store/apps/details?id=com.tushar.ARBattleTank","01.jpg");

"01.jpg" can be replace with any web url of image like 
"http://blog.gettyimages.com/wp-content/uploads/2013/01/Siberian-Tiger-Running-Through-Snow-Tom-Brakefield-Getty-Images-200353826-001.jpg"






Services

What can I do


Mobile Applications

Expertise in developing Android native app development. Creating custom requirement details into working app as per your wish.

Augmented Reality

Expertise in developing static and dynamic Augmented reality based application for Android and IOS platforms. Successfully developed 10+ AR apps for both the platforms.

Game Development

Successfully developed 10+ games for PC, Android and IOS devices. Games are puzzle games, action games, gambling games etc

Development

Worked on Android native, Unity3D, java, php, mysql, sqlserver, web hosting, website, photoshop, javascript, API's languages, technologies and tools.

Touch tables

Have worked for the touch table based games for Adani's Belvedere club house.

Gesture Recognition

Developed application as Magic Mirror for virtual dessing room. Users can use app to try various outfits in few clicks.

Contact

Get in touch with me


Adress/Street

B/1, Keshar Gaurav BLD, Gujarathi Baug, Shahapur

Phone number

+(91) 9423026579

Website

http://tusharlambole.blogspot.com/