Wednesday, December 3, 2014

What is new about Android 5.0 Lollipop

The news has spread like wildfire in the mobile and mobile application development industry, the new version of Google’s operating system has finally arrived. Android 5.0 Lollipop has taken this opportunity to give itself a major facelift, many believe the style and design to be closer to that of the Apple operating system, iOS.
However, despite the similarities, we cannot deny that with every Android 5.0 system update, Lollipop surprises us by either adding new functionalities, improving other aspects or as in this version with improved security. It was exactly that that was regarded as their main weakness, since Android was commonly known as the most attacked operating system for mobile malware.
Lollipop also brings some new features which you can now enjoy if you have a Nexus 6 or a Nexus 9, new models launched by Google with Android 5.0 already installed. If you have another Android mobile device do not despair, in the coming weeks you will be able to upgrade your OS, latest early 2015.


Android 5.0 Lollipop – What’s New?

The majority of new updates for Android 5.0 Lollipop does not directly affect the development of applications, but it can do, should we want to, which should be taken into account when defining and designing a prototype mobile application. For example energy savings should be taken into account if you are going to develop a ‘heavy’ app. For now we will focus on the most important updates of Lollipop:
Energy Saving:
One of the notable improvements of the system is the inclusion of an energy saving mode. This time this comes as standard on Android devices. A functionality which is perfect for those who spend their days using their devices and have to resort to awkward external battery charging or sacrificing their device usage time.
Blocking apps:
This is one of the innovations that can be very useful and yet it often seen as less important or not at all. With this new feature you can block an application simply by inputting a pin code of your choice into the screen. For example, if you give your phone to a child to play with but do not want them to get out of a certain game or browser, you can simply lock the device. This enables you to have peace of mind that the child isn’t going to mess up your work on your device or that they are definitely playing the educational app you’ve told them to ‘play’ (LINK)
Smart Unlock by Bluetooth:
This is another novelty addition that may be useful to the user. It enables the user to configure accessories that are connected by Bluetooth. When you connect the accessory for the first time, the mobile phone or tablet will pick up that the owner is nearby so you do not need to go through the interface unlock every time you go to connect.
Backup apps and data:
The functionality has finally arrived. This functionality was usually one of the big differences between the iOS operating system of Apple, and that of Android. After waiting for several versions to accommodate the function, it is finally Lollipop which allows us the possibility of backing up all of our apps and data.

Change in notifications:
This is one of the most important and most visible changes that the user will notice. Furthermore any developer who wishes to use lollipop to create applications must be aware that this will directly affect their application. There have been many big changes within the new Android 5.0 Lollipop. To take full advantage of them you must take into account that notifications will not be used in the same way as before. A lot more can be done, for example; you can access the alert notifications configuration for each application and change it. We can even set any app to notify you even in ‘Do Not Disturb’ mode if you consider that the application is very important or a priority.
Multiuser:
The new function that google have wanted to highlight the most is the multiscreen functionality. This function was available several versions ago, but was limited to Android tablets, and not smartphones. Now however, we can access multiple Lollipop user accounts from one Android phone or tablet, not only that but you can configure each desktop applications independently with different profiles.
Remote data wipe:
The location service within the android device  is also used by Google and been improved. The feature allows for your phone to be tracked, as usual, but also data can be erased from it. This feature many missed her, joins the new version of Android. This function that was so dearly missed before on this device is now available for the next version of Android.
Reactive Screen:
With Android 5.0 Lollipop turn can double tap the screen if the hardware supports it. As configured to mobile lights to catch it, without touching any buttons on the terminal.
Security – The Strong Point of Android 5.0
The security of any operating systems is always an extremely important and sensitive issue. It is increasingly common for mobile device users to make payments from their phones, through banking and personal data. Knowing that their data will be protected is key to the user.
When we talk about security in Android it does not necessarily refer to the new version Android 5.0 Lollipop. Since the introduction in Android SELinux, one year ago, they have managed to prevent and correct a large number of vulnerabilities in mobile applications installed. The reasoning is due to lies the role of management when accessing different sections of the operating system.
Overall improvements have been gradually added to the SELinux in the new version of Android 5.0 Lollipop although the user has not noticed them,you can say without hesitation that Lollipop is a safer version operating system than that of Google. This will undoubtedly be one of the reasons, along with all other novelties, why you should plump for the latest version of Android.

There is no reason to wait to start developing applications for Lollipop. Android developers can now begin to investigate this new operating system and create mobile applications for Lollipop. This is possible because Google has released the SDK of Lollipop and are available for download. In this way we can obtain specific images of what applications will look like on devices with Android 5.0 Lollipop installed, such as Nexus 6 and Nexus 9.
It is hoped that Lollipop, with the level of app development, the most notable improvements have to do with the level of autonomy and battery life -as stated before-, there have also been changes in the delivery of notifications to mobile applications. So application developers will have to  improve their applications to adapt to new to the new functionalities and ease the transition for Lollipop users who choose to upgrade your operating system.


Thursday, October 9, 2014

Basic Concept of Animation in Android


Animation in Android -
--------------------------------

Animation in android is possible from many ways.

making animation called tweened animation.
Tween Animation takes some parameters such as start value , end value, size , time duration , rotation angle e.t.c and perform the required animation on that object.
In order to perform animation in android , call a static function loadAnimation() of the class AnimationUtils.
Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.myanimation);
second parameter, it is the name of the our animation xml file.

Sr.No
Method & Description
1
start()
This method starts the animation.
2
setDuration(long duration)
This method sets the duration of an animation.
3
getDuration()
This method gets the duration which is set by above method
4
end()
This method ends the animation.
5
cancel()
This method cancels the animation.

ImageView image1 = (ImageView)findViewById(R.id.imageView1); image.startAnimation(animation);

To perform a zoom in animation , create an XML file under anim folder under res directory, and put zoom xml code.
<set xmlns:android="http://schemas.android.com/apk/res/android"> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:fromXScale="0.5" android:toXScale="3.0" android:fromYScale="0.5" android:toYScale="3.0" android:duration="5000" android:pivotX="50%" android:pivotY="50%" > </scale> </set>


The parameter fromXScale and fromYScale defines the start point and the parameters toXScale andtoYScale defines the end point.
The duration defines the time of animation and the pivotX, pivotYdefines the center from where the animation would start.

Create new project and copy MainActivity.java file code into your MainActivity.java

MainActivity.java
------------------------

package com.example.animation;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
     // Inflate the menu; this adds items to the action bar if it is present.
     getMenuInflater().inflate(R.menu.main, menu);
     return true;
  }

  public boolean onOptionsItemSelected(MenuItem item) 
  { 
  super.onOptionsItemSelected(item); 
     switch(item.getItemId()) 
     { 
     case R.id.zoomInOut:
        ImageView image = (ImageView)findViewById(R.id.imageView1);
        Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.myanimation);
        image.startAnimation(animation);
           return true;
     case R.id.rotate360:
       ImageView image1 = (ImageView)findViewById(R.id.imageView1);
       Animation animation1 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.clockwise);
       image1.startAnimation(animation1);
           return true;
     case R.id.fadeInOut:
       ImageView image2 = (ImageView)findViewById(R.id.imageView1);
       Animation animation2 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fade);
       image2.startAnimation(animation2);
          return true;


     }
     return false;
  }

}

activity_main.xml
-------------------------

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world"  />
    
    <ImageView
      android:id="@+id/imageView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="179dp"
      android:layout_below="@+id/textView1"
      android:src="@drawable/ic_launcher"/>
</RelativeLayout>



AndroidMenifest.xml
------------------------------


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.animation"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

    <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      <activity
         android:name="com.example.animation.MainActivity"
         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>

Create anim folder inside res folder - res->anim

Create three file inside anim called clockwise.xml, fade.xml, and myanimation.xml


clockwise.xml
-------------

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

   <rotate xmlns:android="http://schemas.android.com/apk/res/android"
      android:fromDegrees="0"
      android:toDegrees="360"
      android:pivotX="50%"
      android:pivotY="50%"
      android:duration="5000" >

   </rotate>

   <rotate xmlns:android="http://schemas.android.com/apk/res/android"
      android:startOffset="5000"
      android:fromDegrees="360"
      android:toDegrees="0"
      android:pivotX="50%"
      android:pivotY="50%"
      android:duration="5000" >

   </rotate>

</set>


fade.xml
-----------

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
   android:interpolator="@android:anim/accelerate_interpolator" >

   <alpha
      android:fromAlpha="0"
      android:toAlpha="1" 
      android:duration="2000" >

   </alpha>


   <alpha
      android:startOffset="2000"
      android:fromAlpha="1"
      android:toAlpha="0" 
      android:duration="2000" >

   </alpha>
   
</set>

myanimaion.xml
--------------------

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

   <scale xmlns:android="http://schemas.android.com/apk/res/android"
      android:fromXScale="0.5"
      android:toXScale="3.0"
      android:fromYScale="0.5"
      android:toYScale="3.0"
      android:duration="5000"
      android:pivotX="50%"
      android:pivotY="50%" >

   </scale>


   <scale xmlns:android="http://schemas.android.com/apk/res/android"
      android:startOffset="5000"
      android:fromXScale="3.0"
      android:toXScale="0.5"
      android:fromYScale="3.0"
      android:toYScale="0.5"
      android:duration="5000"
      android:pivotX="50%"
      android:pivotY="50%" >

   </scale>

</set>


inside menu paste below code -
menu.xml -
--------------
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/rotate360"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/rotate_String"/>
    <item
        android:id="@+id/zoomInOut"
        android:orderInCategory="100"
        android:title="@string/zoom_In_Out"/>
    <item
        android:id="@+id/fadeInOut"
        android:orderInCategory="100"
        android:title="@string/fade_String"/>

</menu>

string.xml
------------

<?xml version="1.0" encoding="utf-8"?>
<resources>

   <string name="app_name">Animation</string>
   <string name="action_settings">Settings</string>
   <string name="hello_world">Hello world!</string>
   <string name="zoom_In_Out">Zoom In/Out</string>
   <string name="rotate_String">Clockwise/Anti Clockwise</string>
   <string name="fade_String">Fade In/Out</string>

</resources>





Basic of Gesture

how to use gesture in Android
---------------------------------

Some examples of common multi-touch gestures and actions you might use include:
ØPinch to zoom in, spread to zoom out.ØBasic dragging in order to move, adjust, scroll, and position.ØFlick to jump to the next screen or scroll extra fast.ØTap and hold to open an item or context menu.ØMulti-finger drag often scrolls faster!
ØHandling multi touch gestureØDetecting common gestureØManaging touch eventØAnimating a scroll gestureØTracking movementØDragging & scalling
ØAndroid provides special types of touch screen events such as pinch , double tap, scrolls , long presses and flinch. These are all known as gestures.
ØAndroid provides GestureDetector class to receive motion events and tell us that these events correspond to gestures or not.
ØTo use it , you need to create an object of GestureDetector and then extend another class with GestureDetector.SimpleOnGestureListener to act as a listener and override some methods.

Different methods in gesture :-
-----------------------------------------------
GestureDetector myG;
myG = new GestureDetector(this,new Gesture());

   class Gesture extends GestureDetector.SimpleOnGestureListener{
   public boolean onSingleTapUp(MotionEvent ev) {
   }
   public void onLongPress(MotionEvent ev) {
   } 
   public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
   float distanceY) {
   }
   public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
   float velocityY) {
   }
}
}



Gesture.java

---------------------

package com.example.gesture;

import android.app.Activity;
import android.graphics.Matrix;
import android.os.Bundle;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.widget.ImageView;

public class MainActivity extends Activity {

  private ImageView img;
  private Matrix matrix = new Matrix();
  private float scale = 1f;
  private ScaleGestureDetector SGD;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     img = (ImageView)findViewById(R.id.imageView1);
     SGD = new ScaleGestureDetector(this,new ScaleListener());
  }

  @Override
  public boolean onTouchEvent(MotionEvent ev) {
     SGD.onTouchEvent(ev);
     return true;
  }

  private class ScaleListener extends ScaleGestureDetector.
  SimpleOnScaleGestureListener {
  @Override
  public boolean onScale(ScaleGestureDetector detector) {
     scale *= detector.getScaleFactor();
     scale = Math.max(0.1f, Math.min(scale, 5.0f));
     matrix.setScale(scale, scale);
     img.setImageMatrix(matrix);
     return true;
  }
}

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
     // Inflate the menu; this adds items to the action bar if it is present.
     getMenuInflater().inflate(R.menu.main, menu);
     return true;
  }

}

activity_main.xml
------------------------


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

 

    <TextView
        android:id="@+id/textview1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="48dp"
        android:text="@string/hello_world" />

     <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/textview1"
        android:scaleType="matrix"
        android:src="@android:drawable/sym_def_app_icon" />
</RelativeLayout>


AndroidMenifest.xml
-----------------------------


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.gesture"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      <activity
         android:name="com.example.gesture.MainActivity"
         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>



string.xml
--------------

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Gesture</string>
    <string name="hello_world">Pinch to zoom in or out!</string>
    <string name="menu_settings">Settings</string>

</resources>