Feeds:
Posts
Comments

Posts Tagged ‘android’

IMG_7121IMG_7117Training in Full Swing

Advertisements

Read Full Post »

Android Advanced Development Demo Session at our new office- 29th March 2014

 

IMG_7114IMG_7116

Read Full Post »

COFFEE…..CHAT… CONNECT…CODE
The future is mobile, and the future for mobile is apps.
We all use mobile apps for ordering pizza, getting directions, playing games, weather updates, social networking, checking account balance, reserving storage units, taking doctor appointments etc. When people we have smart phone in our hands, we have answers to everything on our fingertips.
Mobile app development is a fast growing industry. As the number of mobile and smart phones increases day by day, businesses are developing innovative mobile apps to attract the target audience.
So, don’t wait and create your own Android App in just 30 Days. 

BASIC ANDROID COURSE- DURATION- 35 Hours – 1 Hour everyday (MON-FRI). FEES- INR 8,000

CALL NOW AND REGISTER YOURSELF: +91-9560597070

COURSE CONTENTS:

Module 1- Cannot wait to build my First Android App
Getting started with android
Android Features
Android Architecture
Android Application fundamentals
Android App Components
Android SDK
Building your First App

Module 2- I need more screens in my App
Creating an Activity
Declaring the activity in the manifest
Starting an Activity
Shutting Down an Activity
Managing the Activity Lifecycle
Implementing the lifecycle callbacks

Module 3- Show me the GUI
UI design
Components and layouts-Linear Layout, Relative Layout
Write the XML
Load the XML Resource
Attributes- ID, Layout Parameters,Position, Size, Padding and Margins
Binding to Data with AdapterView
List View- Simple List, Custom List
WebView
GridView
Working with resources- String resource, Color resource, Array resource

Module 4- Can my App call another App
Intent Types
Building an explicit Intent
Building an implicit intent
How to create an App Chooser
Intent Resolution
Calling Camera and take picture

Module 5- The story behind Services and Background Running Service
Creating a Service
Lifecycle of a Service
Running Service in Background

Module 6- Let’s have a “Dialog”
Creating a Dialog Fragment
Building an Alert Dialog
Adding buttons
Showing a Dialog
Dismissing a Dialog

MODULE 7- KNOCK KNOCK Who is it – It’s Notification in your tray. Listen to the Broadcast
Creating a simple notification
Removing notifications
Broadcast Receivers

MODULE 8- Lets raise a TOAST for the users
The Basics
Creating and Positioning your Toast

Module 9- Bugs on my Left, Bugs on my right
Debugging android applications
Debugging Tips
Debugging tools

Module 10- Looking for Storage Space? We are here to help you
Using Shared Preferences
Using the Internal Storage
Using the External Storage
Using Databases

Module 11- Connect me to a server
Web services
Parsing JSON data
Parsing XML data- Simple API XML Parser

Module 12- Painless MultiThreading for performance
Mutithreading in Android
Asynch Task

Module 13- Get Set Go- Ready to take off to the Playstore
Preparing Your Application for Release
Releasing Your Application to Users

Read Full Post »

I was trying to google some resources on Pending Intent flags but couldn’t find a good explanation, so thought of writing the same. This blog explains the flags needed for creating Pending Intent.
The following example uses Pending Intent object for creating a notification.
What is Pending Intent– Pending Intent is used to grant other application the right to perform the operation you have specified as if the other application was yourself (with the same permissions and identity). As such, you should be careful about how you build the PendingIntent: often, for example, the base Intent you supply will have the component name explicitly set to one of your own components, to ensure it is ultimately sent there and nowhere else.
PendingIntent can be created as follows:
PendingIntent pi= PendingIntent.getActivity(Context context, int requestCode, Intent intent, int flags)
The above line of code retrieves a PendingIntent that will start a new activity, like calling Context.startActivity(Intent).
The last argument is the PendingIntent flag. The flags can take any of the following values:
FLAG_CANCEL_CURRENT -Flag for use with getActivity(Context, int, Intent, int), getBroadcast(Context, int, Intent, int), and getService(Context, int, Intent, int): if the described PendingIntent already exists, the current one is canceled before generating a new one.
FLAG_NO_CREATE-Flag for use with getActivity(Context, int, Intent, int), getBroadcast(Context, int, Intent, int), and getService(Context, int, Intent, int): if the described PendingIntent does not already exist, then simply return null instead of creating it.
FLAG_ONE_SHOT-Flag for use with getActivity(Context, int, Intent, int), getBroadcast(Context, int, Intent, int), and getService(Context, int, Intent, int): this PendingIntent can only be used once.
FLAG_UPDATE_CURRENT-Flag for use with getActivity(Context, int, Intent, int), getBroadcast(Context, int, Intent, int), and getService(Context, int, Intent, int): if the described PendingIntent already exists, then keep it but its replace its extra data with what is in this new Intent.
Example-The code below explains the concept of Pending Intent flags. The results obtained by running the same code with different flags ,are mentioned below :

package com.ls.la;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class NotificationProjActivity extends Activity {

	NotificationManager nm;
	Notification notification;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		Intent notificationIntent = new Intent(this, MyClass.class);
		String n = Context.NOTIFICATION_SERVICE;
		nm = (NotificationManager) getSystemService(n);
		int icon = R.drawable.icon; // icon from resources
		String tickerText = "Hello"; // ticker-text
		long when = System.currentTimeMillis(); // notification time
		Context context = getApplicationContext(); // application Context
		CharSequence contentTitle = "My notification"; // expanded message title
		CharSequence contentText = "Hello World!"; // expanded message text

		notificationIntent.putExtra("n1", 30);
		notificationIntent.putExtra("n2", "test");

		PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
				notificationIntent, 0);

		// the next two lines initialize the Notification, using the
		// configurations above
		notification = new Notification(icon, tickerText, when);
		notification.setLatestEventInfo(context, contentTitle, contentText,
				contentIntent);
		notification.defaults = Notification.DEFAULT_SOUND
				| Notification.DEFAULT_VIBRATE;
		// long[] vibrate = { 0, 100, 200, 300 };
		// notification.vibrate = vibrate;
		notification.flags = Notification.FLAG_AUTO_CANCEL;

		nm.notify(1, notification);

		notificationIntent.putExtra("n1", 80);
		
		//creating 2nd Pending Intent with the matching intent and  		//using flag FLAG_NO_CREATE

		PendingIntent contentIntent1 = PendingIntent.getActivity(this, 0,
				notificationIntent, PendingIntent.FLAG_NO_CREATE);

		notification.setLatestEventInfo(context, contentTitle, contentText,
				contentIntent1);
		notification.defaults = Notification.DEFAULT_SOUND
				| Notification.DEFAULT_VIBRATE;
		notification.flags = Notification.FLAG_AUTO_CANCEL;

		// for logging if the new pending intent created is same object or not

		if (contentIntent.equals(contentIntent1)) {

			Log.v("NotificationProjActivity", "OBJECTS ARE EQUAL");

		} else {
			Log.v("NotificationProjActivity", "OBJECTS ARE NOT EQUAL");

		}

		nm.notify(1, notification);

	
	}
}

In the above code a Pending Intent object contentIntent is created as follows:


 PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
				notificationIntent, 0);

The notificationIntent is an Intent object having one integer extra and one String extra.


		notificationIntent.putExtra("n1", 30);
		notificationIntent.putExtra("n2", "test");

Then a second PendingIntent is created using the same matching Intent as follows:


PendingIntent contentIntent1 = PendingIntent.getActivity(this, 0,
				notificationIntent, PendingIntent.FLAG_NO_CREATE);

However, a couple of points to mention here:
1. The same matching intent notificationIntent is used but the integer extra has been changed from 30 to 80.
notificationIntent.putExtra(“n1”, 80);
2. The PendingIntent flag FLAG_NO_CREATE is used for the 2nd PendingIntent contentIntent1.
Lastly, a log statement has been used in the code to check if the PendingIntent contentIntent and PendingIntent contentIntent1 are equal or not.


if (contentIntent.equals(contentIntent1)) {

			Log.v("NotificationProjActivity", "OBJECTS ARE EQUAL");

		} else {
			Log.v("NotificationProjActivity", "OBJECTS ARE NOT EQUAL");

		}

FLAG_NO_CREATE-
If, we run the above code, we will see that the Log message will print :
OBJECTS ARE EQUAL.
Also, when we retrieve the intent in MyClass (which will happen when we click on the notification from the notification tray), the values of integer extra will be 30 and not 80.
The above clearly explains that if there is an existing PendingIntent object which matches and the FLAG_NO_CREATE is specified then a factory method will return a PendingIntent instance which refers to the existing PendingIntent object.If this flag is specified a new PendingIntent instance will not be created.This can be verified by the log message and the integer extra.

FLAG_UPDATE_CURRENT-
Now run the above code, by changing the flag from FLAG_NO_CREATE to FLAG_UPDATE_CURRENT
When we run the code after changing the flag, we will see that the Log message will print :
OBJECTS ARE EQUAL.
Also, when we retrieve the intent in MyClass (which will happen when we click on the notification from the notification tray), the values of integer extra will be 80 and not 30.If FLAG_UPDATE_CURRENT flag is specified and a matching PendingIntent exists then it will be updated with the new extra value if any. This can be verified by the log message and the integer extra.

FLAG_CANCEL_CURRENT-
Now run the above Now run the above code, by changing the flag from FLAG_UPDATE_CURRENT to FLAG_CANCEL_CURRENT
When we run the code after changing the flag, we will see that the Log message will print :
OBJECTS ARE NOT EQUAL.
Also, when we retrieve the intent in MyClass (which will happen when we click on the notification from the notification tray), the values of integer extra will be 80.If this flag is specified and a matching PendingIntent exists then it is cancelled.

I have posted the source code of the PendingIntent flags at :

Download source code (NotificationProj.rar)

au revoir. profiter le blog (Bye. Enjoy the blog)

Read Full Post »

During one of the training programs someone asked me how to query the MediaStore database for images. So, i thought of writing a small program for the same.

The database or Content URI for the Images is MediaStore.Images.Media.EXTERNAL_CONTENT_URI .
This is the content:// style URI for the “primary” external storage volume.
The querying method is same like querying any other native content provider.
First obtain the ContentResolver object by using getContentResolver();
We can then query the contentresolver object as follows:


Cursor cursor = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
				
                         null, null, null, null);

The Images DataStore has a couple of columns. Some of the main columns are:
1.MediaStore.Images.ImageColumns._ID– This represent the Unique ID of the row.
2.MediaStore.Images.Media.DATE_TAKE– The date when the image was captured. The same is in long miliseconds.
3.MediaStore.Images.Media.LATITUDE– The latitude where the image was captured.
4.MediaStore.Images.Media.LONGITUDE– The longitude where the image was captured.
5.MediaStore.Images.Media.DESCRIPTION-The description of the image
For example, if we want to get the date of the image taken, then we would iterate the cursor and query the date column as follows:


String date = cursor.getString(cursor
						.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN));

A major point to remember here is that when we are working with bitmaps , if we do not recycle them then we might see OutOfMemory issues such as OutOfMemoryError: bitmap size exceeds VM budget.
To avoid memory leaks remember to unbind the drawables and recycle the bitmaps in Activity onDestroy method. (REF:Avoid MemoryLeak)

I have posted the source code of the QueryMedia at :

Download source code

Browse Source code:

The same queries the SDcard for all the images stored in it and display them in the gridview along with the date they were captured.
If you are running this code on emulator please ensure that you have some images in your emulator sdcard.

Read Full Post »

I also conduct Android training on weekends in Gurgaon at Cwide. Visit http://www.cwide.in for more details.

Details of the course:
This Android course is a interactive, hands-on training which provides you a complete overview of the Android platform and how to make the most of your application development.
The curriculum is developed according to industry standards and requirements and this course will make you an expert by leveraging your existing Java skills
You will be trained with original Android Phones and Tablets to test your application.
At the end of the course, you will have the knowledge to build and publish your own real-time Android application

One of the prerequisite for Android is that you need to have java background.
If you do not know java and want to learn Android, you can take the basic core java course from me.

Android COURSE FEES- 12000 .
If you are interested in learning development of apps for Honeycomb then the course fees is INR 14,000. (The Honeycomb course content is also attached with the phone apps development course content).

You can opt for either the weekend batch – Both Saturday and Sunday. Duration 5 weekends. (10 classes) Timings 11.30 a.m.-6.00 p.m. Timings are flexible.
Or you can opt for weekdays classes. Duration 20 days . Timings- 9.00a.m. to 12.00 p.m. Timings are flexible.

Interested candidates call at 9560597070 or mail at androidtraining4u@gmail.com

Explanation with sample codes and small programs for each and every topic. At the end of the course you will be given a sample project which will help you in integrating all the concepts learnt by you.

About the trainer:
I am a freelancer android developer and corporate trainer having 2 years of experience in android and 3.5 years of experience in Java.

My app published in the market are:
Future Teller Ram Prashnavalli

Some other apps developed by me :

COURSE CONTENTS:

Module I

Getting started with android
Android Features
Android Architecture
Android Application fundamentals

Module II
Creating an Activity
Declaring the activity in the manifest
Starting an Activity
Starting an activity for a result
Shutting Down an Activity
Managing the Activity Lifecycle
Implementing the lifecycle callbacks
Saving activity state
Handling configuration changes

Module III
UI design
Components and layouts- Frame Layout, Linear Layout, Relative Layout
Write the XML
Load the XML Resource
Attributes- ID, Layout Parameters,Position, Size, Padding and Margins

Module IV
Working with resources- String resource, Color resource, Array resource
Android layouts and views
Handling user interaction events
Grouping, accessing of resources
Localization of Resources
Handling runtime changes of resources
Designing your GUI

Module V
Implicit Intent
Overview (Action, Data, category, etc)
How intent works
How intent filter works and writing our own intent filters

Module VI
Creating menus- Options Menu. Context Menu
Styles and themes
Creating dialogs- Alert Dialog, DatePicker Dialog, TimePicker Dialog, Progress Dialog

Module VII
Notifying the users- Toast Notifcation, Status Bar Notifcation
Debugging android applications
Broadcast Recievers

Module VIII
Binding to Data with AdapterView
List View- Simple List, Cutom List
Spinner
GridView
Sliding Drawer View, Rating Bar View, Toggle Button View

Module IX
Multimedia in android
Simple media playback from Local file system
Media playback from URL
Media Playback from raw folder
Play Video from local file system
Play video from URL

Module X
Data Storage
Using Shared Preferences
Using the Internal Storage
Using the External Storage

Module XI
Using Databases
Sqlite open helper and creating a database
Opening and closing a database

Module XII
Basic content providers
CRUD operation on Contacts Database
CRUD operations on IMAGE Database
Creating your own DB for your Application

Module XIII
Graphics and Animations
View Animation- Tween animation, Frame Animation
Drawable Animation- Nine-Patch File, State List, Transition Drawable

Module XIV
Mutithreading in Android
Asynch Task

Module XV
Accessing android hardware
Using the camera
Using bluetooth
Using Wifi

Module XVI
Geocoding and Location Based Services
Maps
Finding Current Location
Using Geocoder to get the current address of the user
Plotting the current location on map

Module XVII
Telephony and SMS

Module XVIII
Sensors
Accelerometer Sensor
Proximity Sensor
Light Sensor

Module XIX
Web services
Parsing JSON data
Parsing XML data- Simple API XML Parser and DOM Parser

Module XX
Service
Creating a Started Service
Creating a Bound Service

Module XXI
Honeycomb Fragments
Dialog Fragment
Action Bar
Tabbed Navigation Action Bar Activity
List Navigation Action Bar Activity

Read Full Post »