Android Activity中启动另一应用程序的方法,无需得到类名

在网上搜索了一会相关的实现代码,发现所有的文章都说是需要包名和类名。但是人家的程序,我们怎么可能知道哪个是第一个启动的Activity?所以,真正用在项目上,那种方法基本上没什么用的。于是查看官方文档,发现这样一个方法:

Java代码 收藏代码
  1. publicabstractIntentgetLaunchIntentForPackage(StringpackageName)



英文原文:Return a “good” intent to launch a front-door activity in a package, for use for example to implement an “open” button when browsing through packages.大概意思就是返回一个程序入口的Intent,就是Java程序的Main方法。
这下简单了,直接startActivity(返回的intent)即可。

Java代码 收藏代码
  1. importjava.util.ArrayList;
  2. importjava.util.HashMap;
  3. importjava.util.List;
  4. importandroid.app.Activity;
  5. importandroid.content.Intent;
  6. importandroid.content.pm.PackageInfo;
  7. importandroid.content.pm.PackageManager;
  8. importandroid.os.Bundle;
  9. importandroid.view.View;
  10. importandroid.widget.AdapterView;
  11. importandroid.widget.ListView;
  12. importandroid.widget.AdapterView.OnItemClickListener;
  13. publicclassMainextendsActivity{
  14. /**Calledwhentheactivityisfirstcreated.*/
  15. ListViewlv;
  16. Adapteradapter;
  17. ArrayList<HashMap<String,Object>>items=newArrayList<HashMap<String,Object>>();
  18. PackageManagerpm;
  19. @Override
  20. publicvoidonCreate(BundlesavedInstanceState){
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.main);
  23. lv=(ListView)findViewById(R.id.lv);
  24. finalPackageManagerpm=getPackageManager();
  25. //得到PackageManager对象
  26. List<PackageInfo>packs=pm
  27. .getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
  28. //得到系统安装的所有程序包的PackageInfo对象
  29. for(PackageInfopi:packs){
  30. HashMap<String,Object>map=newHashMap<String,Object>();
  31. map.put("icon",pi.applicationInfo.loadIcon(pm));
  32. //图标
  33. map.put("appName",pi.applicationInfo.loadLabel(pm));
  34. //应用名
  35. map.put("packageName",pi.packageName);
  36. //包名
  37. items.add(map);
  38. //循环读取存到HashMap,再增加到ArrayList.一个HashMap就是一项
  39. }
  40. adapter=newAdapter(this,items,R.layout.piitem,newString[]{
  41. "icon","appName","packageName"},newint[]{R.id.icon,
  42. R.id.appName,R.id.packageName});
  43. //参数:Context,ArrayList(item的集合),item的layout,包含ArrayList中Hashmap的key的数组,key所对应的值相对应的控件id
  44. lv.setAdapter(adapter);
  45. lv.setOnItemClickListener(newOnItemClickListener(){
  46. @Override
  47. publicvoidonItemClick(AdapterView<?>parent,Viewview,
  48. intposition,longid){
  49. //TODOAuto-generatedmethodstub
  50. StringpackageName=(String)items.get(position).get(
  51. "packageName");
  52. //取到点击的包名
  53. Intenti=pm.getLaunchIntentForPackage(packageName);
  54. //如果该程序不可启动(像系统自带的包,有很多是没有入口的)会返回NULL
  55. if(i!=null)
  56. startActivity(i);
  57. }
  58. });
  59. }
  60. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值