android手把手教你开发launcher(二)——列出安装的应用程序
16lz
2021-01-24
预备知识: GridView的使用 \ 改写BaseAdapter
列出已经安装的应用程序是作为launcher比不可少的功能。下面我们就讲解怎样将应用程序列出来。程序运行后的样子如下:
一. 修改main.xml,在其中添加一个GridView用来显示应用程序列表。
修改后如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <GridView android:layout_width="match_parent" android:id="@+id/apps_list" android:numColumns="4" android:layout_height="wrap_content"> </GridView></RelativeLayout>
二 . 通过PackageManager的api 查询已经安装的apk
我们写一个叫做loadApps的方法将活得的应用程序列表放到private List<ResolveInfo> mApps; 中,如下:
private void loadApps() { Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); new ImageView(MainActivity.this); mApps = getPackageManager().queryIntentActivities(mainIntent, 0); }
三. 实现用于显示Gridview的Adapter,使其显示获得的应用程序列表
直接上代码:
?
public class AppsAdapter extends BaseAdapter { public AppsAdapter(){ } @Override public int getCount() { return apps.size(); } @Override public Object getItem(int i) { return apps.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ImageView iv; if(view == null){ iv = new ImageView(MainActivity.this); iv.setScaleType(ImageView.ScaleType.FIT_CENTER); iv.setLayoutParams(new GridView.LayoutParams(50, 50)); } else { iv = (ImageView) view; } ResolveInfo info = apps.get(i); iv.setImageDrawable(info.activityInfo.loadIcon(getPackageManager())); return iv; } }
最后整个Activity的代码如下
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } private List<ResolveInfo> apps; private void loadApps() { Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); new ImageView(MainActivity.this); apps = getPackageManager().queryIntentActivities(mainIntent, 0); } public class AppsAdapter extends BaseAdapter { public AppsAdapter(){ } @Override public int getCount() { return apps.size(); } @Override public Object getItem(int i) { return apps.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ImageView iv; if(view == null){ iv = new ImageView(MainActivity.this); iv.setScaleType(ImageView.ScaleType.FIT_CENTER); iv.setLayoutParams(new GridView.LayoutParams(50, 50)); } else { iv = (ImageView) view; } ResolveInfo info = apps.get(i); iv.setImageDrawable(info.activityInfo.loadIcon(getPackageManager())); return iv; } }}
android手把手教你开发launcher(一)(AndroidStudio版)
android手把手教你开发launcher(二)——列出安装的应用程序
android手把手教你开发launcher(三)——启动安装的应用程序
android手把手教你开发launcher(四)——显示widget
android手把手教你开发launcher(五)——设置壁纸
转自:http://www.bangchui.org/read.php?tid=11761
更多相关文章
- android 获取电话本中的联系人列表
- Android应用程序UI设计(1)_布局
- 40个Android面试题
- JRuby on Java ME/CDC
- Android(安卓)NDK开发入门篇 .
- 将keras或tensorflow模型迁移到android端(AndroidStudio)
- Android(安卓)framework浅析[转]
- Android书签列表
- 如何在android平台上实现语音识别