Sunday, December 3, 2017

Emulator is already running

Emulator is already running:

Android Studio : emulator is already running error shown while run the project using AVD.
In that error popup shows the error and solution, The error is "If that is not the case,delete the files at ....path...... "

Go to the path in first image......







Solution:

You don't have to completely delete the emulator when this happens. The files to delete should have a ".lock" extension:

Broadcast Receiver In Android

Broadcast Receivers simply respond to broadcast messages from other applications or from the system itself. 
These messages are sometime called events or intents. For example, applications can also initiate broadcasts 
to let other applications know that some data has been downloaded to the device and is available for
them to use, so this is broadcast receiver who will intercept this communication and will initiate appropriate action.

Two important steps to make BroadcastReceiver works for the system broadcasted intents.


  • Creating the Broadcast Receiver.
  • Registering Broadcast Receiver



one additional steps in case you are going to implement your custom intents then you will have to create and broadcast those intents.

Creating the Broadcast Receiver:

A broadcast receiver is implemented as a subclass of BroadcastReceiver class and overriding the onReceive() method where each message is received as a Intent object parameter.

public class MyReceiver extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent intent) {
      Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
   }
}

Registering Broadcast Receiver:

An application listens for specific broadcast intents by registering a broadcast receiver in AndroidManifest.xml file. 
Consider we are going to register MyReceiver for system generated event ACTION_BOOT_COMPLETED which 
is fired by the system once the Android system has completed the boot process.


Example:

<application
   android:icon="@drawable/ic_launcher"
   android:label="@string/app_name"
   android:theme="@style/AppTheme" >
   <receiver android:name="MyReceiver">
   
      <intent-filter>
         <action android:name="android.intent.action.BOOT_COMPLETED">
         </action>
      </intent-filter>
   
   </receiver>
</application>



android.intent.action.BATTERY_CHANGED
Sticky broadcast containing the charging state, level, and other information about the battery.

android.intent.action.BATTERY_LOW
Indicates low battery condition on the device.

android.intent.action.BATTERY_OKAY
Indicates the battery is now okay after being low.

android.intent.action.BOOT_COMPLETED
This is broadcast once, after the system has finished booting.

android.intent.action.BUG_REPORT
Show activity for reporting a bug.

android.intent.action.CALL
Perform a call to someone specified by the data.

android.intent.action.CALL_BUTTON
The user pressed the "call" button to go to the dialer or other appropriate UI for placing a call.

android.intent.action.DATE_CHANGED
The date has changed.

android.intent.action.REBOOT
Have the device reboot.


Example:

package com.android.androidvedha.myapplication;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

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


   // broadcast a custom intent.
      
   public void broadcastIntent(View view){
      Intent intent = new Intent();
      intent.setAction("com.android.CUSTOM_INTENT"); 
      sendBroadcast(intent);
   }
}


Following is the content of MyReceiver.java:

package com.android.androidvedha.myapplication;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;


public class MyReceiver extends BroadcastReceiver{
   @Override
   public void onReceive(Context context, Intent intent) {
      Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
   }
}



Following will the modified content of AndroidManifest.xml file. Here we have added <receiver.../> tag to include our service:

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

   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:supportsRtl="true"
      android:theme="@style/AppTheme">

      <activity android:name=".MainActivity">
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
   
      <receiver android:name="MyReceiver">
         <intent-filter>
            <action android:name="com.android.CUSTOM_INTENT">
            </action>
         </intent-filter>

      </receiver>
   </application>

</manifest>

Ripple

Ripple:

Ripple Effect in android, this effort is look awesome when the user touch the button or layout

First download RippleView.java file from here

After download this file and put into package folder,so we don't need to use library for rippleview in android.




  1. Include the file in package folder in your project.
  2. Include the RippleView widget in your layout.
             <com.android.androidVedha.RippleView
                     android:id="@+id/btn"
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"
                     ripple:alphaFactor="0.7"
                    ripple:rippleColor="#58FAAC" />
  1. In your onCreate method refer to the View and add 'OnClickListener' for the same.
               mButton = (RippleView) findViewById(R.id.btn);
               mButton.setOnClickListener(new View.OnClickListener() {
          @Override
         public void onClick(View v) {
         //your code
         }
             });

Saturday, December 2, 2017

Set the Date Picker with the current date for the first click and selected date for second click

DatePicker with Current Date for First click and Selected date for Second Click:

Hi Guys! In this Tutorial we are going to see about DatePicker  first open with current date and then second time click show  selected date .

Example:

public class MainActivity extends AppCompatActivity {

private int year;
private int month;
private int day;
private EditText signup_bday;

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

signup_bday=(EditText)findViewById(R.id.edittext_signup_birthday);

signup_bday.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
showDatePickerDialog(signup_bday.getText().toString());
}
});
}

private void showDatePickerDialog(String date) {
if (date.contentEquals("")) {
Calendar mcurrentDate=Calendar.getInstance();
year=mcurrentDate.get(Calendar.YEAR);
month=mcurrentDate.get(Calendar.MONTH);
day=mcurrentDate.get(Calendar.DAY_OF_MONTH);
}else{
String[] split = date.split("-");
day = Integer.valueOf(split[0]);
int montx = Integer.valueOf(split[1]);
month = montx -1;
year = Integer.valueOf(split[2]);
}

DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {

@Override
public void onDateSet(DatePicker view, int curyear, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
signup_bday.setText(new StringBuilder().append(dayOfMonth).append("-").append(monthOfYear + 1).append("-").append(curyear));
}
};

DatePickerDialog datePickerDialog = new DatePickerDialog(this,
dateSetListener, year, month, day);
datePickerDialog.show();
}
}

Friday, December 1, 2017

CircularImageView

CircularImageView:

In android, Normally we have use Imageview to show the image in the activity,but now CircularImageView is used to show the image as circular, Most probably we have to use circularImageView in profile activity.  It show very differently and programmer easily implement using following ways.

Step 1:

Download the CircularImageView.java file from here
 Download CircularImageView.java

Step 2:
Place the Java File in your Package then Goto xml file


<com.androidvedha.external.CircularImageView  
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/profile_image"
    android:layout_width="96dp"
    android:layout_height="96dp"
    android:src="@drawable/profile"
    app:civ_border_width="2dp"
    app:civ_border_color="#FF000000"/>

Step 3:

In onCreate() method do FindViewByID and then we can make click for the circularImageView using setOnClickListener method.

TriangleLabelView

TriangleLabelView:

               In android, Normally we have use textview to show the text in the activity,but now TriangleLabelView is used to show the label in the any one of the corner in the layout, That is top left corner, top right corner likewise bottom left corner and bottom right corner. It show very differently and programmer easily implement using following ways.

Step 1:

Download the TriangleLabelView.java file from here
 Download TriangleLabelView.java

Step 2:
Place the Java File in your Package then Goto xml file


<com.androidvedha.external.TriangleLabelView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    app:backgroundColor="@color/yellow_900"
    app:corner="leftTop"
    app:labelBottomPadding="5dp"
    app:labelCenterPadding="0dp"
    app:labelTopPadding="10dp"
    app:primaryText="New"
    app:primaryTextColor="@color/yellow_500"
    app:primaryTextSize="16sp"
    app:secondaryText="01"
    app:secondaryTextColor="@color/yellow_100"
    app:secondaryTextSize="11sp" />


Step 3:

In onCreate() method do FindViewByID and then we can make click for the triangleLabelView using setOnClickListener method.

Persistent -Non Persistent In Android

Persistent and Non-Persistent in android:

Issue :
         I had met an problem,When the android mobile sleep and wake up time once again activity restart (ie) call onCreate() method,In my onCreate() method i had called the api to get the data and put my mobile as well don't disturb it automatically go to the sleep state the i had click the power button to wake up device in that time once again its called onCreate() method .


Solution: 

Play with the manifest to achieve this and also understand what exactly activity is, in Android eco system,In Android activity is a task which has a pre defined work. I found that, we can configure activity in two ways,
  • Persistent
  • Non persistent
if you mention for the activity in the manifest as

android:persistent="true"

and run the below use case

Start the APP
Press back or home button
you select the activity in the back stack again to bring it to front
Activity enters start -> pause -> stop - > resume , it does not get into onDestroy method.

if do not mention

android:persistent="true"
for the same use case

Activity enters start -> pause -> stop -> destroy, and if you select the activity from the back stack.

Activity enters resume->create->start

If you want to run a service/task on activity start which keeps running when the app is in back stack, then you have to start that in the onCreate method, and kill them onDestroy by specifying your activity as persistent in manifest.

I hope my above solution might help others who arrive here for the same problem

Saturday, November 25, 2017

Store ArrayList in SharedPreferences

Store ArrayList In SharedPreferences:


In Shared Preference, is it store arraylist ?, Usually in shared preference we have to store string but in this post we are going to see how to store arraylist in sharedpreference.


Method:1


SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
Editor editor = sharedPrefs.edit();
Gson gson = new Gson();

String json = gson.toJson(arrayList);

editor.putString(TAG, json);
editor.commit();

Read;

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
Gson gson = new Gson();
String json = sharedPrefs.getString(TAG, null);
Type type = new TypeToken<ArrayList<ArrayObject>>() {}.getType();
ArrayList<ArrayObject> arrayList = gson.fromJson(json, type);



Method: 2

SharedPreferences prefs=this.getSharedPreferences("yourPrefsKey",Context.MODE_PRIVATE);
Editor edit=prefs.edit();

Set<String> set = new HashSet<String>();
set.addAll(your Arraylist Name);
edit.putStringSet("yourKey", set);
edit.commit();

Retrieve Arraylist from Shared Preferences

Set<String> set = prefs.getStringSet("yourKey", null);
List<String> sample=new ArrayList<String>(set);

Thursday, November 9, 2017

KEYBOARD HIDE WHILE OPEN NAVIGATION DRAWER

KEYBOARD HIDE WHILE OPEN NAVIGATION DRAWER:

Hi Android guys! Most of the members ask softkeyboard and navigation drawer both were show and how to fix it .........

So Today we are going to how to hide keyboard while open navigation drawer.


Solution 

drawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.app_name, R.string.app_name) {

            @Override
            public void onDrawerClosed(View drawerView) {
                // Code here will be triggered once the drawer closes as we dont want anything to happen so we leave this blank
                super.onDrawerClosed(drawerView);
                InputMethodManager inputMethodManager = (InputMethodManager)
                        getSystemService(Context.INPUT_METHOD_SERVICE);
                inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
            }

            @Override
            public void onDrawerOpened(View drawerView) {
                // Code here will be triggered once the drawer open as we dont want anything to happen so we leave this blank
                super.onDrawerOpened(drawerView);
                InputMethodManager inputMethodManager = (InputMethodManager)
                        getSystemService(Context.INPUT_METHOD_SERVICE);
                inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
            }
        };


Happy coding .......

Tuesday, November 7, 2017

Fresco

Fresco:

Hi Guys! now we are going to see about Fresco !!!!!!


  • Fresco is a powerful system for displaying images in android applications,It takes care of image loading and display,
  • Fresco supports android2.3 and later.
  • For Images Fresco can load it from network, local storage or local resources. To save data and CPU,
  • it has three levels of cache; one in internal storage and two in memory.


Features
  • Memory
  • Drawing
  • Animations
  • Loading
  • Streaming

1.Memory

A decompressed image - an Android Bitmap - takes up a lot of memory. This leads to more frequent runs of the Java garbage

collector. This slows apps down. The problem is especially bad without the improvements to the garbage collector made in
Android 5.0.On Android 4.x and lower, Fresco puts images in a special region of Android memory. It also makes sure that
images are automatically released from memory when they’re no longer shown on screen. This lets your application run faster
- and suffer fewer crashes.

2.Drawing


Fresco uses Drawees for display. These offer a number of useful features:

Scale the image to a custom focus point, instead of the center
Show the image with rounded corners, or a circle
Let users tap the placeholder to retry load of the image, if the network load failed
Show custom backgrounds, overlays, or progress bars on the image
Show a custom overlay when the user presses the image.

3.Animations

Animated GIFs and WebPs can be challenging for apps. Each frame is a large Bitmap, and each animation is a series of frames.
Fresco takes care of loading and disposing of frames and managing their memory.

4.Loading

Fresco’s image pipeline lets you customize the load in a variety of ways:

Specify several different uris for an image, and choose the one already in cache for display
Show a low-resolution image first and swap to a higher-res one when it arrives
Send events back into your app when the image arrives
If the image has an EXIF thumbnail, show it first until the full image loads (local images only)
Resize or rotate the image
Modify the downloaded image in-place
Decode WebP images, even on older versions of Android that don’t fully support them.

5.Streaming

Progressive JPEG images have been on the Web for years. These let a low-resolution scan of the image download first,
 then gradually improve the quality as more of the image downloads. This is a lifesaver for users on slow networks.
Android’s own imaging libraries don’t support streaming. Fresco does. Just specify a URI, and your app will automatically update its display as more data arrives.

Getting started with Fresco

Step 1

In your build.gradle file.
dependencies {
  // your app's other dependencies
  compile 'com.facebook.fresco:fresco:1.5.0'
}

optional modules may also be added:

// For animated GIF support
  compile 'com.facebook.fresco:animated-gif:1.5.0'

  // For WebP support, including animated WebP
  compile 'com.facebook.fresco:animated-webp:1.5.0'
  compile 'com.facebook.fresco:webpsupport:1.5.0'

  // For WebP support, without animations
  compile 'com.facebook.fresco:webpsupport:1.5.0'

  // Provide the Android support library (you might already have this or a similar dependency)
  compile 'com.android.support:support-core-utils:24.2.1'

Step 2

Initialize Fresco

@Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }

Step 3

In the AndroidManifest.xml

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

Step 4

add a custom namespace to the top-level element.

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    >

Step 5

Then add the SimpleDraweeView to the layout

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/my_image_view"
    android:layout_width="130dp"
    android:layout_height="130dp"
    fresco:placeholderImage="@drawable/my_drawable"
    />

Step 6

Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/master/docs/static/logo.png");
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI(uri);

(-)
- Huge size of library
- No Callback with View, Bitmap parameters
- SimpleDraweeView doesn't support wrap_content
- Huge size of cache
(+)
- Pretty fast image loader (for small && medium images)
- A lot of functionality(streaming, drawing tools, memory management, etc)
- Possibility to setup directly in xml (for example round corners)
- GIF support
- WebP support


Saturday, November 4, 2017

Android Phone Not Detect While Run in Android studio

Android Phone Not Detect While Run in Android studio

Hi Android Guys ! Today  we are going to see about mobile devices not detected in android studio While run the project , then see how to solve .

Most of the members ask how to resolve the problem .

Step 1
Find the android device model , Setting > about device > Model number (Android  Device)

Step 2
In google Search > type device name followed by Usb driver then download the UsbDriver

Step 3
Right Click, My computer > properties >System Window open then see the left panel

In Left Panel > Device Manager >see Other Devices >Unknown Devices







Step 4

Right Click the unknown devices > properties > Unknown device properties open.Then the Open dialog see the Update Driver button, Click the button 

Step 5

Then Click "Let me pick from a list of device driver on my computer"





Then Update driver software, Android studio will sure detect mobile phone will run the project..

Friday, November 3, 2017

Bundle

Bundle :

Hi Android Guys!

Today we are going to see about Bundle concept in android, Here how to create bundle and how to use in another activity.

Step 1

In First Activity,

 // Creating Bundle object

    Bundle b = new Bundle();                     

  // Storing data into bundle

     b.putString("fullname", fullname);
     b.putLong("phoneNumber", phone);
     b.putDouble("age", ageDouble);
     b.putBoolean("married", isMarried);


    // Creating Intent object

       Intent in = new Intent(AndroidBundleExample.this, AndroidSecondActivity.class); 

    // Storing bundle object into intent

        in.putExtras(b);
        startActivity(in);

Step 2

     //Second getting activity

     // get the Intent that started this Activity

        Intent in = getIntent();       
        Bundle b = in.getExtras(); 

        // getting data from bundle

        String nameString = b.getString("fullname");
        long phoneNumberLong = b.getLong("phoneNumber");
        String phoneNumberString = Long.toString(phoneNumberLong);
        double ageDouble = b.getDouble("age");
        String ageString = Double.toString(ageDouble);

Thursday, November 2, 2017

Eclipse Opening Error -- ERROR FIXING - 3

Error when loading SDK - Eclipse:

Hi android Guys!

When we tried to open the eclipse it shown the following error .



Solution


It might be a permission issue. Make sure you have writing permissions for that folder.
Try starting Eclipse or the SDK Manager as Administrator.


Right click the eclipse icon, Run as Administrator then the above issue is not come..


Enjoy Coding .....

Installation failed with message INSTALL_CANCELED_BY_USER -- ERROR FIXING - 2

Installation failed with message INSTALL_CANCELED_BY_USER:

Hi Android Guys !

Some times we tried to run the android studio project but we get the following error.





Solution

Installation failed with message INSTALL_CANCELED_BY_USER. It is possible that this issue
is resolved by uninstalling an existing version of the apk if it is present, and then re-installing

Path: Android Studio Preference / Build, Execution, Deployment / Instant Run

Go to Android Studio Preference (for Mac) or Settings (for windows)

Choose Build, Execution, Deployment tab

Choose Instant Run

Uncheck Enable Instant Run to hot swap code/resources changes on deply (default enabled)

Wednesday, November 1, 2017

Retrofit

Retrofit:
Today we are going to look at  awesome library Retrofit to make the http calls. Retrofit is denitely the better alternative to volley in terms of ease of use, performance, extensibility and other things. It is a type-­safe REST client for Android built by Square. Using this tool android developer can make all network stuff much more easier.



Step 1


Open build.gradle and add Retrofit, Gson dependencies.

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'

    // retrofit, gson
    compile 'com.google.code.gson:gson:2.6.2'
    compile 'com.squareup.retrofit2:retrofit:2.0.2'
    compile 'com.squareup.retrofit2:converter-gson:2.0.2'
}

Step 2

Add INTERNET permissions in AndroidManifest.xml file

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

Step 3

//Retrofit
private parsing p;
private Retrofit retrofit;
private int mStatusCode;
private APICallInterface service;
final OkHttpClient client = new OkHttpClient().newBuilder()
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1, TimeUnit.MINUTES)
.build();



Step 4

In onCreate():

p = new parsing();
/** Creating REST API Calls **/
retrofit = new Retrofit.Builder()
.baseUrl(p.url_server)
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
service = retrofit.create(APICallInterface.class);




private void callRetrofit() {

        String strUrl = baseUrl + "posts";

        Call<ResponseBody> caller = service.callAPI(strUrl);
        caller.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> caller, retrofit2.Response<ResponseBody> response) {

                try {
                    String reponse = response.body().string();
                    mStatusCode = response.code();
                    Log.e("Response",reponse);

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {

                if (t instanceof SocketTimeoutException) {
                    Log.v("SocketTimeOut", "SocketTimeOut");
                    Toast.makeText(MainActivity.this, "TimeOut"
                            , Toast.LENGTH_SHORT).show();
                }
            }
        });
    }


Step 5

create Interface in app folder

public interface APICallInterface {

   @GET
   @Headers("Connection:close")
   Call<ResponseBody> callAPI(@Url String url);

   @GET
   @Headers("Connection:close")
   Call<ResponseBody> callAPI(@Url String url, @QueryMap Map<String, String> parameters);

   @POST
   @Headers("Connection:close")
   Call<ResponseBody> postToAPI(@Url String url, @Body RequestBody parameter);

   @PUT
   @Headers("Connection:close")
   Call<ResponseBody> putToAPI(@Url String url, @Body RequestBody parameter);


}


Download

Sample Project 

Happy Coding....☺☺☺