Monday, November 30, 2015

Half Circular List View


There were a requirement to create a half circular list view in one of my application, There were many solutions over internet but no one satisfy the requirement, some are able to populate only image data and some are text data but I need to populate both in my list view. After goggling lots I got a solution that was really optimize and working fine and fulfilling the requirement. Here is a image that I want to develop.



Here I am sharing code that was working on eclipse, you can download here.

Reference:


Friday, November 27, 2015

How to authenticate the mobile number 

In the normal authentication flow, we use SMS to send OTP and Push Notification to get same OTP code to validate. But I think you want to send SMS without any SMS gateway. So you can try to write a java program that will send a SMS by using modem that have facility to send SMS like internet modem.

I found an API that provide Online validation of Phone number, Try this one: http://www.phone-validator.net/phone-number-online-validation-api.html
But you need your work Email id, not possible with free email address.
Reference:
Googling

Monday, November 16, 2015

Get Current Location using Android Studio With Android M Support


You can get Current location in Android M using Below code...
You can Download full source code here.

GPSTracker.java



package com.example.shivang.currentlocation;

import android.Manifest;
import android.annotation.TargetApi;
import android.app.AlertDialog;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.support.annotation.Nullable;
import android.util.Log;

/** * Created by shivang on 09-11-2015. */

public class GPSTracker extends Service implements LocationListener{

    private final Context mContext;

    // flag for GPS status  
  boolean isGPSEnabled = false;

    // flag for network status  
  boolean isNetworkEnabled = false;

    boolean canGetLocation = false;

      Location location; // location     
 double latitude; // latitude   
 double longitude; // longitude

    // The minimum distance to change Updates in meters  
  private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
    // The minimum time between updates in milliseconds  
  private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute
    // Declaring a Location Manager   
 protected LocationManager locationManager;

    public GPSTracker(Context context) {
        this.mContext = context;
        getLocation();
    }


    @TargetApi(Build.VERSION_CODES.M)
    public Location getLocation() {
        try {
            locationManager = (LocationManager) mContext.getSystemService(mContext.LOCATION_SERVICE);

            // getting GPS status     
       isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

            // getting network status   
         isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

            if (!isGPSEnabled && !isNetworkEnabled) {
                // no network provider is enabled     
       } else {
                this.canGetLocation = true;
                // First get location from Network Provider   
             if (isNetworkEnabled) {
//                    if(isPermission())      
              if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                        if (mContext.checkSelfPermission(Manifest.permission.
ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || mContext.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                            //DO OP WITH LOCATION SERVICE   
                         locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

                        }
                    }else {
                        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);


                    }
                    Log.d("Network", "Network");
                    if (locationManager != null) {
                        location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
                // if GPS Enabled get lat/long using GPS Services                if (isGPSEnabled) {
                    if (location == null) {
                        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                        Log.d("GPS Enabled", "GPS Enabled");
                        if (locationManager != null) {
                            location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                            if (location != null) {
                                latitude = location.getLatitude();
                                longitude = location.getLongitude();
                            }
                        }
                    }
                }
            }

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

        return location;
    }
    /**     * Function to get latitude     * */    
public double getLatitude(){
        if(location != null){
            latitude = location.getLatitude();
        }

        // return latitude        return latitude;
    }

    /**     * Function to get longitude     * */    
public double getLongitude(){
        if(location != null){
            longitude = location.getLongitude();
        }

        // return longitude       
 return longitude;
    }

    /**     * Function to check if best network provider     * @return boolean     * */    public boolean canGetLocation() {
        return this.canGetLocation;
    }

    /**     * Function to show settings alert dialog     * */ 
   public void showSettingsAlert(){
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);

        // Setting Dialog Title       
 alertDialog.setTitle("GPS is settings");

        // Setting Dialog Message       
 alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");

        // Setting Icon to Dialog      
  //alertDialog.setIcon(R.drawable.delete);
        // On pressing Settings button       
 alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int which) {
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                mContext.startActivity(intent);
            }
        });

        // on pressing cancel button      
  alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        // Showing Alert Message      
  alertDialog.show();
    }

    @Override  
  public void onLocationChanged(Location location) {
    }

    @Override   
 public void onProviderDisabled(String provider) {
    }

    @Override   
 public void onProviderEnabled(String provider) {
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }


    @Nullable   
 @Override   
 public IBinder onBind(Intent intent) {
        return null;
    }

    public Location getLocationUsingCriteria()  {

        locationManager = (LocationManager) mContext.getSystemService(mContext.LOCATION_SERVICE);
        android.location.Criteria criteria = new android.location.Criteria();
        String best = locationManager.getBestProvider(criteria, true);
        System.out.println("Best..................."+ best);

        //since you are using true as the second parameter, you will only get the best of providers which are enabled.      
  canGetLocation = true;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (mContext.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || mContext.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                //DO OP WITH LOCATION SERVICE             
   location = locationManager.getLastKnownLocation(best);
            }
        }else {
            location = locationManager.getLastKnownLocation(best);
        }

        return location;
    }
}


 

MainActivity.java


package com.example.shivang.currentlocation;

import android.location.Location;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        GPSTracker gpsTracker = new GPSTracker(this);

        if(gpsTracker.canGetLocation()){
//            Location location = gpsTracker.getLocation(); 
           Location location = gpsTracker.getLocationUsingCriteria();
            Toast.makeText(this, gpsTracker.getLatitude() +  " : " + gpsTracker.getLongitude(), Toast.LENGTH_LONG).show();

        }else{
            Toast.makeText(this, "Unable to get location!", Toast.LENGTH_LONG).show();
    gpsTracker.showSettingsAlert();
        }


//        location.getLatitude();//     
   location.getLongitude();



    }

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

Reference:
Googling