Upload
ryan-murray
View
231
Download
0
Embed Size (px)
DESCRIPTION
launcher2
Citation preview
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_discovery5/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/