How to Write Custom Launcher App in Android - Arnab Chakraborty

download How to Write Custom Launcher App in Android - Arnab Chakraborty

of 13

description

launcher2

Transcript of How to Write Custom Launcher App in Android - Arnab Chakraborty

  • 5/26/2018 How to Write Custom Launcher App in Android - Arnab Chakraborty

    http:///reader/full/how-to-write-custom-launcher-app-in-android-arnab-chakrab

    4/9/14How to write custom launcher app in Android - Arnab Chakraborty

    Pahttp://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/

    Arnab Chakraborty

    A cognitive perspective on web.

    HomeArchivesAbout

    How to Write Custom Launcher App in Android

    In Android the screen that appears when the phone starts is called Launcher Screen. It is possible in Android to write custom launcher apps whichused as a replacement for the default launcher app that comes bundled with the phone. Developing a launcher app is no different than developing anAndroid application, in fact both are same. In this post Ill share what you need to do to write your own custom launcher application.

    AndroidManifest.xml

    Ill skip the part of creating the project and drive straight to the code. Here is our sample AndroidManifest.xmlfile, remember to pay attention to thcomments in the code.

    AndroidManifest.xml

    123456789101112131415161718192021222324252627282930313233

    The important line in the above XMLfile is , this intent-filterallows you to application as Home Screenapplication. Android looks for this particular intent filter and whenever you install your app with this intent-filter set thapplication will appear in the list of installed launchers (a tap on the Home button will reveal the list).

    http://arnab.ch/abouthttp://arnab.ch/http://arnab.ch/http://arnab.ch/http://arnab.ch/http://arnab.ch/abouthttp://arnab.ch/blog/archiveshttp://arnab.ch/http://arnab.ch/
  • 5/26/2018 How to Write Custom Launcher App in Android - Arnab Chakraborty

    http:///reader/full/how-to-write-custom-launcher-app-in-android-arnab-chakrab

    4/9/14How to write custom launcher app in Android - Arnab Chakraborty

    Pahttp://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/

    Display installed applications in our custom homescreen

    Now as we have finished with the manifest file, lets add some code to display the list of installed applications in our Home Screen, this way we canuse the app after installing.

    AsyncTaskLoader to asynchronously load applications

    Here is the code to load the applications list asynchronously, were using a custom AsyncTaskLoader class, later well hook it up in our fragment clausing the Android Loaders.

    AppsLoader.java

    123456789101112131415

    161718192021222324252627282930313233

    343536373839404142434445464748495051

    5253545556575859606162636465

    public class AppsLoader extends AsyncTaskLoader { ArrayList mInstalledApps;

    final PackageManager mPm;

    public AppsLoader(Context context) { super(context);

    mPm = context.getPackageManager(); }

    @Override public ArrayList loadInBackground() { // retrieve the list of installed applications List apps = mPm.getInstalledApplications(0);

    if (apps == null) { apps = new ArrayList(); }

    final Context context = getContext();

    // create corresponding apps and load their labels ArrayList items = new ArrayList(apps.size()); for (int i = 0; i < apps.size(); i++) { String pkg = apps.get(i).packageName;

    // only apps which are launchable if (context.getPackageManager().getLaunchIntentForPackage(pkg) != null) { AppModel app = new AppModel(context, apps.get(i)); app.loadLabel(context); items.add(app); }

    }

    // sort the list Collections.sort(items, ALPHA_COMPARATOR); return items; }

    @Override public void deliverResult(ArrayList apps) { if (isReset()) { // An async query came in while the loader is stopped. We // don't need the result. if (apps != null) { onReleaseResources(apps); } }

    ArrayList oldApps = apps;

    mInstalledApps = apps;

    if (isStarted()) { // If the Loader is currently started, we can immediately // deliver its results. super.deliverResult(apps); }

    // At this point we can release the resources associated with // 'oldApps' if needed; now that the new result is delivered we // know that it is no longer in use. if (oldApps != null) { onReleaseResources(oldApps); }

  • 5/26/2018 How to Write Custom Launcher App in Android - Arnab Chakraborty

    http:///reader/full/how-to-write-custom-launcher-app-in-android-arnab-chakrab

    4/9/14How to write custom launcher app in Android - Arnab Chakraborty

    Pahttp://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/

    666768697071727374757677

    787980818283848586878889909192939495

    96979899100101102103104105106107108109110111112113

    114115116117118119120121122123124125126127128129130131

    }

    @Override protected void onStartLoading() { if (mInstalledApps != null) { // If we currently have a result available, deliver it // immediately. deliverResult(mInstalledApps); }

    if (takeContentChanged() || mInstalledApps == null ) { // If the data has changed since the last time it was loaded

    // or is not currently available, start a load. forceLoad(); } }

    @Override protected void onStopLoading() { // Attempt to cancel the current load task if possible. cancelLoad(); }

    @Override public void onCanceled(ArrayList apps) { super.onCanceled(apps);

    // At this point we can release the resources associated with 'apps' // if needed. onReleaseResources(apps);

    }

    @Override protected void onReset() { // Ensure the loader is stopped onStopLoading();

    // At this point we can release the resources associated with 'apps' // if needed. if (mInstalledApps != null) { onReleaseResources(mInstalledApps); mInstalledApps = null; } }

    /** * Helper method to do the cleanup work if needed, for example if we're * using Cursor, then we should be closing it here

    * * @param apps */ protected void onReleaseResources(ArrayList apps) { // do nothing }

    /** * Perform alphabetical comparison of application entry objects. */ public static final Comparator ALPHA_COMPARATOR = new Comparator() { private final Collator sCollator = Collator.getInstance(); @Override public int compare(AppModel object1, AppModel object2) { return sCollator.compare(object1.getLabel(), object2.getLabel()); } };}

    The loader class above will only retrieve the applications for which a good launch intent is available, put simply were only displaying those applifor which getLaunchIntentForPackagereturns a valid launch intent.

    GridView Adapter

    A simple adapter used to populate the applications icons and names in a GridView.

    AppListAdapter.java

    1 public class AppListAdapter extends ArrayAdapter {

  • 5/26/2018 How to Write Custom Launcher App in Android - Arnab Chakraborty

    http:///reader/full/how-to-write-custom-launcher-app-in-android-arnab-chakrab

    4/9/14How to write custom launcher app in Android - Arnab Chakraborty

    Pahttp://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/

    2345678910111213

    141516171819202122232425262728293031

    3233343536373839404142434445464748

    private final LayoutInflater mInflater;

    public AppListAdapter (Context context) { super(context, android.R.layout.simple_list_item_2);

    mInflater = LayoutInflater.from(context); }

    public void setData(ArrayList data) { clear(); if (data != null) { addAll(data);

    } }

    @Override @TargetApi(Build.VERSION_CODES.HONEYCOMB) public void addAll(Collection

  • 5/26/2018 How to Write Custom Launcher App in Android - Arnab Chakraborty

    http:///reader/full/how-to-write-custom-launcher-app-in-android-arnab-chakrab

    4/9/14How to write custom launcher app in Android - Arnab Chakraborty

    Pahttp://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/

    232425262728293031323334

    353637383940414243444546474849505152

    53

    return new AppsLoader(getActivity()); }

    @Override public void onLoadFinished(Loader loader, ArrayList apps) { mAdapter.setData(apps);

    if (isResumed()) { setGridShown(true); } else { setGridShownNoAnimation(true); }

    }

    @Override public void onLoaderReset(Loader loader) { mAdapter.setData(null); }

    @Override public void onGridItemClick(GridView g, View v, int position, long id) { AppModel app = (AppModel) getGridAdapter().getItem(position); if (app != null) { Intent intent = getActivity().getPackageManager().getLaunchIntentForPackage(app.getApplicationPackageN

    if (intent != null) { startActivity(intent); } } }

    }

    Layout file

    A simple layout file to embed the grid fragment.

    homescreen.xml

    12345

    67891011121314151617

    Running the homescreen application

    As its a Launcher app, so when you install it you dont get to see anything unless you tap on the home button. The tap on the Home button shows ychooser dialog from which you can select the appropriate Launcher app.

    Thats it, you now have your own custom launcher application. Although a full-fledged launcher app like the ones that come with Android phones hafeatures built into them, but you can use this as a basic building block and start writing a more advanced and complex launcher as you learn.

    For those who wants to investigate further, do take a look at the default launcher application code here: Android Stock Launcher App

    Update: I wrote another post which provides a high-level overview of what all things are required to develop a kiosk-mode Android application. can check it out here Developing kiosk-mode applications in Android

    http://arnab.ch/blog/2013/11/developing-kiosk-mode-applications-in-android/https://android.googlesource.com/platform/packages/apps/Launcher2/+/master/
  • 5/26/2018 How to Write Custom Launcher App in Android - Arnab Chakraborty

    http:///reader/full/how-to-write-custom-launcher-app-in-android-arnab-chakrab

    4/9/14How to write custom launcher app in Android - Arnab Chakraborty

    Pahttp://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/

    You can download the full source code used in this article from this Github repository.

    An example custom launcher for Android Read More

    http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/

    Comments

    72 Comments

    ! !

    Lim Thye Chean !

    I found an issue - after uninstalling an app, the UI won't refresh. Is there a way to auto-refresh or use a call to refresh the UI?

    ! !

    webgyani ! Mod

    In your AppsGridFragment, register a BroadcastReceiver which should use an IntentFilter for ACTION_PACKAGE_ADDED and

    ACTION_PACKAGE_REMOVED intent actions. Then on the onReceivemethod of that receiver call

    getLoaderManager().getLoader(YOUR_LOADER_ID).onContentChanged(), this should ideally refresh the apps list.

    If you are using the above code then the LOADER_ID is 0 which was specified in the initLoadercall.

    ! !

    Lim Thye Chean !

    I tried - and got stuck, can you advice?

    On AndroidManifest.xml:

    and here's where I got issue:

    public class ReceiveBroadcast extends BroadcastReceiver {

    public void onReceive(Context context, Intent intent) {

    getLoaderManager().getLoader(0).onContentChanged(); //Cannot do getLoaderManager

    }

    }

    Lim Thye Chean !

    Also tried: getLoaderManager is undefined. Please help!

    public class ReceiveBroadcast extends BroadcastReceiver implements

    LoaderManager.LoaderCallbacks {

    public void onReceive(Context context, Intent intent) {

    getLoaderManager().getLoader(0).onContentChanged(); // also got issue

    ...

    arnabc/ simplelauncher 23

    Latest commit to the masterbranch on 3-16-2014 Download aDownload a

    http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1276255648http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1277035262http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1276210252https://github.com/arnabc/simplelauncher#readmehttps://github.com/arnabc/simplelauncher/watchershttps://github.com/arnabc/simplelauncher/forkshttps://github.com/arnabc/simplelauncher/zipball/masterhttps://github.com/arnabc/simplelauncher/watchershttps://github.com/arnabc/simplelauncherhttps://github.com/arnabchttp://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/https://github.com/arnabc/simplelauncher#readmehttps://github.com/arnabc/simplelauncher/zipball/masterhttp://disqus.com/webgyani/http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1277035262http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1277100386http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1276255648http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1277035262http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1276210252http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1276255648http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1276210252http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#
  • 5/26/2018 How to Write Custom Launcher App in Android - Arnab Chakraborty

    http:///reader/full/how-to-write-custom-launcher-app-in-android-arnab-chakrab

    4/9/14How to write custom launcher app in Android - Arnab Chakraborty

    Pahttp://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/

    ! !

    }

    ! !

    Webgyani !

    Use an inner class and dynamically register and unregister the broadcast receivers from the fragment. Don't use

    receiver declaration in Manifest. See "registerReceiver" method doc for example.

    ! !

    Lim Thye Chean !

    I also tried register/unregister the broadcast receiver in the Activity itself, also does not work. However, manual

    with menu (getLoaderManager().getLoader(0).onContentChanged()) works, only cannot receiving the broadcast.

    public void onResume() {

    super.onResume();

    IntentFilter filter = new IntentFilter();

    filter.addAction(Intent.ACTION_PACKAGE_ADDED);

    filter.addAction(Intent.ACTION_PACKAGE_REMOVED);

    registerReceiver(receiver, filter);

    }

    public void onPause() {

    super.onPause();

    unregisterReceiver(receiver);

    }

    ! !

    webgyani ! Mod

    The way you've set it up, this will certainly not work. You are registering the receiver in Activity "onResume" and

    unregistering the receiver on Activity "onPause", the moment you go to uninstall any app, I guess you do it by g

    through settings or other app which opens a new screen and when that happens "onPause" gets called hence t

    receiver gets unregistered and does not receive the intent broadcast.

    The simple solution could be to register/unregister the receiver in Activity onCreate/onDestroy methods.

    An alternate solution is that you can define a receiver in Manifest (like you did earlier) and receive the broadcast

    and set some Preference flag when an app is deleted/added, and check that flag in your Activity's onStart/onRe

    callback to determine what to do, it should not be too difficult.

    ! !

    Lim Thye Chean !

    It is not difficult, but I found that onReceive is not called at all. Do a simple log and nothing is shown in log. Loo

    close to the result but still stuck.

    public class Receiver extends BroadcastReceiver {

    public void onReceive(Context ctx, Intent intent) { Log.d("iHome", "received action!"); }

    }

    ! !

    webgyani ! Mod

    I'll look into it, possibly sometime this week, I am bit busy in the first half of the week, but once I fix that I'll upda

    thread. Just give me a few days.

    http://disqus.com/webgyani/http://disqus.com/webgyani/http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1278209698http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1278245642http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1277693961http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1278209698http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1277499813http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1277693961http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1277179567http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1277499813http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1277100386http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1277179567http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#
  • 5/26/2018 How to Write Custom Launcher App in Android - Arnab Chakraborty

    http:///reader/full/how-to-write-custom-launcher-app-in-android-arnab-chakrab

    4/9/14How to write custom launcher app in Android - Arnab Chakraborty

    Pahttp://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/

    ! !

    Lim Thye Chean !

    Good news! I found my answer here (need to add in ), and coupled with yo

    suggestion of using preference, works like a charm.

    ! !

    webgyani ! Mod

    Great! :-)

    ! !

    Lim Thye Chean !

    But that solution has an issue - apps are downloaded on background, if the user is using the launcher, refresh w

    occurred (since the check only happened onResume()).

    I was wondering whether it is possible for the Broadcast Receiver to call the launcher and do the update.

    ! !

    webgyani ! Mod

    Take a look at the latest code (pushed to GitHub), that issue has been fixed. I've also updated the Gradle build f

    you may have to update support library (19.0.1), Android SDK (19) and Gradle (0.7+) if you do not have the ment

    version of those libraries.

    ! !

    Lim Thye Chean !

    Hi, since I have already deeply worked on my own solution (and I don't use Android Studio), can you tell me wh

    file/code files has changed and I can check the solutions by studying the source code? And how do you solve it

    Thanks!

    ! !

    webgyani ! Mod

    Take a look at the commit details here: https://github.com/arnabc/simp...

    AppsLoader.javahas been modified and PackageIntentReceiver.javahas been newly introduced to handle

    install/uninstall intents.

    ! !

    Lim Thye Chean !

    Works! Thanks!

    ! !

    webgyani ! Mod

    I'll look into it this weekend. I really appreciate the amount of effort that you've put into finding a solution, and I f

    the launcher should handle this scenario, just give me few days.

    ! !

    Lim Thye Chean !

    Thanks! I have implemented every suggestions you gave, and looking forward for the solution! And if I have foun

    solution, I will update here too.

    Lim Thye Chean !

    Tried, in activity onCreate()

    receiver = new BroadcastReceiver() {

    public void onReceive(Context context, Intent intent) {

    ((AppsGridFragment) getSupportFragmentManager().findFragmentById(R.id.apps_grid)).refresh();

    }

    };

    http://disqus.com/webgyani/http://disqus.com/webgyani/http://disqus.com/webgyani/http://disqus.com/webgyani/http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1277693961http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1278004114http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1278245642http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1278249200http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1281007263http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1281037021http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1303097850http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1303374945http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#https://github.com/arnabc/simplelauncher/commit/0671a1919527ce3d2b9174624f60d56526cbf611http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1303058827http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1303097850http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1286840374http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1303058827http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1281007263http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1286840374http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1278424678http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1281007263http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1278423934http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1278424678http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1278245642http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1278423934http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#
  • 5/26/2018 How to Write Custom Launcher App in Android - Arnab Chakraborty

    http:///reader/full/how-to-write-custom-launcher-app-in-android-arnab-chakrab

    4/9/14How to write custom launcher app in Android - Arnab Chakraborty

    Pahttp://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/

    ! !

    IntentFilter filter = new IntentFilter();

    filter.addAction(Intent.ACTION_PACKAGE_ADDED);

    filter.addAction(Intent.ACTION_PACKAGE_REMOVED);

    registerReceiver(receiver, filter);

    Then onDestroy I unregister the receiver.

    Yes, then I go settings and uninstall and app, tried both Back or Home to go back to the installer... and nothing

    happened.

    Think Manifest became the last solution...

    ! !

    Lim Thye Chean !

    Thanks, this is what I do but does not seem to work - In AppsGridFragment onActivityCreated method, I added

    following code as advice: but go to settings and remove an app does not have any effect.

    --

    IntentFilter filter = new IntentFilter();

    filter.addAction(Intent.ACTION_PACKAGE_ADDED);

    filter.addAction(Intent.ACTION_PACKAGE_REMOVED);

    BroadcastReceiver receiver = new BroadcastReceiver() {

    public void onReceive(Context context, Intent intent) {getLoaderManager().getLoader(0).onContentChanged();

    }};

    getActivity().registerReceiver(receiver, filter);

    ! !

    Lim Thye Chean !

    Hi,

    I was wondering whether you can refresh your code with these changes. This will make a much more useful Launcher.

    ! !

    Lim Thye Chean !

    Ask a question: as I am trying to design a Home screen for kids, I hope to do bigger icon that just 48dp - is it possible to get larger ap

    icon? Currently loadIcon seems to returned me low resolution icons which look bad even at 72dp.

    ! !

    webgyani ! Mod

    You can try to use getDrwableForDensityto return appropriate icon from the application's resources. A quick Google search re

    the following two links which should be of help, but to use those solutions you need to slightly adjust the code.

    http://stackoverflow.com/quest...

    http://stackoverflow.com/quest...

    ! !

    Lim Thye Chean!

    For 1st approach, how to get the component name in AppModel? (ActivityInfo info =

    packageManager.getActivityInfo(componentName, PackageManager.GET_META_DATA), for 2nd approach, seems to

    17 only for the config.densityDpi, without this it won't work.

    So far I have been quite successful following your tutorial, thanks a lot!

    Lim Thye Chean !

    This seems to work!

    Context otherAppCtx = mContext.createPackageContext(mInfo.packageName, Context.CONTEXT_IGNORE_SECURIT

    http://disqus.com/webgyani/http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1276159504http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1276383818http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1276159504http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1276202101http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://stackoverflow.com/questions/18386040/retrieving-xhdpi-app-icons-from-packagemanagerhttp://stackoverflow.com/questions/15038831/retrieve-high-resolution-icon-using-packagemanager-getapplicationiconhttp://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1275951156http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1276159504http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1275951156http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1276255648http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1276354203http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1277179567http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1277203779http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#
  • 5/26/2018 How to Write Custom Launcher App in Android - Arnab Chakraborty

    http:///reader/full/how-to-write-custom-launcher-app-in-android-arnab-chakrab

    4/9/14How to write custom launcher app in Android - Arnab Chakraborty

    Paghttp://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/

    ! !

    mIcon = otherAppCtx.getResources().getDrawableForDensity(mInfo.icon, DisplayMetrics.DENSITY_HIGH);

    ! !

    limtc !

    Thanks for the tutorial. I try to write a customized kiosk where only a few apps are allowed (and home button will return to the app), it

    fine except that some external apps will quit halfway if not launched from the default installer. For example, I can launch the Google g

    app, works fine until I select a picture, it will return to my installer! Is it something I didn't handle?

    Thanks!

    ! !

    webgyani ! Mod

    Not exactly sure what could be the problem, but my guess would be to check the activity intent flags that you're passing when

    invoke that Gallery app.

    ! !

    Lim Thye Chean !

    Thanks. I am not really sure what happened, and hope to test your installer, but right now I don't know how to get it up

    running as I am using Eclipse.

    I was wondering whether it is possible for you to kindly package the installer for use with Eclipse - so we can see it and

    running and learn your code on the way. Appreciated!

    ! !

    Lim Thye Chean !

    Anyway, I got it working already with Eclipse. Steps to do: 1) Create a new project and make sure the package

    ch.arnab.simplelauncher, 2) Close the project and copy /res, /src and AndroidManifest.xml over, 3) Open the pr

    ! !

    Felipe !

    Hi man,

    How i can set this laucher , how as a default laucher , when i open my cell open this laucher

    ! !

    webgyani!

    Mod

    After you install the app, press Home button which should show a dialog box with the list of Launcher applications, if you are

    Phones running ICS or above then select the SimpleLauncher icon and then choose "Always" button, that makes it the default

    launcher and it survives the reboot as well.

    But remember this is a sample application and it does not have many features that other Launchers provide, you should only u

    for experimental purpose and to learn how to write Launcher apps for Android.

    ! !

    Felipe !

    Thanks Man!

    ! !

    Diego!

    tks.

    ! !

    Paul Marcellana !

    Whoa! This is the one that I've looking for developing kiosk! But can't see and run the app. :'(

    ! !

    Paul Marcellana !

    I can't even understand the code and there's sooooooo many errors that I couldn't resolve! :(

    http://disqus.com/paul_marcellana/http://disqus.com/paul_marcellana/http://disqus.com/disqus_7D3sbM4tv3/http://disqus.com/webgyani/http://disqus.com/disqus_7D3sbM4tv3/http://disqus.com/webgyani/http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1214598936http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1214605172http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1214598936http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1215744622http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1260929243http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1260939312http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1259971128http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1260929243http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1259971128http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1275843024http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1275868520http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1272530775http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1275843024http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1272481397http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1272530775http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1272481397http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#
  • 5/26/2018 How to Write Custom Launcher App in Android - Arnab Chakraborty

    http:///reader/full/how-to-write-custom-launcher-app-in-android-arnab-chakrab

    4/9/14How to write custom launcher app in Android - Arnab Chakraborty

    Paghttp://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/

    ! !

    webgyani ! Mod

    What are the errors, by the way this is Gradle based project and it will only work in AndroidStudio, I didn't check it in Ec

    Also I don't know what is causing you to not understand the code. Care to explain ?

    ! !

    Paul Marcellana !

    I fixed the errors. but it doesn't run. :(

    I am new to android programming that's why I am getting hard time in understanding the codes.

    ! !

    webgyani ! Mod

    Fair enough, to understand the code you need to know about Android Loaders, Fragments, ListAdapters and lit

    of intent-filters. This is not exactly a beginner thing, but if you spend some time on it, then you should be able to

    understand it's not that complicated.

    ! !

    Vinay B !

    Hi Arnab,

    I'm new to android app development. After downloading from github i am unable to run that application in my AVD. I had downloaded

    using eclipse.exe of "adt-bundle-windows-x86_64-20131030" directory. Please help out by suggesting me step that should i follow a

    to analyse the flow.

    Thanks in advance :)

    ! !

    webgyani ! Mod

    That project is Gradle based, so you need to use AndroidStudio instead of Eclipse.

    ! !

    Vinay B !

    So Can't I open using adt bundle by changing any file settings.

    ! !

    webgyani ! Mod

    Why not use AndroidStudio, as far as I know Gradle support in ADT has lot of issues, or alternatively create you

    project in Eclipse and copy over the necessary files, change the package structure as you see fit.

    ! !

    Per !

    Thanks for this tutorial. Do you know how to extends this to also include a custom lock screen which replaces the existing one?

    thanks in advance.

    ! !

    webgyani ! Mod

    A lot of folks are asking this, being very honest I am yet to venture into the lock screen part, but probably I'll do it in some time

    cannot put a time on it.

    Tiger79 !

    Hello Arnab,

    great article !

    I was wondering though, what is your opinion regarding making a Launcher App if I want to develop a custom Lock Screen similar to

    Galaxy Nexus lock screen.

    The one you need to move an icon over another icon to actually perform some action. Would implementing that into a Launcher app

    right choice ?

    http://disqus.com/webgyani/http://disqus.com/webgyani/http://disqus.com/vinayb/http://disqus.com/webgyani/http://disqus.com/vinayb/http://disqus.com/webgyani/http://disqus.com/paul_marcellana/http://disqus.com/webgyani/http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1190459378http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1201863617http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1201998629http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1201863617http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1214432208http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1214505511http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1213003067http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1214432208http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1212318087http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1213003067http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1212318087http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1214622083http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1214624104http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1214606363http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1214622083http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1214605172http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1214606363http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#
  • 5/26/2018 How to Write Custom Launcher App in Android - Arnab Chakraborty

    http:///reader/full/how-to-write-custom-launcher-app-in-android-arnab-chakrab

    4/9/14How to write custom launcher app in Android - Arnab Chakraborty

    Paghttp://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/

    Load more comments

    Asynchronous HTTP requests in Android using Volley

    Didn't know that volley have requests priority, if I

    knew that I wouldn't have to write own library :( Greate article, thanks!

    Developing Kiosk Mode Applications in Android

    Let's take this discussion offline, you can get my

    from the about page, shoot me an email with your questions an

    to answer them as

    ! !

    ! !

    webgyani ! Mod

    You can implement it, although being very honest, I don't have any opinion whether it would be a right choice or not. There ar

    custom lock screen apps on Play Store and I guess not all of them are launcher apps.

    ! !

    Rohit !

    Hi Arnab!!!

    Thanks for this amazing post.I am facing a problem. When i installed my launcher on my device, it shows only a loading circle. I am not able to detect my mistake.

    help!!!!

    ! !

    webgyani ! Mod

    If you are using the above code, then check your logs, the loader is shown when we try to load the data using AsyncTaskLoader

    be that piece of code is throwing exception somewhere.

    ! !

    Ankur Dogra !

    Thanx alot....!!!

    ! !

    Lee Wright !

    Congrats guys! well done! This is huge for editors who need to do a lot of moderation!

    http://disqus.com/disqus_dsfctfsOhh/http://disqus.com/webgyani/http://disqus.com/webgyani/https://disqus.com/websites/?utm_source=arnabc&utm_medium=Disqus-Footerhttp://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://disqus.com/http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1142911173http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1151321707http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1165424860http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1165511948http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1165424860http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1190459378http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#comment-1193647863http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/#http://redirect.disqus.com/url?url=http%3A%2F%2Farnab.ch%2Fblog%2F2013%2F11%2Fdeveloping-kiosk-mode-applications-in-android%2F%3AjxuegUHqB6DK8YwPpYXXt2ixi1E&imp=6itcb0j185vpu9&prev_imp&forum_id=1691947&forum=arnabc&thread_id=1610089173&major_version=metadata&thread=1972855890&zone=internal_discoveryhttp://redirect.disqus.com/url?url=http%3A%2F%2Farnab.ch%2Fblog%2F2013%2F11%2Fdeveloping-kiosk-mode-applications-in-android%2F%3AjxuegUHqB6DK8YwPpYXXt2ixi1E&imp=6itcb0j185vpu9&prev_imp&forum_id=1691947&forum=arnabc&thread_id=1610089173&major_version=metadata&thread=1972855890&zone=internal_discoveryhttp://redirect.disqus.com/url?url=http%3A%2F%2Farnab.ch%2Fblog%2F2013%2F08%2Fasynchronous-http-requests-in-android-using-volley%2F%3AoCxLXbemSjmOZFq3HvC33W7zr08&imp=6itcb0j185vpu9&prev_imp&forum_id=1691947&forum=arnabc&thread_id=1610089173&major_version=metadata&thread=1624632515&zone=internal_discoveryhttp://redirect.disqus.com/url?url=http%3A%2F%2Farnab.ch%2Fblog%2F2013%2F08%2Fasynchronous-http-requests-in-android-using-volley%2F%3AoCxLXbemSjmOZFq3HvC33W7zr08&imp=6itcb0j185vpu9&prev_imp&forum_id=1691947&forum=arnabc&thread_id=1610089173&major_version=metadata&thread=1624632515&zone=internal_discovery
  • 5/26/2018 How to Write Custom Launcher App in Android - Arnab Chakraborty

    http:///reader/full/how-to-write-custom-launcher-app-in-android-arnab-chakrab

    4/9/14How to write custom launcher app in Android - Arnab Chakraborty

    Paghttp://arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android/

    Copyright 2014 - Arnab Chakraborty - Powered by Octopress

    http://octopress.org/