Sunday, 12 November 2017

Public Api list

Public api for Mobile Application

https://github.com/sohel274/public-apis

Friday, 29 September 2017

Problem with extra space at the bottom of android Webview



String s="<head><meta name='viewport' content='target-densityDpi=device-dpi'/></head>";

webview.loadDataWithBaseURL(null,s+htmlContent,"text/html" , "utf-8",null);

Convert arraylist to json sting usnig Gson and exclude column

Sample class:-

public class MediaItem extends BaseModel {


    @PrimaryKey(autoincrement = true)
    long itemId;

    @Expose    @Column    String tracker_category;

    @Expose    @Column    String tracker_subcategory;

    @Expose    @Column    String tracker_problem_fixed;

    @Expose    @Column    String tracker_remarks;

    @Expose    @Column    String tracker_client_initial;


    public MediaItem() {
    }

    @Override    public String toString() {
        return "UploadToAccount{" +
                "itemId=" + itemId +
                ",tracker_category='" + tracker_category + '\'' +
                ",tracker_subcategory='" + tracker_subcategory + '\'' +
                ",tracker_problem_fixed='" + tracker_problem_fixed + '\'' +
                ",tracker_remarks='" + tracker_remarks + '\'' +
                ",tracker_client_initial='" + tracker_client_initial + '\'' +
                '}';
    }

    public long getItemId() {
        return itemId;
    }

    public void setItemId(long itemId) {
        this.itemId = itemId;
    }

    public String getTracker_category() {
        return tracker_category;
    }

    public void setTracker_category(String tracker_category) {
        this.tracker_category = tracker_category;
    }

    public String getTracker_subcategory() {
        return tracker_subcategory;
    }

    public void setTracker_subcategory(String tracker_subcategory) {
        this.tracker_subcategory = tracker_subcategory;
    }

    public String getTracker_problem_fixed() {
        return tracker_problem_fixed;
    }

    public void setTracker_problem_fixed(String tracker_problem_fixed) {
        this.tracker_problem_fixed = tracker_problem_fixed;
    }

    public String getTracker_remarks() {
        return tracker_remarks;
    }

    public void setTracker_remarks(String tracker_remarks) {
        this.tracker_remarks = tracker_remarks;
    }

    public String getTracker_client_initial() {
        return tracker_client_initial;
    }

    public void setTracker_client_initial(String tracker_client_initial) {
        this.tracker_client_initial = tracker_client_initial;
    }
}


// convert

ArrayList<MediaItem> arrayList = new Arraylist();// add some value
JsonArray myCustomArray = gson.toJsonTree(arrayList).getAsJsonArray(); 


// if require any field exclude
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
JsonArray myCustomArray = gson.toJsonTree(arrayList).getAsJsonArray(); 


Monday, 31 July 2017

Android DBFlow impelmentation



1) Add dependencies

def dbflow_version = "3.1.1"

dependencies {

apt "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}"compile "com.github.Raizlabs.DBFlow:dbflow-core:${dbflow_version}"compile "com.github.Raizlabs.DBFlow:dbflow:${dbflow_version}"

}

2) add to project gradel file

dependencies
{
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}

3) in applicatin class

public class AppController extends Application {

    @Override    public void onCreate() {
        super.onCreate();

        // initialize dbflow database        FlowManager.init(new FlowConfig.Builder(this).build());

    }

}

4) example database class (MyDatabase.java)

@Database(name = MyDatabase.NAME, version = MyDatabase.VERSION)
public class MyDatabase {
    public static final String NAME = "MyDataBase";
    public static final int VERSION = 1;
}

5) example table class (MediaItem.java)


@Table(database = MyDatabase.class)
public class MediaItem extends BaseModel {

    @PrimaryKey(autoincrement = true)
    long id;
    @Column
    String name;
    @Column
    String number;
    @Column
    String isActive;
    @Column
    String percentage;

    public MediaItem() {
    }

    @Override
    public String toString() {
        return "Numbers{" +
                "id=" + id +
                ",name='" + name + '\'' +
                ",number='" + number + '\'' +
                ",isActive='" + isActive + '\'' +
                ",percentage='" + percentage + '\'' +
                '}';
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getIsActive() {
        return isActive;
    }

    public void setIsActive(String isActive) {
        this.isActive = isActive;
    }

    public String getPercentage() {
        return percentage;
    }

    public void setPercentage(String percentage) {
        this.percentage = percentage;
    }
}



Friday, 7 July 2017

Translate Animation in between activity or same activity



Translate Animation

 ## For Different Activity 

 => For First Activity (send)

TextView textview1 = findviewby......

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
ActivityTransitionLauncher.with(FirstActivity.this).from(textview1).launch(intent);

=> FOr second Activity (receive) 

 TextView textview1 = findviewby......

 ExitActivityTransition exitTransition = ActivityTransition.with(getIntent()).to(textview1).start(savedInstanceState);

 if you want same reverse
 exitTransition.exit(GalleryActivity.this);

 ## For Same Activity 

 Textview view1start = findvieby.....
 Textview view2end = findvieby.....

 ActivityTransitionLauncherSameActivity.with(GalleryActivity.this).from(view1start).launch(intentStart);
 ExitActivityTransition exitTransitionChatHead_small = ActivityTransitionSameActivity.with(intentStart).to(view2end).start(null);



Download all classes from below link:-

https://drive.google.com/open?id=0B7De_mE7QNdOczQ4ZjFyQWpBWWs

Thursday, 6 July 2017

Monday, 19 June 2017

volley simple request with Authenticate Header (Authorisation)

public void makeStringReqToken(String url, final HashMap<String, String> params, VolleyCallback volleyCallback) {

        showDialog();

        this.mparams = params;
        Log.d("TAG", "PARAM " + mparams);
        this.mcallback = volleyCallback;


        JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
                url, new JSONObject(mparams),
                new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {

                        dismissDialog();
                        s = response.toString();
                        mcallback.onSuccess(s);
                        Log.d("TAG", "Response " + s);


                    }
                }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                dismissDialog();
                mcallback.onFailure(error.toString());

            }
        }) {

            /**
             * Passing some request headers
             * */
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String, String> headers = new HashMap<String, String>();
                headers.put("Authorization", "Basic ZGhhdmFsLnNAbXNwLWdyb3VwLmNvLnVrOjd0emhYWEN4Rit3PQ==");
                return headers;
            }

        };


        jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(10000, 1, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(jsonObjReq,
                "string_req");

    }

Post image with Authorisation in volley (Authentication)



private void postUserImage() {

        volleyParser.showDialog();

        MultipartEntityBuilder builder = MultipartEntityBuilder.create();

        Log.d("TAG", "Edit User Info API: " + Api.Edit_User_Image);

        try {

            if (byteArray != null) {

                //File file = new File(imagePath);
                builder.addBinaryBody("CustomerImage", byteArray, ContentType.create("image/png"), "Cust_" + prefs.getCustomerId() + ".png");

            }
        } catch (Exception e) {

            e.printStackTrace();
        }

        RequestQueue requestQueue = Volley.newRequestQueue(context);

        HashMap<String, String> headers = new HashMap<String, String>();
        headers.put("Authorization", "Basic ZGhhdmFsLnNAbXNwLWdyb3VwLmNvLnVrOjd0emhYWEN4Rit3PQ==");

        HttpEntity httpEntity = builder.build();
        MultipartRequest request = new MultipartRequest(Api.Edit_User_Image,
                httpEntity, Response.class, headers, createSuccessListener(), createErrorListener());

        request.setRetryPolicy(new DefaultRetryPolicy(10000, DefaultRetryPolicy
                .DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        requestQueue.add(request);
    }

Friday, 14 April 2017

Convert Json to ArralyList or ArrayList to json using -----Gson



how to convert json to ArrayList or ArrayList to json string of Custom Setter class



Convert  Json String to ArrayList

String jsonstr = "replace your json str";


ArrayList<GallerySetter> items;


items = new Gson().fromJson(jsonstr,  new TypeToken<ArrayList<GallerySetter>>() {
}.getType());


Convert  ArrayList  to Json String


ArrayList<GallerySetter> exampleArrayList = = new ArrayList<>();

String orderStr = new Gson().toJson(items, new TypeToken<ArrayList<GallerySetter>>() {
}.getType());


Thursday, 13 April 2017

Frequently asks Interview Question For Android Development

- Activity and Fragment Lifecycle
Ans:- http://baiduhix.blogspot.in/2015/08/android-how-to-do-findviewbyid-in.html
 http://www.vogella.com/tutorials/AndroidLifeCycle/article.html

- InApp Purchase:-
Ans:- Used to purchase or Subscribe a product or Service from google play store.
 Main 3 Callback important in InApp-Purchase
 1) PurChaseFinish Listener = Call when finish purchase process.
 2) QueryInventory Listener-  Call every time InApp Activity Call. Gives Desription about Product weather it is Purchased or not in past, it's price, trancation id, date (if Purchased) or any other details
 3) ConsumeFinishListener -  There are 2 types of Product Consumable and non-consumable. Consumable Product are Consume by code. And It's successfully give response after consume in this callback Listener.

- Payment GateWay - Stripe
Ans:- https://stripe.com/

- Service
Ans:-  http://www.onsandroid.com/2011/12/difference-between-android.html

- Intent
Ans:- Explicit intents specify the component to start by name (the fully-qualified class name). You'll typically use an explicit intent to start a component in your own app, because you know the class name of the activity or service you want to start. For example, you can start a new activity in response to a user action or start a service to download a file in the background.
        Implicit intents do not name a specific component, but instead declare a general action to perform, which allows a component from another app to handle it. For example, if you want to show the user a location on a map, you can use an implicit intent to request that another capable app show a specified location on a map.

- BroadCast Receicer
Ans:- Broadcast Receiver is used to Execute Register Event in Application. There are some Default broadcast receiver like bettry low, InComing message comes.
 See for exported :- https://developer.android.com/guide/topics/manifest/receiver-element.html#exported

- Newly Android OS Viersion Features
Ans:- https://en.wikipedia.org/wiki/Android_version_history

- Parent layout of All layout (e.g Liniar Layout, Relative Layout)
 Ans:-  ViewGroup

 - Difference between ListView and RecyclerView
 Ans:- http://stackoverflow.com/questions/26728651/recyclerview-vs-listview

 - Adapter used with RecyclerView
 Ans:- RecyclerView.Adapter<ViewHolder>

 - Difference between RelativeLayout and FrameLayout

 Ans:-
 FrameLayout - designed to display a stack of child View controls. Multiple view controls can be added to this layout. This can be used to show multiple controls within the same screen space.
 RelativeLayout - designed to display child View controls in relation to each other. For instance, you can set a control to be positioned “above” or “below” or “to the left of” or “to the right of” another control, referred to by its unique identifier. You can also align child View controls relative to the parent edges.

 - Diffrence between Thread and Async Task
 Ans:- http://www.onsandroid.com/2011/12/difference-between-android.html

 - External Libraries like Firebase, butterknife, Glide, Google Analytic
 Ans:- Need to find in Internet

 - Explain About Material Design
Ans:- https://developer.android.com/training/material/index.html

- Different between Fragment Add and Replace
Ans:- http://stackoverflow.com/questions/18634207/difference-between-add-replace-and-addtobackstack

- RealTime Database
Ans:- http://www.androidhive.info/2016/10/android-working-with-firebase-realtime-database/

- How to Stop Default Broadcast to catch Another application
Ans:- via exported=false attribute in Mainifest in when Broadcast registered

- What Happen when 2 different activities  gives Category Launcher
Ans:- Its Make 2 Different Instance of Application

- Restrict to access another class object without private keyword.
Pending

- Content Provider with Examples
Ans:- http://www.compiletimeerror.com/2013/12/content-provider-in-android.html


- Whats is Build Config ?
Ans:- https://developer.android.com/studio/build/index.html
http://stackoverflow.com/questions/30279304/how-to-use-build-types-debug-vs-release-to-set-different-styles-and-app-names
http://www.myandroidsolutions.com/2016/06/16/android-build-types-flavors/#.WKaSa3V9600


- Different between Permission and uses-permission tag
- <uses-permission> is for  default Android Permission And <permission> is for custom permission.



- What is Gradle ?
Ans:- http://stackoverflow.com/questions/16754643/what-is-gradle-in-android-studio



- String s1 = "Sohel", String s2 = "sohel" so s1==s2 ??
Ans:- true.


- Program from Activity A to Activity B and Method Calls in it.

  A to B

  A--> onPause
  B--> onCrete, onStart, onResume

  Backpress of B (B to A)


  B--> onPause,onStop,onDestroy
  A--> onResume


- What is Bound Service
Ans:- https://developer.android.com/guide/components/bound-services.html


- What is Product Flavor ?
Ans:- https://developer.android.com/studio/build/index.html
http://stackoverflow.com/questions/30279304/how-to-use-build-types-debug-vs-release-to-set-different-styles-and-app-names
http://www.myandroidsolutions.com/2016/06/16/android-build-types-flavors/#.WKaSa3V9600



 ============================ New Layouts =======================================================================================================================================================================================================================================================================================================

 - AppBarLayout
 Like whatsapp, on scrolling of listview, automatically toolbar gets hidden. This can be achieved using the Android AppBarLayout, Use this layout to hide the actionbar or appbar when the sibling view is scrolled.

- NestedScrollView
NestedScrollView is just like ScrollView, but it supports acting as both a nested scrolling parent and child on both new and old versions of Android. Nested scrolling is enabled by default.

- CoordinatorLayout
  The CoordinatorLayout is a super-powered FrameLayout (according to the official documentation). Child views can also interact with one another.
  By default, if you add multiple children to a FrameLayout, they would overlap each other. A FrameLayout should be used most often to hold a single child view. The main appeal of the CoordinatorLayout is its ability to coordinate the animations and transitions of the views within it. Using xml only, you can describe a layout where a FAB moves out of the way of an incoming Snackbar, for example, or have a FAB (or any other View really) that is apparently attached to another widget, and moves on screen with the widget.

================Collection In Java=========================================


- Collection in Java
Ans:- http://beginnersbook.com/java-collections-tutorials/


ArrayList:-

Arraylist maintains the insertion order.
Elements gets sorted in the same sequence in which they have been added to the Arraylist.
Searching abject is very easy. get and set process of object is also easy.

LinkedList:-

LinkedList almost same as ArrayList.
Search Process is slow than Arrtaylist.
Deletation process of object is very fast compare to Arraylist.
Insertion process fast compare to ArrayList.

Vector:-

Vector gives poor permance of  searching, adding, delete and update of its elements.
Maintain Insertion order like ArrayList.

HashMap:-

HashMap maintains key and value pairs.
It is not an ordered collection which means it does not return the keys and values in the same order in which they have been inserted into the HashMap.
It neither does any kind of sorting to the stored keys and Values.

TreeMap:-

TreeMap maintains key and value pairs.
TreeMap is sorted according to the natural ordering of its keys.

LinkedHashMap:-

TreeMap maintains key and value pairs.
LinkedHashMap maintains the insertion order.

HashSet:-

HashSet doesn’t maintain any kind of order of its elements.
HashSet doesn’t allow duplicates.
If you try to add a duplicate element in HashSet, the old value would be overwritten.

TreeSet:-

TreeSet sorts the elements in ascending order.
TreeSet is similar to HashSet except that it sorts the elements in the ascending order while HashSet doesn’t maintain any order

LinkedHashSet:-

LinkedHashSet maintains the insertion order.
Elements gets sorted in the same sequence in which they have been added to the Set Like Arraylist

Wednesday, 12 April 2017

Deep Linking in Android


open or browse application or activity on hyperlink click and get value from url


Create MainActivity.jave file


public class MainActivity extends AppCompatActivity {

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


        TextView deepLinkUrl = (TextView) findViewById(R.id.deep_link_url);

        Intent intent = getIntent();
        Uri data = intent.getData();


        if ((data != null) && (data.getQueryParameter("faqid") != null)) {
            Toast.makeText(this, data.getQueryParameter("faqid") + "", Toast.LENGTH_SHORT).show();

        } else if ((data != null) && (data.getQueryParameter("sectionid") != null)) {
            Toast.makeText(this, data.getQueryParameter("sectionid") + "", Toast.LENGTH_SHORT).show();
        } else {
            deepLinkUrl.setText("Deep link received - " + data);
        }

        if(data != null)
        {
            deepLinkUrl.setText("Deep link received :-  faqid = " +  data.getQueryParameter("faqid")+" sectionid = "+data.getQueryParameter("sectionid"));
        }

    }
}


Create activity_main.xml file

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.deeplink.MainActivity">

    <TextView        android:id="@+id/deep_link_url"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Hello World!" />
</RelativeLayout>




Set code in manifest, on pariticular activity

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


        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data android:scheme="http"            android:host="www.example.com"            android:pathPrefix="/gizmos" />

    </intent-filter>

</activity>



Exmple Deeplink Url:-  http://www.example.com/gizmos?faqid=111&sectionid=222



How to make Gradient background ?

Here is the great tutorial for making gradient background. Follow the steps given in following link.

http://thetechnocafe.com/make-a-moving-gradient-background-in-android/

Also you can download lots of ready gradient background from below link.

https://uigradients.com/#ViceCity

enjoy coding !

Tuesday, 11 April 2017

How to make Custom Fontable TextView...

Follow the Stepas to make Fontable TextView

1) Create Custom class that extends TextView.  (FontableTextView.java)


public class FontableTextView extends TextView {

    public FontableTextView(Context context) {
        super(context);
    }

    public FontableTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        UiUtil.setCustomFont(this, context, attrs,
                R.styleable.com_github_browep_customfonts_view_FontableTextView,
                R.styleable.com_github_browep_customfonts_view_FontableTextView_font);
    }

    public FontableTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        UiUtil.setCustomFont(this,context,attrs,
                R.styleable.com_github_browep_customfonts_view_FontableTextView,
                R.styleable.com_github_browep_customfonts_view_FontableTextView_font);
    }
}

2) Create Attributre in res-> values-> attrs.xml

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


<declare-styleable name="com.github.browep.customfonts.view.FontableTextView">
    <attr name="font" />
</declare-styleable>

</resources>


3) Add UiUtil.java class

public class UiUtil {

    public static final String TAG = "UiUtil";

    public static void setCustomFont(View textViewOrButton, Context ctx, AttributeSet attrs, int[] attributeSet, int fontId) {
        TypedArray a = ctx.obtainStyledAttributes(attrs, attributeSet);
        String customFont = a.getString(fontId);
        setCustomFont(textViewOrButton, ctx, customFont);
        a.recycle();
    }

    private static boolean setCustomFont(View textViewOrButton, Context ctx, String asset) {
        if (TextUtils.isEmpty(asset))
            return false;
        Typeface tf = null;
        try {
            tf = getFont(ctx, asset);
            if (textViewOrButton instanceof TextView) {
                ((TextView) textViewOrButton).setTypeface(tf);
            } else if (textViewOrButton instanceof EditText) {

                ((EditText) textViewOrButton).setTypeface(tf);

            } else {
                ((Button) textViewOrButton).setTypeface(tf);
            }
        } catch (Exception e) {
            Log.e(TAG, "Could not get typeface: " + asset, e);
            return false;
        }

        return true;
    }

    private static final Hashtable<String, SoftReference<Typeface>> fontCache = new Hashtable<String, SoftReference<Typeface>>();

    public static Typeface getFont(Context c, String name) {
        synchronized (fontCache) {
            if (fontCache.get(name) != null) {
                SoftReference<Typeface> ref = fontCache.get(name);
                if (ref.get() != null) {
                    return ref.get();
                }
            }

            Typeface typeface = Typeface.createFromAsset(
                    c.getAssets(),
                    "fonts/" + name
            );
            fontCache.put(name, new SoftReference<Typeface>(typeface));

            return typeface;
        }
    }

}



4) Now How to use in XML Layout file

 - Add this line to your XML root element (e.g LiniarLayout, RelativeLayout)

       xmlns:app="http://schemas.android.com/apk/res-auto"



-  copy your font to assests-> fonts Directory (e.g HelveticaNeueLight.ttf is in my fonts folder in assests)

<your.package.name.FontableTextView    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:hint="This is Fontable TextView"
    app:font="HelveticaNeueLight.ttf" />



By Sohel Shaikh


Showcase tutorials - (Help Screens at Startup of App)

Here is the nice Demo we can implement in apps. Simple, nice and Easy to implement. Download by below link.

https://github.com/deano2390/MaterialShowcaseView

Monday, 10 April 2017

Location Dialog like goggle

how to enable location on dialog click without going to setting screen

//first add permission in to Manifest file.

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

//intialize googleapiclient

private GoogleApiClient googleApiClient;


//check that location enables or not if not open dialog


public void getLocation()
{
    final LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

    if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER))
    {
        //what you want to do        locationenable();
    }
    else    {

    }
}


public void locationenable()
{


    googleApiClient = new GoogleApiClient.Builder(context)
            .addApi(LocationServices.API)
            .build();
    googleApiClient.connect();

    LocationRequest locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(30 * 1000);
    locationRequest.setFastestInterval(5 * 1000);
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
            .addLocationRequest(locationRequest);

    //**************************    builder.setAlwaysShow(true); //this is the key ingredient    //**************************
    PendingResult<LocationSettingsResult> result =
            LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build());
    result.setResultCallback(new ResultCallback<LocationSettingsResult>()
    {
        @Override        public void onResult(LocationSettingsResult result)
        {
            final Status status = result.getStatus();
            final LocationSettingsStates state = result.getLocationSettingsStates();
            switch (status.getStatusCode())
            {
                case LocationSettingsStatusCodes.SUCCESS:
                    // All location settings are satisfied. The client can initialize location                    // requests here.
                    break;
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    // Location settings are not satisfied. But could be fixed by showing the user                    // a dialog.                    try                    {
                        // Show the dialog by calling startResolutionForResult(),                        // and check the result in onActivityResult().                        status.startResolutionForResult(
                                (Activity) context, 1000);
                    }
                    catch (IntentSender.SendIntentException e)
                    {
                        // Ignore the error.                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                    // Location settings are not satisfied. However, we have no way to fix the                    // settings so we won't show the dialog.                    break;
                case LocationSettingsStatusCodes.CANCELED:
                    // Location settings are not satisfied. However, we have no way to fix the                    // settings so we won't show the dialog.                    break;

            }
        }
    });


}

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);


    if (requestCode == 1000)
    {      
        getLocation();
    }
    else
    {

    }


}


//above code is for enable location on dialog click and call getlocation() method in onresume if latitude or latitude not found

//now providing the location manager class through u can get all the location related stuff.

// Gps Tracker class is providing all the location listner properties for getting lattitude ,longitude ,address on lat-lng etc.


import android.Manifest;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.support.v4.app.ActivityCompat;
import android.util.Log;

import java.io.IOException;
import java.util.List;
import java.util.Locale;

public class GPSTracker extends Service implements LocationListener
{
    private final Context mContext;
    // flag for GPS status    public boolean isGPSEnabled = false;
    // flag for network status    public boolean isNetworkEnabled = false;
    // flag for GPS status    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;
    SharedPreferences prefs;

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

    public Location getLocation()
    {
        try        {
            locationManager = (LocationManager) mContext                    .getSystemService(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 (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
                    {
                        // TODO: Consider calling                        //    ActivityCompat#requestPermissions                        // here to request the missing permissions, and then overriding                        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,                        //                                          int[] grantResults)                        // to handle the case where the user grants the permission. See the documentation                        // for ActivityCompat#requestPermissions for more details.                        return location;
                    }
                    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;
    }

    /**     * Get list of address by latitude and longitude     *     * @return null or List<Address>
     */    public List<Address> getGeocoderAddress(Context context)
    {
        if (location != null)
        {
            Geocoder geocoder = new Geocoder(context, Locale.ENGLISH);
            try            {
                List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
                return addresses;
            }
            catch (IOException e)
            {
                // e.printStackTrace();                Log.e("Error : Geocoder", "Impossible to connect to Geocoder", e);
            }
        }

        return null;
    }

    /**     * Try to get AddressLine     *     * @return null or addressLine     */    public String getAddressLine(Context context)
    {
        List<Address> addresses = getGeocoderAddress(context);
        String result = "";
        if (addresses != null && addresses.size() > 0)
        {
            Address address = addresses.get(0);
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < address.getMaxAddressLineIndex(); i++)
            {
                sb.append(address.getAddressLine(i)).append("\n");
            }
            sb.append(address.getLocality()).append("\n");
            sb.append(address.getCountryName());
            result = sb.toString();

            return result;
        }
        else        {
            return null;
        }
    }

    /**     * Try to get Locality     *     * @return null or locality     */    public String getLocality(Context context)
    {
        List<Address> addresses = getGeocoderAddress(context);
        if (addresses != null && addresses.size() > 0)
        {
            Address address = addresses.get(0);
            String locality = address.getLocality();

            return locality;
        }
        else        {
            return null;
        }
    }

    /**     * Try to get Postal Code     *     * @return null or postalCode     */    public String getPostalCode(Context context)
    {
        List<Address> addresses = getGeocoderAddress(context);
        if (addresses != null && addresses.size() > 0)
        {
            Address address = addresses.get(0);
            String postalCode = address.getPostalCode();

            return postalCode;
        }
        else        {
            return null;
        }
    }

    /**     * Try to get CountryName     *     * @return null or postalCode     */    public String getCountryName(Context context)
    {
        List<Address> addresses = getGeocoderAddress(context);
        if (addresses != null && addresses.size() > 0)
        {
            Address address = addresses.get(0);
            String countryName = address.getCountryName();

            return countryName;
        }
        else        {
            return null;
        }
    }

    /**     * Stop using GPS listener Calling this function will stop using GPS in your app     */    public void stopUsingGPS()
    {
        if (locationManager != null)
        {
            if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
            {
                // TODO: Consider calling                //    ActivityCompat#requestPermissions                // here to request the missing permissions, and then overriding                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,                //                                          int[] grantResults)                // to handle the case where the user grants the permission. See the documentation                // for ActivityCompat#requestPermissions for more details.                return;
            }
            locationManager.removeUpdates(GPSTracker.this);
        }
    }

    /**     * 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 GPS/wifi enabled     *     * @return boolean     */    public boolean canGetLocation()
    {
        return this.canGetLocation;
    }

    /**     * Function to show settings alert dialog On pressing Settings button will lauch Settings Options     */    public void showSettingsAlert()
    {
        android.support.v7.app.AlertDialog.Builder alertDialog = new android.support.v7.app.AlertDialog.Builder(mContext);
        // Setting Dialog Title        alertDialog.setTitle("GPS settings");
        // Setting Dialog Message        alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");
        // 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)
    {
        // TODO Auto-generated method stub    }

    @Override    public void onProviderDisabled(String provider)
    {
        // TODO Auto-generated method stub    }

    @Override    public void onProviderEnabled(String provider)
    {
        // TODO Auto-generated method stub
    }

    @Override    public void onStatusChanged(String provider, int status, Bundle extras)
    {
        // TODO Auto-generated method stub    }

    @Override    public IBinder onBind(Intent intent)
    {
        // TODO Auto-generated method stub        return null;
    }

}


//full and final code for location enable and get latitude longitude for just intializing the Gps tracker class and u can do all the location related stuff.


By Darshan Patel

Run/install/debug Android applications over Wi-Fi ?

Open Teminal/cmd --------------- Below steps is for Android 10 or lower Step 1 - Connect the device via USB and make sure debugging is work...