当前位置: 代码迷 >> Android >> Android Launcher研究(3)-列出所安装的应用,点击进入相应的应用
  详细解决方案

Android Launcher研究(3)-列出所安装的应用,点击进入相应的应用

热度:99   发布时间:2016-05-01 16:19:04.0
Android Launcher研究(三)-----------列出所安装的应用,点击进入相应的应用!

大家好,我今天给大家简单讲一下Launcher里如何列出所有安装的应用的,我们点击Launcher的抽屉(SlidingDrawer)就会出现所有安装的应用列表(当然Widget,Launcher本身除外).并且点击应用图标进入 相关应用。我这里就先简单的用一个GridView来显示应用。

老样子我还会写一个简单的Demo让大家理解。大家跟着我的步骤来。

第一步:新建一个Android工程命名为:Launcher.

第二步:修改main.xml布局文件,代码如下(只有一个GridView这里):

view plaincopy to clipboardprint?
  1. <?xml?version="1.0"?encoding="utf-8"?>??
  2. <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  3. ????android:orientation="vertical"??
  4. ????android:layout_width="fill_parent"??
  5. ????android:layout_height="fill_parent"??
  6. ????>??
  7. ????<GridView??
  8. ????????android:id="@+id/allapps"??
  9. ????????android:layout_width="fill_parent"??
  10. ????????android:layout_height="wrap_content"??
  11. ????/>??
  12. </LinearLayout>??

第三步:新建一个application_layout.xml布局文件,用来定义应用的图标和标题,代码如下:

view plaincopy to clipboardprint?
  1. <?xml?version="1.0"?encoding="utf-8"?>??
  2. <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  3. ????android:orientation="vertical"??
  4. ????android:layout_width="fill_parent"??
  5. ????android:layout_height="fill_parent"??
  6. ????>??
  7. ????<ImageView??
  8. ????????android:id="@+id/app_icon"??
  9. ????????android:layout_width="wrap_content"??
  10. ????????android:layout_height="wrap_content"??
  11. ????/>??
  12. ????<TextView??
  13. ????????android:id="@+id/app_title"??
  14. ????????android:layout_width="wrap_content"??
  15. ????????android:layout_height="wrap_content"??
  16. ????/>??
  17. </LinearLayout>??

第四步:也就是核心了,修改Launcher.java代码如下:

view plaincopy to clipboardprint?
  1. package?com.tutor.launcher;??
  2. import?java.util.Collections;??
  3. import?java.util.List;??
  4. import?android.app.Activity;??
  5. import?android.content.ComponentName;??
  6. import?android.content.Context;??
  7. import?android.content.Intent;??
  8. import?android.content.pm.PackageManager;??
  9. import?android.content.pm.ResolveInfo;??
  10. import?android.os.Bundle;??
  11. import?android.view.LayoutInflater;??
  12. import?android.view.View;??
  13. import?android.view.ViewGroup;??
  14. import?android.widget.AdapterView;??
  15. import?android.widget.BaseAdapter;??
  16. import?android.widget.GridView;??
  17. import?android.widget.ImageView;??
  18. import?android.widget.TextView;??
  19. import?android.widget.AdapterView.OnItemClickListener;??
  20. public?class?Launcher?extends?Activity?implements?OnItemClickListener{??
  21. ?????
  22. ????private?GridView?mGridView;??
  23. ????private?Context?mContext;??
  24. ????private?PackageManager?mPackageManager;??
  25. ????private?List<ResolveInfo>?mAllApps;??
  26. ??????
  27. ????public?void?onCreate(Bundle?savedInstanceState)?{??
  28. ????????super.onCreate(savedInstanceState);??
  29. ????????setContentView(R.layout.main);??
  30. ??????????
  31. ????????setupViews();??
  32. ??????????
  33. ????}??
  34. ??????
  35. ????public?void?setupViews(){??
  36. ????????mContext?=?Launcher.this;??
  37. ????????mPackageManager?=?getPackageManager();??
  38. ????????mGridView?=?(GridView)findViewById(R.id.allapps);??
  39. ????????bindAllApps();??
  40. ??????????
  41. ????????mGridView.setAdapter(new?GridItemAdapter(mContext,?mAllApps));??
  42. ????????mGridView.setNumColumns(4);??
  43. ????????mGridView.setOnItemClickListener(this);??
  44. ????}??
  45. ??????
  46. ????public?void?bindAllApps(){??
  47. ????????//这里是关键哦,我们平时写的应用总有一个activity申明成这两个属性??
  48. ????????//也就是应用的入口??
  49. ????????Intent?mainIntent?=?new?Intent(Intent.ACTION_MAIN,?null);??
  50. ????????mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);??
  51. ????????//符合上面条件的全部查出来,并且排序??
  52. ????????mAllApps?=?mPackageManager.queryIntentActivities(mainIntent,?0);??
  53. ????????Collections.sort(mAllApps,?new?ResolveInfo.DisplayNameComparator(mPackageManager));??
  54. ????}??
  55. ??????
  56. ??????
  57. ??????
  58. ????//gridview点击事件,点击进入相关应用??
  59. ????@Override??
  60. ????public?void?onItemClick(AdapterView<?>?parent,?View?view,?int?position,?long?id)?{??
  61. ????????//?TODO?Auto-generated?method?stub??
  62. ????????ResolveInfo?res?=?mAllApps.get(position);??
  63. ????????//该应用的包名和主Activity??
  64. ????????String?pkg?=?res.activityInfo.packageName;??
  65. ????????String?cls?=?res.activityInfo.name;??
  66. ??????????
  67. ????????ComponentName?componet?=?new?ComponentName(pkg,?cls);??
  68. ??????????
  69. ????????Intent?i?=?new?Intent();??
  70. ????????i.setComponent(componet);??
  71. ????????startActivity(i);??
  72. ????}??
  73. ??????
  74. ????//不明白BaseAdapter的用法?我高手进阶里有??
  75. ????private?class?GridItemAdapter?extends?BaseAdapter{??
  76. ????????private?Context?context;??
  77. ????????private?List<ResolveInfo>?resInfo;??
  78. ??????????
  79. ????????//构造函数??
  80. ????????public?GridItemAdapter(Context?c,List<ResolveInfo>?res){??
  81. ????????????context?=?c;??
  82. ????????????resInfo?=?res;??
  83. ????????}??
  84. ????????@Override??
  85. ????????public?int?getCount()?{??
  86. ????????????//?TODO?Auto-generated?method?stub??
  87. ????????????return?resInfo.size();??
  88. ????????}??
  89. ????????@Override??
  90. ????????public?Object?getItem(int?position)?{??
  91. ????????????//?TODO?Auto-generated?method?stub??
  92. ????????????return?null;??
  93. ????????}??
  94. ????????@Override??
  95. ????????public?long?getItemId(int?position)?{??
  96. ????????????//?TODO?Auto-generated?method?stub??
  97. ????????????return?0;??
  98. ????????}??
  99. ????????@Override??
  100. ????????public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{??
  101. ??????????????
  102. ????????????//不明白LayoutInflater的我android高手进阶里有??
  103. ????????????convertView?=?LayoutInflater.from(context)??
  104. ????????????.inflate(R.layout.application_layout,?null);??
  105. ??????????????
  106. ????????????ImageView?app_icon?=?(ImageView)convertView.findViewById(R.id.app_icon);??
  107. ????????????TextView?app_tilte?=?(TextView)convertView.findViewById(R.id.app_title);??
  108. ??????????????
  109. ????????????ResolveInfo?res?=?resInfo.get(position);??
  110. ????????????app_icon.setImageDrawable(res.loadIcon(mPackageManager));??
  111. ????????????app_tilte.setText(res.loadLabel(mPackageManager).toString());??
  112. ????????????return?convertView;??
  113. ????????}??
  114. ??????????
  115. ????}??
  116. }??

第五步:运行以上工程,得到的效果图如下:

图1.列出所有安装的应用.

图2.点击aQQ应用进入到相应的应用里。

OK,今天就写到这里,大家有什么不明白的地方可 以留言。thx~

  相关解决方案