預備知識: 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(五)——設置壁紙