android - How to get the package name of an application and then launch that app using Intent? -
i developing android app. in app, there button go activity contains list of installed apps on phone. when user selects app, package name saved , user returns previous activity. but, how can package name?
public class loadercustomsupport extends sherlockfragmentactivity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); fragmentmanager fm = getsupportfragmentmanager(); // create list fragment , add our sole content. if (fm.findfragmentbyid(android.r.id.content) == null) { applistfragment list = new applistfragment(); fm.begintransaction().add(android.r.id.content, list).commit(); } } /** * class holds per-item data in our loader. */ public static class appentry { public appentry(applistloader loader, applicationinfo info) { mloader = loader; minfo = info; mapkfile = new file(info.sourcedir); } public applicationinfo getapplicationinfo() { return minfo; } public string getlabel() { return mlabel; } public drawable geticon() { if (micon == null) { if (mapkfile.exists()) { micon = minfo.loadicon(mloader.mpm); return micon; } else { mmounted = false; } } else if (!mmounted) { // if app wasn't mounted mounted, reload // icon. if (mapkfile.exists()) { mmounted = true; micon = minfo.loadicon(mloader.mpm); return micon; } } else { return micon; } return mloader.getcontext().getresources().getdrawable( android.r.drawable.sym_def_app_icon); } @override public string tostring() { return mlabel; } void loadlabel(context context) { if (mlabel == null || !mmounted) { if (!mapkfile.exists()) { mmounted = false; mlabel = minfo.packagename; } else { mmounted = true; charsequence label = minfo.loadlabel(context.getpackagemanager()); mlabel = label != null ? label.tostring() : minfo.packagename; } } } private final applistloader mloader; private final applicationinfo minfo; private final file mapkfile; private string mlabel; private drawable micon; private boolean mmounted; } /** * perform alphabetical comparison of application entry objects. */ public static final comparator<appentry> alpha_comparator = new comparator<appentry>() { private final collator scollator = collator.getinstance(); @override public int compare(appentry object1, appentry object2) { return scollator.compare(object1.getlabel(), object2.getlabel()); } }; /** * helper determining if configuration has changed in interesting * way need rebuild app list. */ public static class interestingconfigchanges { final configuration mlastconfiguration = new configuration(); int mlastdensity; boolean applynewconfig(resources res) { int configchanges = mlastconfiguration.updatefrom(res.getconfiguration()); boolean densitychanged = mlastdensity != res.getdisplaymetrics().densitydpi; if (densitychanged || (configchanges&(activityinfo.config_locale |activityinfocompat.config_ui_mode|activityinfo.config_screen_layout)) != 0) { mlastdensity = res.getdisplaymetrics().densitydpi; return true; } return false; } } /** * helper class interesting changes installed apps * loader can updated. */ public static class packageintentreceiver extends broadcastreceiver { final applistloader mloader; public packageintentreceiver(applistloader loader) { mloader = loader; intentfilter filter = new intentfilter(intent.action_package_added); filter.addaction(intent.action_package_removed); filter.addaction(intent.action_package_changed); filter.adddatascheme("package"); mloader.getcontext().registerreceiver(this, filter); // register events related sdcard installation. intentfilter sdfilter = new intentfilter(); sdfilter.addaction(intentcompat.action_external_applications_available); sdfilter.addaction(intentcompat.action_external_applications_unavailable); mloader.getcontext().registerreceiver(this, sdfilter); } @override public void onreceive(context context, intent intent) { // tell loader change. mloader.oncontentchanged(); } } /** * custom loader loads of installed applications. */ public static class applistloader extends asynctaskloader<list<appentry>> { final interestingconfigchanges mlastconfig = new interestingconfigchanges(); final packagemanager mpm; list<appentry> mapps; packageintentreceiver mpackageobserver; public applistloader(context context) { super(context); // retrieve package manager later use; note don't // use 'context' directly instead save global application // context returned getcontext(). mpm = getcontext().getpackagemanager(); } /** * bulk of our work done. function * called in background thread , should generate new set of * data published loader. */ @override public list<appentry> loadinbackground() { // retrieve known applications. list<applicationinfo> apps = mpm.getinstalledapplications( packagemanager.get_uninstalled_packages | packagemanager.get_disabled_components); if (apps == null) { apps = new arraylist<applicationinfo>(); } final context context = getcontext(); // create corresponding array of entries , load labels. list<appentry> entries = new arraylist<appentry>(apps.size()); (int i=0; i<apps.size(); i++) { appentry entry = new appentry(this, apps.get(i)); entry.loadlabel(context); entries.add(entry); } // sort list. collections.sort(entries, alpha_comparator); // done! return entries; } /** * called when there new data deliver client. * super class take care of delivering it; implementation * here adds little more logic. */ @override public void deliverresult(list<appentry> apps) { if (isreset()) { // async query came in while loader stopped. // don't need result. if (apps != null) { onreleaseresources(apps); } } list<appentry> oldapps = apps; mapps = apps; if (isstarted()) { // if loader started, can // deliver results. super.deliverresult(apps); } // @ point can release resources associated // 'oldapps' if needed; new result delivered // know no longer in use. if (oldapps != null) { onreleaseresources(oldapps); } } /** * handles request start loader. */ @override protected void onstartloading() { if (mapps != null) { // if have result available, deliver // immediately. deliverresult(mapps); } // start watching changes in app data. if (mpackageobserver == null) { mpackageobserver = new packageintentreceiver(this); } // has interesting in configuration changed since // last built app list? boolean configchange = mlastconfig.applynewconfig(getcontext().getresources()); if (takecontentchanged() || mapps == null || configchange) { // if data has changed since last time loaded // or not available, start load. forceload(); } } /** * handles request stop loader. */ @override protected void onstoploading() { // attempt cancel current load task if possible. cancelload(); } /** * handles request cancel load. */ @override public void oncanceled(list<appentry> apps) { super.oncanceled(apps); // @ point can release resources associated 'apps' // if needed. onreleaseresources(apps); } /** * handles request reset loader. */ @override protected void onreset() { super.onreset(); // ensure loader stopped onstoploading(); // @ point can release resources associated 'apps' // if needed. if (mapps != null) { onreleaseresources(mapps); mapps = null; } // stop monitoring changes. if (mpackageobserver != null) { getcontext().unregisterreceiver(mpackageobserver); mpackageobserver = null; } } /** * helper function take care of releasing resources associated * actively loaded data set. */ protected void onreleaseresources(list<appentry> apps) { // simple list<> there nothing do. // cursor, close here. } } public static class applistadapter extends arrayadapter<appentry> { private final layoutinflater minflater; public applistadapter(context context) { super(context, android.r.layout.simple_list_item_2); minflater = (layoutinflater)context.getsystemservice(context.layout_inflater_service); } public void setdata(list<appentry> data) { clear(); if (data != null) { (appentry appentry : data) { add(appentry); } } } /** * populate new items in list. */ @override public view getview(int position, view convertview, viewgroup parent) { view view; if (convertview == null) { view = minflater.inflate(r.layout.list_item_icon_text, parent, false); } else { view = convertview; } appentry item = getitem(position); ((imageview)view.findviewbyid(r.id.icon)).setimagedrawable(item.geticon()); ((textview)view.findviewbyid(r.id.text)).settext(item.getlabel()); return view; } } public static class applistfragment extends sherlocklistfragment implements loadermanager.loadercallbacks<list<appentry>> { // adapter being used display list's data. applistadapter madapter; // if non-null, current filter user has provided. string mcurfilter; onquerytextlistenercompat monquerytextlistenercompat; @override public void onactivitycreated(bundle savedinstancestate) { super.onactivitycreated(savedinstancestate); // give text display if there no data. in real // application come resource. setemptytext("no applications"); // have menu item show in action bar. sethasoptionsmenu(true); // create empty adapter use display loaded data. madapter = new applistadapter(getactivity()); setlistadapter(madapter); // start out progress indicator. setlistshown(false); // prepare loader. either re-connect existing one, // or start new one. getloadermanager().initloader(0, null, this); } @override public void oncreateoptionsmenu(menu menu, menuinflater inflater) { // place action bar item searching. menuitem item = menu.add("search"); item.seticon(android.r.drawable.ic_menu_search); item.setshowasaction(menuitem.show_as_action_if_room); view searchview = searchviewcompat.newsearchview(getactivity()); if (searchview != null) { searchviewcompat.setonquerytextlistener(searchview, new onquerytextlistenercompat() { @override public boolean onquerytextchange(string newtext) { // called when action bar search text has changed. since // simple array adapter, can have filtering. mcurfilter = !textutils.isempty(newtext) ? newtext : null; madapter.getfilter().filter(mcurfilter); return true; } }); item.setactionview(searchview); } } @override public void onlistitemclick(listview l, view v, int position, long id) { // insert desired behavior here. log.i("loadercustom", "item clicked: " + id); //here want know package name of selected app item in list } @override public loader<list<appentry>> oncreateloader(int id, bundle args) { // called when new loader needs created. // sample has 1 loader no arguments, simple. return new applistloader(getactivity()); } @override public void onloadfinished(loader<list<appentry>> loader, list<appentry> data) { // set new data in adapter. madapter.setdata(data); // list should shown. if (isresumed()) { setlistshown(true); } else { setlistshownnoanimation(true); } } @override public void onloaderreset(loader<list<appentry>> loader) { // clear data in adapter. madapter.setdata(null); } } }
here code:
final packagemanager pm = getpackagemanager(); //get list of installed apps. list<applicationinfo> packages = pm.getinstalledapplications(packagemanager.get_meta_data); (applicationinfo packageinfo : packages) { log.d(tag, "installed package :" + packageinfo.packagename); log.d(tag, "launch activity :" + pm.getlaunchintentforpackage(packageinfo.packagename)); }
Comments
Post a Comment